4.6 KiB
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行
- width="1840px"
+ width="90vw"
+ style="max-width: 1840px"
同时将第240行药品搜索 popover 宽度从 1200 缩减为 min(1200px, 80vw) 或直接改为 "100%"。
修复2:诊断下拉框打开时加载初始数据
文件:eprescriptiondialog.vue getDiagnosisInfo() 函数(约第763行)
在 getEncounterDiagnosis 成功回调中,增加 diagnosisListOption 的赋值:
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 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。