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