Files
his/BUG428_ANALYSIS.md

2.7 KiB
Raw Blame History

Bug #428 分析报告

Bug 描述

门诊医生站-检查申请:未实现分类联动检查方法及套餐明细展示与勾选逻辑

三个动作的验收标准

  1. 动作一:分类展开后,下方自动加载后台维护的"检查方法"列表
  2. 动作二:勾选某个检查方法后,自动填充到右侧"已选择"列表
  3. 动作三:在"已选择"列表展开图标,展示该套餐包含的收费明细

根因分析

动作一(分类联动加载检查方法):已实现

  • handleCollapseChangehandleCategoryExpandsearchCheckMethod({ 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不涉及数据库修改