# Bug #734 诸葛亮分析报告 > **文档类型**: Bug分析 > **分析时间**: 2026-06-13 00:19:48 > **分析模型**: mimo-v2.5 (LLM深度分析) --- ## 基本信息 - **Bug #**: 734 - **标题**: 【住院医生站-临床医嘱】医嘱开具时,录入框右侧缺少最小单位与剂量单位的动态换算公式说明(如:2袋 = 30 g) - **模块**: 住院医生工作站 - **提出人**: 陈显精 --- Now I have a complete picture. Let me output the analysis. --- ## Bug #734 分析报告 ### 一、Bug 理解 **禅道标题:** 【住院医生站-临床医嘱】医嘱开具时,录入框右侧缺少最小单位与剂量单位的动态换算公式说明(如:2袋 = 30 g) **重现步骤:** 1. 登录"住院医生工作站",进入"临床医嘱"页面 2. 点击【新增】录入一条医嘱,在药品搜索栏输入并选择"荆防颗粒" 3. 在"单次用量"输入框中输入:2,单位:袋 4. 观察"单次用量"单位下拉框右侧的公式显示区域 **期望结果:** 系统应自动读取该药品的计量换算值(15)与剂量单位(g),在单次用量右侧动态显示换算等式:`2袋 = 30 g (2×15g)` **附图关键信息:** - 图片2539/2540:临床医嘱录入表单中,单次用量输入框(值=2)和单位下拉框(值=袋)右侧的红框区域**为空白** - 图片2541(药品目录):荆防颗粒的配置数据 — 计量换算=15,剂量单位=g,最小单位=袋 - 临时医嘱同样缺失此公式显示 **总结:** 医生在开具临床医嘱时,输入单次用量后无法看到最小单位与剂量单位之间的换算公式说明。系统已有换算比例数据(`unitConversionRatio=15`),但前端未将其渲染为可视化的换算公式文本。 --- ### 二、根因分析 **根因:前端模板缺少换算公式的渲染逻辑** 数据流追踪(全链路6环): | 环 | 状态 | 说明 | |---|---|---| | ⑤ 存储 | ✅ | `medication_detail` 表有 `unit_conversion_ratio` 字段,值为15 | | ④ 持久化 | ✅ | `DoctorStationAdviceAppMapper.xml` 第14行 `abi.unit_conversion_ratio` 已查询 | | ③ 业务 | ✅ | `AdviceBaseDto.unitConversionRatio` 字段已定义,数据正常返回 | | ② 验证 | ✅ | API正常返回 `unitConversionRatio: 15` | | ① 录入 | ❌ | `OrderForm.vue` 中**没有**换算公式的显示区域 | **具体分析:** 1. **后端数据完整**:`AdviceBaseDto` 有 `unitConversionRatio`(BigDecimal),Mapper SQL 已查询该字段 2. **前端数据可达**:`setValue(row)` 中通过 `...baseRow` 展开,`row.unitConversionRatio` 在行数据上可用 3. **已有换算逻辑**:`index.vue:2973` 的 `convertValues()` 函数已使用 `row.unitConversionRatio` 进行数值转换 4. **缺失UI展示**:`OrderForm.vue` 在"单次用量" + "单位"下拉框之后,**没有任何显示换算公式的元素** **涉及文件:** - `OrderForm.vue:109-126` — 长期医嘱表单,单位下拉框后缺少公式显示 - `OrderForm.vue:352-362` — 临时医嘱表单,单位下拉框后缺少公式显示 - `useOrder.js` — 已有 `convertValue` 逻辑(数值计算),无需修改 --- ### 三、修复方案 **修改文件:** `healthlink-his-ui/src/views/inpatientDoctor/home/components/order/OrderForm.vue` **修改内容:** 在两处单位下拉框(`minUnitCode` select)之后,添加换算公式显示元素。 #### 修改点1:长期医嘱表单(约第125行后) 在 ``(minUnitCode)和 ``(form-group关闭)之间,添加: ```html {{ row.doseQuantity + ' ' + (row.unitCodeList?.find(i => i.value === row.minUnitCode && i.type === 'minUnit')?.label || '') + ' = ' + (row.doseQuantity * row.unitConversionRatio) + ' ' + (row.unitCodeList?.find(i => i.type === config.unitMap['dose'])?.label || '') + ' (' + row.doseQuantity + '×' + row.unitConversionRatio + ')' }} ``` #### 修改点2:临时医嘱表单(约第356行后) 同样在 minUnitCode 的 `` 之后,添加相同的换算公式显示元素。 **公式渲染逻辑:** - 条件:`row.unitConversionRatio` 存在且 `row.doseQuantity` 有值时才显示 - 格式:`{剂量}{最小单位} = {剂量×换算比} {剂量单位} ({剂量}×{换算比})` - 示例:`2袋 = 30 g (2×15g)` - 样式:蓝色小字(`#409eff`),不换行(`white-space: nowrap`) **不需要修改后端**:数据链路完整,`unitConversionRatio` 已正确返回。 --- ### 四、路由决策 **FIXER: zhaoyun** **REASON:** 纯前端模板修改,只需在 `OrderForm.vue` 两处添加换算公式显示元素,属于UI展示层修复,无后端改动。 --- ## 路由决策 - **FIXER_ID**: zhaoyun - **修复 Agent**: zhaoyun(前端) - **原因**: ** 纯前端模板修改,只需在 `OrderForm.vue` 两处添加换算公式显示元素,属于UI展示层修复,无后端改动。 > ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。