diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue index a2597ef61..6dab13c2c 100755 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue @@ -1596,36 +1596,39 @@ function handleSaveGroup(orderGroupList) { patientId: patientInfo.value.patientId, encounterId: patientInfo.value.encounterId, accountId: accountId.value, - quantity: item.quantity, - methodCode: item.methodCode, - rateCode: item.rateCode, - dispensePerDuration: item.dispensePerDuration, - dose: item.dose, - doseQuantity: item.doseQuantity, + // 🔧 修复 Bug #403:从 mergedDetail 读取明细字段,而非直接从 item 取 + // item.dose 等字段可能为 null,mergedDetail 已做 ?? 兜底 + quantity: mergedDetail.quantity ?? item.quantity, + methodCode: mergedDetail.methodCode ?? item.methodCode, + rateCode: mergedDetail.rateCode ?? item.rateCode, + dispensePerDuration: mergedDetail.dispensePerDuration ?? item.dispensePerDuration, + dose: mergedDetail.dose ?? item.dose, + doseQuantity: mergedDetail.doseQuantity ?? item.doseQuantity, executeNum: 1, - unitCode: item.unitCode, - unitCode_dictText: item.unitCodeName || '', + unitCode: mergedDetail.unitCode ?? item.unitCode, + unitCode_dictText: item.unitCodeName || mergedDetail.unitCodeName || '', statusEnum: 1, - orgId: resolveOrgId(item.orderDetailInfos?.orgId || mergedDetail.orgId || patientInfo.value?.inHospitalOrgId) || '', - // 🔧 修复:同时保存 orgName,确保树匹配不到时仍有中文名称可显示 - orgName: findOrgName(item.orderDetailInfos?.orgId || mergedDetail.orgId || patientInfo.value?.inHospitalOrgId) || item.orderDetailInfos?.orgName || mergedDetail.orgName || patientInfo.value?.inHospitalOrgName || '', + orgId: resolveOrgId(mergedDetail.orgId || patientInfo.value?.inHospitalOrgId) || '', + // 🔧 修复:同时存储 orgName,确保树匹配不到时仍有中文名称可显示 + orgName: findOrgName(mergedDetail.orgId || patientInfo.value?.inHospitalOrgId) || mergedDetail.orgName || patientInfo.value?.inHospitalOrgName || '', dbOpType: prescriptionList.value[rowIndex.value].requestId ? '2' : '1', conditionId: conditionId.value, conditionDefinitionId: conditionDefinitionId.value, encounterDiagnosisId: encounterDiagnosisId.value, - therapyEnum: prescriptionList.value[rowIndex.value]?.therapyEnum || '1', + therapyEnum: prescriptionList.value[rowIndex.value]?.therapyEnum || mergedDetail.therapyEnum || '1', }; // 计算价格和总量 - const unitInfo = unitCodeList.value.find((k) => k.value == item.unitCode); + const resolvedUnitCode = mergedDetail.unitCode ?? item.unitCode; + const unitInfo = unitCodeList.value.find((k) => k.value == resolvedUnitCode); if (unitInfo && unitInfo.type == 'minUnit') { newRow.price = newRow.minUnitPrice; - newRow.totalPrice = (item.quantity * newRow.minUnitPrice).toFixed(6); - newRow.minUnitQuantity = item.quantity; + newRow.totalPrice = (newRow.quantity * newRow.minUnitPrice).toFixed(6); + newRow.minUnitQuantity = newRow.quantity; } else { newRow.price = newRow.unitPrice; - newRow.totalPrice = (item.quantity * newRow.unitPrice).toFixed(6); - newRow.minUnitQuantity = item.quantity * (item.orderDetailInfos?.partPercent || mergedDetail.partPercent || 1); + newRow.totalPrice = (newRow.quantity * newRow.unitPrice).toFixed(6); + newRow.minUnitQuantity = newRow.quantity * (mergedDetail.partPercent || 1); } newRow.contentJson = JSON.stringify(newRow);