docs(bug): 诸葛亮分析报告 Bug #734

This commit is contained in:
2026-06-13 00:19:48 +08:00
parent 7b52063dc4
commit 2e82071cca

128
MD/bugs/BUG_734_ANALYSIS.md Normal file
View File

@@ -0,0 +1,128 @@
# 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`BigDecimalMapper 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行后
`</el-select>`minUnitCode`</div>`form-group关闭之间添加
```html
<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展示层修复无后端改动。
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。