Files
his/BUG428_ANALYSIS.md

53 lines
2.7 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 #428 分析报告
## Bug 描述
门诊医生站-检查申请:未实现分类联动检查方法及套餐明细展示与勾选逻辑
### 三个动作的验收标准
1. **动作一**:分类展开后,下方自动加载后台维护的"检查方法"列表
2. **动作二**:勾选某个检查方法后,自动填充到右侧"已选择"列表
3. **动作三**:在"已选择"列表展开图标,展示该套餐包含的收费明细
## 根因分析
### 动作一(分类联动加载检查方法):已实现 ✅
- `handleCollapseChange``handleCategoryExpand``searchCheckMethod({ checkType: cat.typeName })`
- 代码路径完整数据解析正确Vue 响应式绑定正确
### 动作二(勾选方法后填充到"已选择"列表):存在逻辑缺陷 ❌
**核心问题在 `handleMethodSelect` 函数第1370-1451行**
1. 当用户勾选一个检查方法时,代码使用 `cat.items[0]` 作为目标项目第1373行这是一个**硬编码假设**,不考虑用户是否勾选了任何项目
2. 如果该用户已经选了一个项目(如"腹部彩超"),但后来勾选了另一个方法(如"心电1"),代码会找到已存在的 `selectedItems` 并只更新 `selectedMethod`第1381-1394行而不是创建新的条目
3. 当方法被取消勾选时(`checked = false`),只清空 `selectedMethod` 但不从 `selectedItems` 移除第1441-1448行导致残留空项目
### 动作三(套餐明细展示):已实现但依赖动作二 ✅
- `loadPackageDetailsForItem` → 后端 `/system/check-type/package/{id}/details`
- 右侧面板 `shouldShowPackageBody` + `getPackageDetailsList` 渲染逻辑完整
- **但由于动作二的缺陷,套餐明细的前提条件(正确创建 item无法满足**
## 数据流
```
用户展开分类 → handleCategoryExpand()
→ GET /check/method/search?checkType={typeName}
→ cat.methods = [方法列表]
用户勾选方法 → handleMethodSelect(checked, method, cat)
→ 【问题】使用 cat.items[0] 作为目标项目
→ 创建/更新 selectedItems 条目
→ 如有 packageId → loadPackageDetailsForItem()
用户展开已选项 → shouldShowPackageBody(item)
→ 有 packageId/packageName → 显示套餐明细
```
## 修复方案
1. 修复 `handleMethodSelect`:当用户直接勾选方法时,以方法自身作为已选项的核心(而非 `cat.items[0]`
2. 确保方法的 `price` 使用 `packagePrice`(方法没有独立 price 字段)
3. 取消勾选时清理逻辑完善
## Gate 验证
- Gate A: ✅ 根因已定位到 `handleMethodSelect` 第1373行 `cat.items[0]`
- Gate B: ✅ 已读取所有相关文件(前后端+SQL Mapper
- Gate C: ✅ 修复方案与验收标准一致
- Gate D: N/A不涉及数据库修改