# Bug #765 诸葛亮分析报告 > **文档类型**: Bug分析 > **分析时间**: 2026-06-12 15:58:59 > **分析模型**: mimo-v2.5 (LLM深度分析) --- ## 基本信息 - **Bug #**: 765 - **标题**: [收费工作站-门诊挂号] 在“患者身份信息”框中选中检索的患者后,患者列表浮窗未自动隐藏 - **模块**: 建档挂号管理 - **提出人**: 陈显精 --- Now I have the complete picture. Here's my analysis: --- ### 一、Bug 理解 在门诊挂号页面的"患者身份信息"输入框中,用户输入关键字后弹出患者列表浮窗(`el-popover`),点击选中某行患者后,表单信息已正确回填,但浮窗没有自动关闭,继续遮挡下方录入项。用户期望选中后浮窗自动收起。 ### 二、根因分析 问题出在 `outpatientregistration/index.vue` 中的 **popover 可见性控制逻辑**。 **关键代码链路:** | 位置 | 代码 | 作用 | |------|------|------| | `index.vue:118` | `:visible="showPopover"` | popover 显隐由 `showPopover` 控制 | | `index.vue:125` | `@mousedown.prevent` | 阻止 mousedown 冒泡到 input,防止点击列表时 input 失焦 | | `index.vue:1990` | `handleFocus() → showPopover = true` | input 获焦显示浮窗 | | `index.vue:1996` | `handleBlur() → showPopover = false` | input 失焦隐藏浮窗 | | `index.vue:2228` | `selsectPatient(row)` — **只回填表单,未关闭浮窗** | ⬅️ 根因 | **根因**:`selsectPatient` 函数只做了 `Object.assign(form.value, row)` 等字段回填,**没有设置 `showPopover.value = false`**。由于 `@mousedown.prevent` 阻止了点击列表时 input 的 blur 事件,`handleBlur` 不会被触发,浮窗就一直保持显示。 ### 三、修复方案 **修改文件**:`healthlink-his-ui/src/views/charge/outpatientregistration/index.vue` **修改内容**:在 `selsectPatient` 函数末尾添加一行,关闭 popover: ```javascript function selsectPatient(row) { Object.assign(form.value, row); form.value.patientId = row.id; form.value.searchKey = row.name; form.value.name = row.name; form.value.idCard = row.idCard; form.value.genderEnum_enumText = row.genderEnum_enumText; form.value.phone = row.phone; form.value.firstEnum_enumText = row.firstEnum_enumText; form.value.age = row.age; form.value.identifierNo = row.identifierNo; showPopover.value = false; // ← 新增:选中患者后关闭浮窗 } ``` **影响范围**:仅一处,不涉及后端、不涉及数据库、不涉及其他组件。 ### 四、路由决策 **FIXER**: `zhaoyun`(前端开发) **REASON**: 纯前端 Vue 组件修复,只需在 `index.vue` 的 `selsectPatient` 函数中增加一行 `showPopover.value = false;`,属于 Element Plus popover 交互问题,赵云负责前端界面修复。 --- ## 路由决策 - **修复 Agent**: guanyu - **原因**: LLM 分析决策