Files
his/MD/bugs/BUG_765_ANALYSIS.md

75 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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