Compare commits

...

5 Commits

Author SHA1 Message Date
关羽
c0cdfcc688 Fix Bug #506: 门诊挂号:门诊诊前退号后,数据库多表状态值变更与 PRD 定义不符
在 syncAppointmentReturnStatus 方法中:
1. 退号时同步将 order_main.pay_status 设为 0(未支付),修复退费后 pay_status 仍为 1 的问题
2. cancel_reason 固定使用标准化值"门诊退号",确保与 PRD 定义一致

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 23:58:32 +08:00
关羽
7df162177a Fix Bug #477: 住院医生工作站-住院检查申请详情弹窗中"发往科室"字段显示为短横线(-),未正常获取数据
修复 examineApplication.vue 中 recursionFun 函数的空指针异常:
1. 增加 orgOptions.value 数组有效性校验,防止接口未返回数据时崩溃
2. 增加 obj.children 的 Array.isArray 检查,原代码直接访问 children.length 在 children 为 undefined 时抛 TypeError
3. 匹配成功后增加 break 提前退出循环
4. handleViewDetail 增加 targetDepartment 存在性检查,递归查找失败时回退显示原始 ID 值
2026-05-10 23:56:28 +08:00
赵云
644c8285b5 Fix Bug #479: [住院护士站-三测单] 体征录入模块缺少"录入日期"字段,导致无法补录历史体征数据
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 23:56:28 +08:00
赵云
28e0228ff5 Fix Bug #493: 【住院医生工作站-临床医嘱-检验申请】项目未维护执行科室时,医生手动选择发往科室后仍报错且数据被清空 2026-05-10 23:56:28 +08:00
关羽
6b3f74d2ca Fix Bug #487: 【临床医嘱】诊疗类医嘱签发后,列表状态未实时刷新为"已签发"
诊疗类医嘱(handService)签发时仅依赖saveOrUpdate更新statusEnum,
但该方式对已有记录可能未正确将statusEnum更新为ACTIVE(2)。
修复:在handService方法末尾使用LambdaUpdateWrapper批量显式更新
所有已处理ServiceRequest的statusEnum为ACTIVE(签发)/DRAFT(保存),
与ServiceRequestServiceImpl中activeStatusEnum/updateDraftStatusBatch
等方法的实现模式保持一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:20:02 +08:00
5 changed files with 58 additions and 12 deletions

View File

@@ -633,9 +633,9 @@ public class OutpatientRegistrationAppServiceImpl implements IOutpatientRegistra
Order updateOrder = new Order(); Order updateOrder = new Order();
updateOrder.setId(appointmentOrder.getId()); updateOrder.setId(appointmentOrder.getId());
updateOrder.setStatus(CommonConstants.AppointmentOrderStatus.RETURNED); updateOrder.setStatus(CommonConstants.AppointmentOrderStatus.RETURNED);
updateOrder.setPayStatus(0);
updateOrder.setCancelTime(now); updateOrder.setCancelTime(now);
updateOrder.setCancelReason( updateOrder.setCancelReason("门诊退号");
StringUtils.isNotEmpty(reason) ? reason : "门诊退号");
updateOrder.setUpdateTime(now); updateOrder.setUpdateTime(now);
orderService.updateById(updateOrder); orderService.updateById(updateOrder);
} }

View File

