2.3 KiB
Bug #523 分析报告
Bug 描述
[住院医生站-临床医嘱] 待保存医嘱总金额显示缺失且编辑态单位选择框变为数字控件
根因分析
问题1:总金额显示为 "-"
文件: openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue
根因: setValue() 函数(约1441行)在选中药品后初始化行数据时:
- 设置了
unitPrice、minUnitPrice(西药/中成药/中草药) - 设置了诊疗类型的
totalPrice(adviceType==3 分支,1537-1538行) - 但没有为药品类型(adviceType==1)计算
totalPrice
totalPrice 只在用户后续交互(修改总量、切换单位)时通过 calculateTotalAmount() 才计算。
列表显示逻辑(259行):scope.row.totalPrice ? ... : '-',未设置则显示横杠。
数据流: 选药 → setValue(设unitPrice) → 用户填总量 → calculateTotalAmount(算totalPrice) → 列表显示 问题: 用户选好药后还没触发计算事件时,totalPrice 为空
问题2:编辑态单位选择框变为数字控件
文件: openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue
根因: setValue() 函数(1518行)中:
unitCode: row.partAttributeEnum == 1 ? row.minUnitCode : row.unitCode,
后端返回的 row.unitCode / row.minUnitCode 可能是 Number 类型。
而 row.unitCodeList 中每个 option 的 value 是 String 类型(从后端字典值来)。
当 el-select 的 v-model 值(Number)与所有 option 的 value(String)类型不匹配时,
Element Plus 无法找到匹配选项,渲染异常,表现为数字输入控件。
修复方案
修复1(总金额)
在 setValue() 的药品分支中,设置价格后立即计算初始 totalPrice:
// 在 positionName 设置后添加:
totalPrice: row.quantity ? (row.unitCode == row.minUnitCode
? (row.quantity * row.minUnitPrice).toFixed(6)
: (row.quantity * row.unitPrice).toFixed(6))
: undefined,
修复2(单位选择框)
在 setValue() 的 updatedRow 中,将 unitCode 和 minUnitCode 转为字符串:
minUnitCode: String(row.minUnitCode),
unitCode: row.partAttributeEnum == 1 ? String(row.minUnitCode) : String(row.unitCode),
确保与 el-option 的 value(String)类型一致。