From 2e82071cca84a491f6f71dcceaeabc1059835693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Sat, 13 Jun 2026 00:19:48 +0800 Subject: [PATCH] =?UTF-8?q?docs(bug):=20=E8=AF=B8=E8=91=9B=E4=BA=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8A=A5=E5=91=8A=20Bug=20#734?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/bugs/BUG_734_ANALYSIS.md | 128 ++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 MD/bugs/BUG_734_ANALYSIS.md diff --git a/MD/bugs/BUG_734_ANALYSIS.md b/MD/bugs/BUG_734_ANALYSIS.md new file mode 100644 index 000000000..da93bf55e --- /dev/null +++ b/MD/bugs/BUG_734_ANALYSIS.md @@ -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行后) + +在 ``(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展示层修复,无后端改动。 + +> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。