docs(bug): 诸葛亮分析报告 Bug #734
This commit is contained in:
128
MD/bugs/BUG_734_ANALYSIS.md
Normal file
128
MD/bugs/BUG_734_ANALYSIS.md
Normal 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`(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行后)
|
||||
|
||||
在 `</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展示层修复,无后端改动。
|
||||
|
||||
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。
|
||||
Reference in New Issue
Block a user