# 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行)中: ```js 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`: ```js // 在 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` 转为字符串: ```js minUnitCode: String(row.minUnitCode), unitCode: row.partAttributeEnum == 1 ? String(row.minUnitCode) : String(row.unitCode), ``` 确保与 el-option 的 value(String)类型一致。