Files
his/BUG_426_ANALYSIS.md
2026-05-16 18:17:00 +08:00

3.0 KiB
Raw Blame History

Bug #426 分析报告

标题: 门诊医生站-检查开立:已选择列表应支持树形展开,显示套餐明细(项目/数量/单价)

根因分析

经过完整的代码追踪和数据库验证,定位到 两个根因

根因1loadPackageDetails 响应判断条件错误(树形表格永远加载不到套餐明细)

涉及代码: examinationApplication.vue 第576-605行

Axios 响应拦截器(request.js 第202行code === 200 的响应返回 Promise.resolve(res.data),即解包后的 AjaxResult 对象(如 {data: [...]},不含 code 字段)。

loadPackageDetails 函数检查的是 if (res.code === 200) —— 这个条件 永远为 false(解包后的对象没有 code 字段),导致树形表格的懒加载 永远返回空数组

后端返回: {"code":200,"data":[{item_name:"xxx",quantity:1,...}]}
拦截器解包后: {data:[{item_name:"xxx",quantity:1,...}]}
loadPackageDetails 判断: res.code === 200 → undefined === 200 → FALSE
结果: resolve([]) → 树形展开后永远是空白

对比正常工作的 loadPackageDetailsForItem: 该函数直接调用 parsePackageDetailsPayload(res) 解析数据,不检查 res.code,所以右侧卡片的套餐明细能正常加载。

根因2handleItemSelecthasChildren 未考虑 packageName 场景

涉及代码: examinationApplication.vue 第1492行

数据库 check_part 表只有 package_name 字段,没有 package_id。前端创建套餐项时:

  • isPackage 正确判断了 !!(item.packageId || item.packageName)
  • hasChildren 只判断了 !!(item.packageId)

当项目有 packageName 但无 packageId 时,hasChildrenfalseel-table 树形模式 不显示展开箭头,用户无法点击展开。

// 当前代码
hasChildren: !!(item.packageId)  // item.packageId 为 null → false → 无展开箭头

// 修复后
hasChildren: !!(item.packageId || item.packageName)  // 有 packageName 也能展开

修复方案

  1. 修改 loadPackageDetails 函数:去掉 res.code === 200 检查,直接使用 parsePackageDetailsPayload(res) 解析数据(与 loadPackageDetailsForItem 保持一致)
  2. 修改 handleItemSelecthasChildren 赋值:增加 || item.packageName 条件

验证数据

数据库确认:

  • check_part 表有 package_name 字段(如 "彩色多普勒超声"),无 package_id
  • check_package 表 id=29, package_name="彩色多普勒超声"
  • check_package_detail 表有 7 条明细记录ABO血型、肾功3项等
  • check_method 表有 package_name 字段,无 package_id

修复结果: 成功16行改动

Commit: 24c90e9c → origin/develop 修改: 1 file changed, 11 insertions(+), 15 deletions(-)

位置 修改
loadPackageDetails (576-600行) 去掉 res.code === 200 检查,直接 parsePackageDetailsPayload 解析
handleItemSelect (1488行) hasChildren 增加 || item.packageName