Files
his/MD/bugs/BUG_759_ANALYSIS.md

4.6 KiB
Raw Blame History

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 分析决策

⚠️ 修复人员请先验证以上分析是否正确,再执行修复。