3.0 KiB
3.0 KiB
Bug #426 分析报告
标题: 门诊医生站-检查开立:已选择列表应支持树形展开,显示套餐明细(项目/数量/单价)
根因分析
经过完整的代码追踪和数据库验证,定位到 两个根因:
根因1:loadPackageDetails 响应判断条件错误(树形表格永远加载不到套餐明细)
涉及代码: 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,所以右侧卡片的套餐明细能正常加载。
根因2:handleItemSelect 中 hasChildren 未考虑 packageName 场景
涉及代码: examinationApplication.vue 第1492行
数据库 check_part 表只有 package_name 字段,没有 package_id。前端创建套餐项时:
isPackage正确判断了!!(item.packageId || item.packageName)hasChildren只判断了!!(item.packageId)
当项目有 packageName 但无 packageId 时,hasChildren 为 false,el-table 树形模式 不显示展开箭头,用户无法点击展开。
// 当前代码
hasChildren: !!(item.packageId) // item.packageId 为 null → false → 无展开箭头
// 修复后
hasChildren: !!(item.packageId || item.packageName) // 有 packageName 也能展开
修复方案
- 修改
loadPackageDetails函数:去掉res.code === 200检查,直接使用parsePackageDetailsPayload(res)解析数据(与loadPackageDetailsForItem保持一致) - 修改
handleItemSelect中hasChildren赋值:增加|| item.packageName条件
验证数据
数据库确认:
check_part表有package_name字段(如 "彩色多普勒超声"),无package_idcheck_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 |