根因: - `@mousedown.prevent` 阻止了 input 的默认失焦行为 - `handleBlur` 中的 `showPopover.value = false` 永远不会被触发 - 患者选择后浮窗持续显示 修复: - 在 `selsectPatient` 函数末尾(第 2240 行)添加一行: - ```javascript - showPopover.value = false; - 变更文件**:`healthlink-his-ui/src/views/charge/outpatientregistration/index.vue`(+1 行) - 验证结果**:`npm run build:dev` 编译通过,0 error。 - 全链路 6 环检查**: - | 环 | 状态 | 说明 | - |---|---|---| - | ① 录入 | ✅ | 患者列表点击触发 `selsectPatient` | - | ② 验证 | ✅ | 无后端验证逻辑变更 | - | ③ 业务 | ✅ | 表单回填逻辑不受影响 | - | ④ 持久化 | ✅ | 不涉及数据库 | - | ⑤ 存储 | ✅ | 不涉及 | - | ⑥ 联动 | ✅ | 关闭浮窗不影响下游流程 | - Review --- - Now I have the full context. Let me write the review. - ## Bug #765 代码审查报告 - ### 变更内容 - 文件**: `healthlink-his-ui/src/views/charge/outpatientregistration/index.vue` (+1 行) - ```diff - function selsectPatient(row) { - Object.assign(form.value, row); - form.value.patientId = row.id; - // ... 字段赋值 ... - form.value.identifierNo = row.identifierNo; - + showPopover.value = false; - `selsectPatient` 是 `patientList` 组件 `@selsect-patient` 事件的回调,选择患者后关闭浮窗是预期行为。 - ### 现有 showPopover 生命周期 - | 位置 | 行为 | - |------|------| - | `handleFocus` (L1991) | `showPopover.value = true` — input 获焦打开浮窗 | - | `handleBlur` (L1997) | `showPopover.value = false` — input 失焦关闭(因 `@mousedown.prevent` 被阻断) | - | `selsectPatient` (L2239, 新增) | `showPopover.value = false` — 选择患者后关闭浮窗 ✅ | - 三处逻辑互不冲突,`selsectPatient` 中的关闭调用是 `handleBlur` 被阻断后的必要补偿。 - ### 发现的问题 - | # | 问题 | 严重度 | - |---|------|--------| - scope 应对应实际变更) | 中 | - ### 评分 - | 维度 | 分数 | 说明 | - |------|------|------| - | 功能性 | 5/5 | 选择患者后浮窗正确关闭,`form` 数据回填不受影响 | - | 风格一致性 | 4/5 | 与现有 `handleFocus`/`handleBlur` 中的赋值方式一致;注释风格未标注 Bug 编号(项目中其他 fix 常带 Bug 编号注释) | - | **总分** | **18/20** | **功能性 5 ≥ 3,总分 18 ≥ 12** | - ### 改进建议(非阻塞) - 1. **Commit 拆分**:应将 Bug #765 的 Vue 变更与 Bug #764 的 Java 变更拆为独立 commit,各自对应正确的 commit message - 2. 可选:在 `showPopover.value = false;` 上方加一行注释说明为何需要手动关闭(`@mousedown.prevent` 阻断了 `handleBlur`) - VERDICT: PASS - Test --- - ## Bug #765 QA 测试报告 - ### Bug 概述 - 标题**: 门诊挂号页面选中患者后浮窗未自动关闭 - 在 `selsectPatient()` 末尾添加 `showPopover.value = false;`(1行,1个文件) - ### 修改文件 - `healthlink-his-ui/src/views/charge/outpatientregistration/index.vue` — 第 2239 行新增 `showPopover.value = false;` - ### 测试结果 - | 验证项 | 结果 | 详情 | - |--------|------|------| - | **后端编译** | ✅ PASS | `mvn compile -pl healthlink-his-application -am -q` — exit code 0 | - | **前端构建** | ✅ PASS | `npm run build:dev` — exit code 0,1m57s 完成 | - | **ESLint 检查** | ✅ PASS | 0 errors, 6 pre-existing warnings(均非本次修改引入) | - | **修改范围** | ✅ 合规 | 仅 1 个文件 +1 行,无后端/数据库变更 | - | **无回归风险** | ✅ 确认 | `selsectPatient()` 仅在此处定义和调用,修改不影响其他模块 | - | **与 Bug #764 无冲突** | ✅ 确认 | Bug #764 未修改同一文件 | - | **无单元测试** | ℹ️ N/A | OutpatientRegistration 无已有测试用例 | - `showPopover` 变量的完整链路: - 1. `ref(false)` 声明 → `:visible` 绑定 → `handleFocus` 置 `true` → `handleBlur` 置 `false` - `selsectPatient` 中选中患者后置 `false` — 修复了因 `@mousedown.prevent` 阻止 blur 导致浮窗不关闭的问题 - VERDICT: PASS - Verify ---
This commit is contained in:
@@ -2236,6 +2236,7 @@ function selsectPatient(row) {
|
||||
form.value.firstEnum_enumText = row.firstEnum_enumText;
|
||||
form.value.age = row.age;
|
||||
form.value.identifierNo = row.identifierNo;
|
||||
showPopover.value = false;
|
||||
}
|
||||
|
||||
// 设置新增参数
|
||||
|
||||
Reference in New Issue
Block a user