5.1 KiB
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)
重现步骤:
- 登录"住院医生工作站",进入"临床医嘱"页面
- 点击【新增】录入一条医嘱,在药品搜索栏输入并选择"荆防颗粒"
- 在"单次用量"输入框中输入:2,单位:袋
- 观察"单次用量"单位下拉框右侧的公式显示区域
期望结果: 系统应自动读取该药品的计量换算值(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 中没有换算公式的显示区域 |
具体分析:
- 后端数据完整:
AdviceBaseDto有unitConversionRatio(BigDecimal),Mapper SQL 已查询该字段 - 前端数据可达:
setValue(row)中通过...baseRow展开,row.unitConversionRatio在行数据上可用 - 已有换算逻辑:
index.vue:2973的convertValues()函数已使用row.unitConversionRatio进行数值转换 - 缺失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行后)
在 </el-select>(minUnitCode)和 </div>(form-group关闭)之间,添加:
<span
v-if="row.unitConversionRatio && row.doseQuantity"
style="font-size: 13px; color: #409eff; margin-left: 4px; white-space: nowrap"
>
{{
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
+ ')'
}}
</span>
修改点2:临时医嘱表单(约第356行后)
同样在 minUnitCode 的 </el-select> 之后,添加相同的换算公式显示元素。
公式渲染逻辑:
- 条件:
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展示层修复,无后端改动。
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。