diff --git a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue index 9101399f..39dbab7f 100644 --- a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue @@ -383,6 +383,7 @@ const props = defineProps({ }, }); const isAdding = ref(false); +const isSaving = ref(false); // #437 防重复提交锁 const prescriptionRef = ref(); const expandOrder = ref([]); //目前的展开行 const stockList = ref([]); @@ -1028,13 +1029,18 @@ function handleSave() { }) groupIndexList.value = [] groupList.value = [] - nextId.value == 1; + nextId.value = 1; } }); } // 单行处方保存 function handleSaveSign(row, index) { + // 🔧 Bug Fix #437: 防重复提交锁 + if (isSaving.value) { + proxy.$modal.msgWarning('正在保存中,请勿重复提交'); + return; + } // 🔧 Bug Fix #238: 诊疗项目必须选择执行科室 if (row.adviceType === 3 && !row.orgId) { proxy.$modal.msgWarning('诊疗项目必须选择执行科室'); @@ -1042,33 +1048,37 @@ function handleSaveSign(row, index) { } proxy.$refs['formRef' + index].validate((valid) => { if (valid) { + isSaving.value = true; // #437 加锁 row.isEdit = false; isAdding.value = false; expandOrder.value = []; row.patientId = props.patientInfo.patientId; row.encounterId = props.patientInfo.encounterId; row.accountId = props.patientInfo.accountId; - row.contentJson = JSON.stringify(row); - row.dbOpType = row.requestId ? '2' : '1'; - row.minUnitQuantity = row.quantity * row.partPercent; - row.categoryEnum = row.adviceType + const cleanRow = JSON.parse(JSON.stringify(row)); + cleanRow.contentJson = JSON.stringify(cleanRow); + cleanRow.dbOpType = cleanRow.requestId ? '2' : '1'; + cleanRow.minUnitQuantity = cleanRow.quantity * cleanRow.partPercent; + cleanRow.categoryEnum = cleanRow.adviceType // 如果是手术计费,设置生成来源和来源业务单据号 if (props.patientInfo.sourceBillNo) { - row.generateSourceEnum = 6; // 手术计费 - row.sourceBillNo = props.patientInfo.sourceBillNo; + cleanRow.generateSourceEnum = 6; // 手术计费 + cleanRow.sourceBillNo = props.patientInfo.sourceBillNo; } - console.log('row', row) - savePrescription({ adviceSaveList: [row] }).then((res) => { + console.log('cleanRow', cleanRow) + savePrescription({ adviceSaveList: [cleanRow] }).then((res) => { if (res.code === 200) { proxy.$modal.msgSuccess('保存成功'); getListInfo(false); - nextId.value == 1; + nextId.value = 1; // 🔧 Bug Fix #238: 如果诊疗项目缺少执行科室,标记为需要修复的脏数据 if (row.adviceType === 3 && !row.orgId) { - console.warn('Bug #238: 检测到诊疗项目保存时缺少执行科室,请手动编辑修正:', row); + console.warn('Bug #238: 检测到诊疗项目保存时缺少执行科室,请手动编辑修正:', cleanRow); proxy.$modal.msgWarning('诊疗项目执行科室信息不完整,请编辑后重新保存'); } } + }).finally(() => { + isSaving.value = false; // #437 释放锁 }); } });