diff --git a/openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue b/openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue index 89a8768f0..bc6ba7b56 100755 --- a/openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue +++ b/openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue @@ -467,9 +467,9 @@ function calculateTotalPrice() { try { let sum = 0; treatmentItems.value.forEach((item) => { - if (item.adviceDefinitionId && item.retailPrice && item.childrenRequestNum) { - const price = parseFloat(item.retailPrice) || 0; - const count = parseInt(item.childrenRequestNum) || 0; + if (item.adviceDefinitionId && item.adviceDefinitionId !== '') { + const price = Number(item.retailPrice) || 0; + const count = Number(item.childrenRequestNum) || 0; sum += price * count; } }); @@ -479,7 +479,10 @@ function calculateTotalPrice() { (item) => item.adviceDefinitionId && item.adviceDefinitionId !== '' ); if (hasValidItem) { - form.value.retailPrice = parseFloat(totalPrice.value); + // 使用 nextTick 确保总价更新后零售价才更新,避免 Vue 响应式时序问题 + nextTick(() => { + form.value.retailPrice = parseFloat(totalPrice.value) || 0; + }); } else { form.value.retailPrice = undefined; } @@ -565,15 +568,16 @@ function edit() { form.value.pricingFlag = 1; } - // 处理子项数据,确保包含retailPrice字段 + // 处理子项数据,确保包含retailPrice和name字段 if (props.item.childrenJson) { const parsedItems = JSON.parse(props.item.childrenJson); treatmentItems.value = parsedItems.map((item) => ({ ...item, + name: item.name || '', retailPrice: item.retailPrice || 0, })); } else { - treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, retailPrice: 0 }]; + treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, name: '', retailPrice: 0 }]; } form.value.permittedUnitCode = form.value.permittedUnitCode ? form.value.permittedUnitCode.toString() @@ -618,7 +622,7 @@ function reset() { chrgitmLv: undefined, //医保等级 pricingFlag: 1, // 划价标记,默认允许划价 }; - treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, retailPrice: 0 }]; + treatmentItems.value = [{ adviceDefinitionId: '', childrenRequestNum: 1, name: '', retailPrice: 0 }]; totalPrice.value = '0.00'; proxy.resetForm('diagnosisTreatmentRef'); } @@ -760,7 +764,10 @@ function selectRow(row, index) { treatmentItems.value[index].adviceDefinitionId = row.id; treatmentItems.value[index].retailPrice = row.retailPrice || 0; medicineSearchKey.value = ''; - calculateTotalPrice(); + // 使用 nextTick 确保 DOM 更新后再计算总价 + nextTick(() => { + calculateTotalPrice(); + }); } // 清空诊疗子项