diff --git a/openhis-ui-vue3/src/views/inpatientNurse/medicalOrderExecution/components/prescriptionList.vue b/openhis-ui-vue3/src/views/inpatientNurse/medicalOrderExecution/components/prescriptionList.vue index 36df2f50..488c1358 100755 --- a/openhis-ui-vue3/src/views/inpatientNurse/medicalOrderExecution/components/prescriptionList.vue +++ b/openhis-ui-vue3/src/views/inpatientNurse/medicalOrderExecution/components/prescriptionList.vue @@ -270,7 +270,7 @@ function normalizeDayTimeHm(part) { return `${h}:${m}`; } -function handleGetPrescription() { +function handleGetPrescription(skipAutoSelectAll = false) { if (patientInfoList.value.length > 0) { loading.value = true; let encounterIds = patientInfoList.value.map((i) => i.encounterId).join(','); @@ -430,10 +430,12 @@ function handleGetPrescription() { // 将分组结果转换为数组形式 prescriptionList.value = Object.values(groupedPrescriptions); - // 默认选中全部行 - nextTick(() => { - defaultSelectAllRows(); - }); + // 默认选中全部行(执行后刷新时不自动全选,保持用户操作状态) + if (!skipAutoSelectAll) { + nextTick(() => { + defaultSelectAllRows(); + }); + } } catch (error) { console.error('医嘱执行-获取处方列表数据处理失败:', error); prescriptionList.value = []; @@ -469,18 +471,17 @@ function handleExecute() { console.log(list, 'list'); adviceExecute({ exeDate: exeDate.value, adviceExecuteDetailList: list }).then((res) => { if (res.code == 200) { - handleGetPrescription(); - // 仅当选中医嘱中包含药品/耗材类医嘱时,才调用耗材批号匹配 - const hasMedOrDevice = list.some( - (item) => - item.adviceTable === 'med_medication_request' || - String(item.adviceTable || '').includes('device'), + // 仅当选中医嘱中包含耗材类医嘱时,才调用耗材批号匹配(排除纯药品医嘱场景) + const hasDevice = list.some((item) => + String(item.adviceTable || '').includes('device'), ); - if (hasMedOrDevice) { + if (hasDevice) { lotNumberMatch({ encounterIdList: encounterIds }, { skipErrorMsg: true }).catch((error) => { console.warn('lotNumberMatch failed after adviceExecute:', error); }); } + // 刷新列表(不自动全选,保持用户操作前的选择状态) + handleGetPrescription(true); proxy.$modal.msgSuccess(res.msg || '医嘱执行成功'); } else { proxy.$modal.msgError(res.msg || '医嘱执行失败'); @@ -504,7 +505,7 @@ function handleNoExecute() { adviceNoExecute({ adviceExecuteDetailList: list }).then((res) => { if (res.code == 200) { proxy.$modal.msgSuccess(res.msg || '操作成功'); - handleGetPrescription(); + handleGetPrescription(true); } else { proxy.$modal.msgError(res.msg || '操作失败'); } @@ -543,7 +544,7 @@ function handleCancel() { adviceCancel({ adviceExecuteDetailList: producerIds }).then((res) => { if (res.code == 200) { proxy.$modal.msgSuccess(res.msg || '取消执行成功'); - handleGetPrescription(); + handleGetPrescription(true); } else { proxy.$modal.msgError(res.msg || '取消执行失败'); } diff --git a/openhis-ui-vue3/src/views/surgicalschedule/index.vue b/openhis-ui-vue3/src/views/surgicalschedule/index.vue index 2e1045b1..5825b188 100755 --- a/openhis-ui-vue3/src/views/surgicalschedule/index.vue +++ b/openhis-ui-vue3/src/views/surgicalschedule/index.vue @@ -1412,6 +1412,10 @@ async function handleChargeCharge(row) { // 关闭计费弹窗 function closeChargeDialog() { + // 先关闭 prescriptionlist 内所有已打开的项目字典 popover + if (prescriptionRef.value && prescriptionRef.value.closeAllPopovers) { + prescriptionRef.value.closeAllPopovers() + } showChargeDialog.value = false chargePatientInfo.value = {} chargeSurgeryInfo.value = {}