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

This commit is contained in:
2026-06-12 21:51:43 +08:00
parent db84f4b2bd
commit bb20d8308e

104
MD/bugs/BUG_759_ANALYSIS.md Normal file
View File

@@ -0,0 +1,104 @@
# Bug #759 诸葛亮分析报告
> **文档类型**: Bug分析
> **分析时间**: 2026-06-12 21:51:43
> **分析模型**: mimo-v2.5 (LLM深度分析)
---
## 基本信息
- **Bug #**: 759
- **标题**: 【门诊医生工作站】电子处方点击新增处方报卡在100%卡出屏幕且诊断等下拉框无数据回显
- **模块**: 门诊医生工作站
- **提出人**: 王栩坤
---
I now have a complete understanding. Here is my analysis:
---
## 一、Bug 理解
**禅道 Bug #759 原文:**
- **标题**【门诊医生工作站】电子处方点击新增处方报卡在100%卡出屏幕且诊断等下拉框无数据回显
- **重现步骤**登录内科医生1账号doctor1/123456→ 进入门诊医生工作站 → 选择一名患者 → 点击处方 → 点击新增处方
- **实际结果**:报卡界面边距超出,下拉框无数据回显
- **期望结果**能够在100%视图下,新增处方的报卡能够完全展示出来;诊断和慢性诊断的下拉框有数据回显
**附图关键信息**
- 截图显示"新增处方"弹窗右侧被截断,"服药时间(结束)"和"途径"列不可见,右下角"删除"按钮被裁剪
- "诊断"下拉框显示占位文本"诊断""慢病诊断"下拉框点击后显示"无数据"
**综合总结**:用户在门诊医生工作站新增处方时,弹窗宽度固定为 `1840px`,在 100% 缩放下超出屏幕可视区域导致内容溢出;同时"诊断"和"慢病诊断"两个下拉框均无数据可选,无法正常使用处方开具功能。
---
## 二、根因分析
**涉及唯一文件**`healthlink-his-ui/src/views/doctorstation/components/eprescriptiondialog.vue`
### 问题1弹窗宽度溢出
- **根因**`el-dialog` 第5行设置 `width="1840px"` 为固定像素值。标准 1920px 屏幕减去浏览器 UI 和滚动条后可用宽度不足 1840px导致右侧内容被截断。此外第240行药品搜索弹出框 `popover` 设置 `width="1200"`,也加剧了溢出。
- **证据**第5行 `width="1840px"`第240行 `:width="1200"`
### 问题2诊断下拉框无数据
- **根因**"诊断"下拉框使用 `remote-method="getInit"`第134行这是一个远程搜索模式 —— **只有用户输入关键字时才会触发 `getInit` 函数调用 API**。弹窗打开时 `open()` 函数调用了 `getDiagnosisInfo()`,其中 `getEncounterDiagnosis()` 获取的诊断数据存入了 `diagnosisList`第764行**没有同步填充 `diagnosisListOption`**(下拉框 v-for 绑定的数据源第138行。因此弹窗打开时下拉框列表为空。
- **代码证据**`getDiagnosisInfo()` 第764行 `diagnosisList.value = res.data`,但 `diagnosisListOption` 仅在 `getInit` 的 remote 回调中被赋值第716行
### 问题3慢病诊断下拉框无数据
- **根因**`getChronicDisease` 调用医保接口 `/yb-request/getConditionDefinition`第779行。如果医保服务未连接或返回空数据catch 中静默处理并设为空数组第786行。这可能是医保环境未配置的预期行为但即使医保已连接如果 `encounterId` 传参有问题也会导致返回空。
---
## 三、修复方案
### 修复1弹窗宽度改为响应式
**文件**`eprescriptiondialog.vue` 第5行
```diff
- width="1840px"
+ width="90vw"
+ style="max-width: 1840px"
```
同时将第240行药品搜索 popover 宽度从 `1200` 缩减为 `min(1200px, 80vw)` 或直接改为 `"100%"`
### 修复2诊断下拉框打开时加载初始数据
**文件**`eprescriptiondialog.vue` `getDiagnosisInfo()` 函数约第763行
`getEncounterDiagnosis` 成功回调中,增加 `diagnosisListOption` 的赋值:
```diff
getEncounterDiagnosis(props.patient.encounterId).then((res) => {
diagnosisList.value = res.data;
+ diagnosisListOption.value = res.data || [];
let diagnosisInfo = diagnosisList.value.filter((item) => {
```
### 修复3慢病诊断 — 确认 API 返回
此问题取决于医保服务是否可用。如果医保服务已连接但仍无数据,需检查后端 `/yb-request/getConditionDefinition` 接口的返回值。如果是医保未配置环境,则属于已知限制,可考虑在下拉框上增加"医保未连接"的提示文案。
---
## 四、路由决策
**FIXER: zhaoyun赵云 — 前端开发)**
**REASON**:两个问题的根因全部在前端 `eprescriptiondialog.vue` 的样式和数据初始化逻辑中,不需要后端改动,属于纯前端修复任务。
---
## 路由决策
- **FIXER_ID**: zhaoyun
- **修复 Agent**: zhaoyun前端
- **原因**: LLM 分析决策
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。