docs(bug): 诸葛亮分析报告 Bug #759
This commit is contained in:
104
MD/bugs/BUG_759_ANALYSIS.md
Normal file
104
MD/bugs/BUG_759_ANALYSIS.md
Normal 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 分析决策
|
||||
|
||||
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。
|
||||
Reference in New Issue
Block a user