From cec2f47a1f312010ad0a3d83f7c9fd1e2e4fce5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Fri, 12 Jun 2026 15:59:00 +0800 Subject: [PATCH] =?UTF-8?q?docs(bug):=20=E8=AF=B8=E8=91=9B=E4=BA=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8A=A5=E5=91=8A=20Bug=20#765?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/bugs/BUG_765_ANALYSIS.md | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 MD/bugs/BUG_765_ANALYSIS.md diff --git a/MD/bugs/BUG_765_ANALYSIS.md b/MD/bugs/BUG_765_ANALYSIS.md new file mode 100644 index 000000000..686a5594b --- /dev/null +++ b/MD/bugs/BUG_765_ANALYSIS.md @@ -0,0 +1,74 @@ +# 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 分析决策