@@ -511,6 +511,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 签发操作 // 签发操作
boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType);
// 收集已处理的requestId用于批量更新状态
List<Long> processedRequestIds = new ArrayList<>();
// 声明长期医嘱诊疗请求 // 声明长期医嘱诊疗请求
ServiceRequest longServiceRequest; ServiceRequest longServiceRequest;
// 新增 + 修改 (长期医嘱) // 新增 + 修改 (长期医嘱)
@@ -555,6 +558,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
iServiceRequestService.saveOrUpdate(longServiceRequest); iServiceRequestService.saveOrUpdate(longServiceRequest);
if (longServiceRequest.getId() != null) {
processedRequestIds.add(longServiceRequest.getId());
}
} }
// 声明临时医嘱诊疗请求 // 声明临时医嘱诊疗请求
@@ -603,6 +609,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
iServiceRequestService.saveOrUpdate(tempServiceRequest); iServiceRequestService.saveOrUpdate(tempServiceRequest);
if (tempServiceRequest.getId() != null) {
processedRequestIds.add(tempServiceRequest.getId());
}
// 保存时,保存诊疗费用项 // 保存时,保存诊疗费用项
if (is_save) { if (is_save) {
@@ -654,6 +663,14 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
// 批量更新诊疗医嘱状态(使用 update 确保状态字段必定更新)
if (!processedRequestIds.isEmpty()) {
iServiceRequestService.update(null,
new LambdaUpdateWrapper<ServiceRequest>()
.set(ServiceRequest::getStatusEnum,
is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue())
.in(ServiceRequest::getId, processedRequestIds));
}
} }
/** /**

View File

@@ -457,20 +457,27 @@ const getLocationInfo = () => {
}; };
const recursionFun = (targetDepartment) => { const recursionFun = (targetDepartment) => {
if (!targetDepartment) return '';
if (!Array.isArray(orgOptions.value) || orgOptions.value.length === 0) return '';
let name = ''; let name = '';
for (let index = 0; index < orgOptions.value.length; index++) { for (let index = 0; index < orgOptions.value.length; index++) {
const obj = orgOptions.value[index]; const obj = orgOptions.value[index];
if (obj.id == targetDepartment) { if (obj.id == targetDepartment) {
name = obj.name; name = obj.name;
break;
} }
const subObjArray = obj['children']; const subObjArray = obj['children'];
for (let index = 0; index < subObjArray.length; index++) { if (Array.isArray(subObjArray)) {
const item = subObjArray[index]; for (let i = 0; i < subObjArray.length; i++) {
const item = subObjArray[i];
if (item.id == targetDepartment) { if (item.id == targetDepartment) {
name = item.name; name = item.name;
break;
} }
} }
} }
if (name) break;
}
return name; return name;
}; };
@@ -482,7 +489,10 @@ const handleViewDetail = (row) => {
if (row.descJson) { if (row.descJson) {
try { try {
const obj = JSON.parse(row.descJson); const obj = JSON.parse(row.descJson);
obj.targetDepartment = recursionFun(obj.targetDepartment); if (obj.targetDepartment) {
const deptName = recursionFun(obj.targetDepartment);
obj.targetDepartment = deptName || obj.targetDepartment;
}
descJsonData.value = obj; descJsonData.value = obj;
} catch (e) { } catch (e) {
console.error('解析 descJson 失败:', e); console.error('解析 descJson 失败:', e);

View File

@@ -17,13 +17,11 @@
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="医技报告" name="fourth">Task</el-tab-pane> --> <!-- <el-tab-pane label="医技报告" name="fourth">Task</el-tab-pane> -->
<el-tab-pane label="检验申请" name="test"> <el-tab-pane label="检验申请" name="test">
<TestApplication ref="testApplicationRef" :show-status-column="true" /> <TestApplication ref="testApplicationRef" :show-status-column="false" />
</el-tab-pane> </el-tab-pane>
```vue
<el-tab-pane label="检查申请" name="examine"> <el-tab-pane label="检查申请" name="examine">
<ExamineApplication ref="examineApplicationRef" /> <ExamineApplication ref="examineApplicationRef" />
</el-tab-pane> </el-tab-pane>
```
<el-tab-pane label="汇总发药申请" name="summaryDrug"> <el-tab-pane label="汇总发药申请" name="summaryDrug">
<SummaryDrugApplication ref="summaryDrugApplicationRef" /> <SummaryDrugApplication ref="summaryDrugApplicationRef" />
</el-tab-pane> </el-tab-pane>
@@ -48,6 +46,10 @@
<script setup> <script setup>
import {computed, onBeforeMount, onMounted, provide, reactive, ref, watch,} from 'vue'; import {computed, onBeforeMount, onMounted, provide, reactive, ref, watch,} from 'vue';
import Emr from './emr/index.vue';
import inPatientBarDoctorFold from '@/component
```
import Emr from './emr/index.vue'; import Emr from './emr/index.vue';
import inPatientBarDoctorFold from '@/components/patientBar/inPatientBarDoctorFold.vue'; import inPatientBarDoctorFold from '@/components/patientBar/inPatientBarDoctorFold.vue';
import PatientList from '@/components/PatientList/patient-list.vue'; import PatientList from '@/components/PatientList/patient-list.vue';

View File

@@ -112,6 +112,19 @@
<el-form ref="dynamicForm" :model="formData" label-width="100px" :rules="formRules"> <el-form ref="dynamicForm" :model="formData" label-width="100px" :rules="formRules">
<div class="page-bottom"> <div class="page-bottom">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="8">
<el-form-item style="margin-top: 15px" label="录入日期">
<el-date-picker
v-model="formData.recordingDate"
type="date"
placeholder="请选择日期"
size="small"
format="YYYY/MM/DD"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item style="margin-top: 15px" label="录入时间"> <el-form-item style="margin-top: 15px" label="录入时间">
<div class="input-time-inline"> <div class="input-time-inline">
@@ -766,6 +779,7 @@ const receptionTime = ref(null);
// 表单数据 - 体征录入 // 表单数据 - 体征录入
const formData = ref({ const formData = ref({
recordingDate: '',
timePoint: '', timePoint: '',
temperature: '', temperature: '',
systolicPressure: '', systolicPressure: '',
@@ -872,6 +886,7 @@ function getPatientDetial() {
// 默认查询今天的数据 // 默认查询今天的数据
const today = moment().format('YYYY-MM-DD'); const today = moment().format('YYYY-MM-DD');
receptionTime.value = [today, today]; receptionTime.value = [today, today];
formData.value.recordingDate = today;
// 自动加载数据 // 自动加载数据
getPatientList(); getPatientList();
listPatient(queryParams.value).then((res) => { listPatient(queryParams.value).then((res) => {
@@ -920,6 +935,7 @@ function handleRowClick(row) {
formData.value = { formData.value = {
...formData.value, ...formData.value,
id: row.id, id: row.id,
recordingDate: row.recordingDate || '',
timePoint: convertTimePoint(row.timePoint) || '', timePoint: convertTimePoint(row.timePoint) || '',
temperature: row.temperature || '', temperature: row.temperature || '',
systolicPressure: row.systolicPressure || '', systolicPressure: row.systolicPressure || '',
@@ -1038,7 +1054,7 @@ function confirmCharge() {
params.vitalSignsCode = vitalSignsCode; params.vitalSignsCode = vitalSignsCode;
params.vitalSignsValues = vitalSignsValues; params.vitalSignsValues = vitalSignsValues;
params.recordingDate = moment(new Date()).format('YYYY-MM-DD'); params.recordingDate = formData.value.recordingDate || moment(new Date()).format('YYYY-MM-DD');
addVitalSigns(params).then(res => { addVitalSigns(params).then(res => {
console.log('保存成功:', res); console.log('保存成功:', res);
@@ -1047,6 +1063,7 @@ function confirmCharge() {
getPatientList(); getPatientList();
// 清空表单 // 清空表单
formData.value = { formData.value = {
recordingDate: '',
timePoint: '', timePoint: '',
temperature: '', temperature: '',
systolicPressure: '', systolicPressure: '',