diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 624ebdc1..ade5cabe 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -557,16 +557,20 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } } - // 药品 + // 药品(前端adviceType=1) List medicineList = adviceSaveList.stream() - .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); - // 耗材 + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType()) + || e.getAdviceType() == 1).collect(Collectors.toList()); + // 耗材(前端adviceType=4,后端ItemType.DEVICE=2) List deviceList = adviceSaveList.stream() - .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); - // 诊疗活动(包括普通诊疗和会诊:前端会诊类型值为5) + .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType()) + || e.getAdviceType() == 4) // 🔧 BugFix: 前端耗材类型值为4 + .collect(Collectors.toList()); + // 诊疗活动(包括普通诊疗:前端adviceType=3,会诊:前端adviceType=5) List activityList = adviceSaveList.stream() .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType()) - || e.getAdviceType() == 5) // 🔧 BugFix: 会诊类型值为5,也归类到诊疗活动 + || e.getAdviceType() == 3 // 🔧 BugFix: 前端诊疗类型值为3 + || e.getAdviceType() == 5) // 🔧 BugFix: 前端会诊类型值为5 .collect(Collectors.toList()); // 🔍 Debug日志: 记录分类结果 diff --git a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue index 8f4c2eb9..07782cd1 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue @@ -2005,10 +2005,30 @@ function handleDelete() { hasRequestId: !!item.requestId }))); - if (draftConsultations.length > 0) { - console.log('BugFix#219: 开始作废草稿状态会诊医嘱'); + // 🔧 BugFix: 分离不同状态的会诊医嘱 + let cancelledConsultations = draftConsultations.filter(item => item.statusEnum == 5); // 已作废 + let normalDraftConsultations = draftConsultations.filter(item => item.statusEnum != 5); // 其他状态 + + console.log('BugFix#219: cancelledConsultations=', cancelledConsultations.length, 'normalDraftConsultations=', normalDraftConsultations.length); + + // 处理已作废的会诊医嘱(直接从前端列表移除) + if (cancelledConsultations.length > 0) { + console.log('BugFix#219: 已作废的会诊医嘱直接从前端移除'); + cancelledConsultations.forEach(item => { + const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey); + if (index !== -1) { + console.log('BugFix#219: 从列表中移除已作废会诊医嘱, index=', index, 'adviceName=', item.adviceName); + prescriptionList.value.splice(index, 1); + } + }); + proxy.$modal.msgSuccess('会诊申请已删除'); + } + + // 处理草稿/已提交的会诊医嘱(需要调用后端API) + if (normalDraftConsultations.length > 0) { + console.log('BugFix#219: 开始作废草稿/已提交状态会诊医嘱'); // 草稿状态的会诊直接作废 - let deletePromises = draftConsultations.map(item => { + let deletePromises = normalDraftConsultations.map(item => { // 🔧 BugFix: 从contentJson中解析consultationId let consultationId = item.requestId; try { @@ -2044,7 +2064,7 @@ function handleDelete() { if (successCount > 0) { console.log('BugFix#219: 作废成功', successCount, '条,从列表中移除'); // 从 prescriptionList 中移除已作废的会诊医嘱 - draftConsultations.forEach(item => { + normalDraftConsultations.forEach(item => { const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey); if (index !== -1) { console.log('BugFix#219: 从列表中移除会诊医嘱, index=', index, 'adviceName=', item.adviceName); @@ -2054,7 +2074,10 @@ function handleDelete() { } getListInfo(false); }); - } else { + } + + // 如果没有草稿/已提交的会诊,且没有已作废的会诊,提示不可删除 + if (normalDraftConsultations.length == 0 && cancelledConsultations.length == 0) { console.log('BugFix#219: 没有符合条件的会诊医嘱可删除'); proxy.$modal.msgWarning('所选会诊医嘱不可删除'); } @@ -2070,14 +2093,39 @@ function handleDelete() { let deleteList = []; let sum = 0; // 未保存总数量 + + // 🔧 BugFix: 添加调试日志 + console.log('BugFix#219: 普通医嘱删除处理, normalRows=', normalRows.map(item => ({ + adviceType: item.adviceType, + statusEnum: item.statusEnum, + requestId: item.requestId, + adviceName: item.adviceName, + uniqueKey: item.uniqueKey + }))); + + console.log('BugFix#219: prescriptionList 中的所有医嘱=', prescriptionList.value.map(item => ({ + adviceType: item.adviceType, + statusEnum: item.statusEnum, + adviceName: item.adviceName, + uniqueKey: item.uniqueKey + }))); + for (let i = prescriptionList.value.length - 1; i >= 0; i--) { let deleteItem = prescriptionList.value[i]; let index = normalRows.findIndex((item) => item.uniqueKey === deleteItem.uniqueKey); + // 🔧 BugFix: 添加调试日志 + if (index != -1) { + console.log('BugFix#219: 找到匹配的医嘱, i=', i, 'uniqueKey=', deleteItem.uniqueKey, + 'statusEnum=', deleteItem.statusEnum, 'requestId=', deleteItem.requestId); + } // 通过requestId判断是否已保存,如果选中项未保存 直接从数组中移除,如果已保存,调接口删除 - if (index != -1 && deleteItem.statusEnum == 1 && !deleteItem.requestId) { + // 🔧 BugFix: 放宽条件,支持 statusEnum 为 1(草稿) 或 2(待签发/已签发) 的医嘱都可以删除 + if (index != -1 && (deleteItem.statusEnum == 1 || deleteItem.statusEnum == 2) && !deleteItem.requestId) { + console.log('BugFix#219: 删除未保存的医嘱, i=', i); prescriptionList.value.splice(i, 1); sum++; - } else if (index != -1 && deleteItem.statusEnum == 1 && deleteItem.requestId) { + } else if (index != -1 && (deleteItem.statusEnum == 1 || deleteItem.statusEnum == 2) && deleteItem.requestId) { + console.log('BugFix#219: 添加到删除列表, requestId=', deleteItem.requestId); deleteList.push({ requestId: deleteItem.requestId, dbOpType: '3', @@ -2087,6 +2135,9 @@ function handleDelete() { }); } } + + console.log('BugFix#219: 普通医嘱删除列表, deleteList=', deleteList.length, 'sum=', sum); + handleEmrTreatment(); updateExpandOrder([]); isAdding.value = false; @@ -3436,10 +3487,29 @@ function handleSingOut() { let submittedConsultations = consultationRows.filter(item => item.requestId); console.log('BugFix#219: 可处理的会诊医嘱=', submittedConsultations.length); - // 处理草稿状态的会诊(直接作废) - if (submittedConsultations.length > 0) { - console.log('BugFix#219: 开始处理会诊医嘱, 数量=', submittedConsultations.length); - let processPromises = submittedConsultations.map(item => { + // 🔧 BugFix: 分离已作废的会诊医嘱 + let cancelledConsultations = submittedConsultations.filter(item => item.statusEnum == 5); // 已作废 + let normalConsultations = submittedConsultations.filter(item => item.statusEnum != 5); // 其他状态 + + console.log('BugFix#219: cancelledConsultations=', cancelledConsultations.length, 'normalConsultations=', normalConsultations.length); + + // 处理已作废的会诊医嘱(直接从前端列表移除) + if (cancelledConsultations.length > 0) { + console.log('BugFix#219: 已作废的会诊医嘱直接从前端移除'); + cancelledConsultations.forEach(item => { + const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey); + if (index !== -1) { + console.log('BugFix#219: 从列表中移除已作废会诊医嘱, index=', index, 'adviceName=', item.adviceName); + prescriptionList.value.splice(index, 1); + } + }); + proxy.$modal.msgSuccess('会诊申请已移除'); + } + + // 处理草稿/已提交的会诊医嘱(需要调用后端API) + if (normalConsultations.length > 0) { + console.log('BugFix#219: 开始处理会诊医嘱, 数量=', normalConsultations.length); + let processPromises = normalConsultations.map(item => { // 🔧 BugFix: 从contentJson中解析consultationId let consultationId = item.requestId; try { @@ -3481,7 +3551,7 @@ function handleSingOut() { if (successCount > 0) { console.log('BugFix#219: 会诊医嘱处理成功', successCount, '条,从列表中移除'); // 从 prescriptionList 中移除已处理的会诊医嘱 - submittedConsultations.forEach(item => { + normalConsultations.forEach(item => { const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey); if (index !== -1) { console.log('BugFix#219: 从列表中移除会诊医嘱, index=', index, 'adviceName=', item.adviceName); @@ -3491,7 +3561,10 @@ function handleSingOut() { } getListInfo(false); }); - } else { + } + + // 如果没有可处理的会诊,且没有已作废的会诊,提示不可撤回 + if (normalConsultations.length == 0 && cancelledConsultations.length == 0) { console.log('BugFix#219: 没有可处理的会诊医嘱'); proxy.$modal.msgWarning('所选会诊医嘱不可撤回'); } @@ -3505,10 +3578,21 @@ function handleSingOut() { // 处理普通医嘱撤回 if (normalRows.length > 0) { + // 🔧 BugFix: 添加调试日志 + console.log('BugFix#219: 普通医嘱撤回处理, normalRows=', normalRows.map(item => ({ + adviceType: item.adviceType, + statusEnum: item.statusEnum, + requestId: item.requestId, + adviceName: item.adviceName + }))); + + // 🔧 BugFix: 放宽条件,支持 statusEnum 为 1(草稿) 或 2(已签发) 的医嘱都可以撤回 let requestIdList = normalRows - .filter((item) => item.statusEnum == 2) + .filter((item) => item.statusEnum == 1 || item.statusEnum == 2) .map((item) => item.requestId); + console.log('BugFix#219: 可撤回的普通医嘱, requestIdList=', requestIdList); + if (requestIdList.length == 0) { proxy.$modal.msgWarning('所选普通医嘱无可撤回项'); return;