# 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 树形模式 **不显示展开箭头**,用户无法点击展开。 ```javascript // 当前代码 hasChildren: !!(item.packageId) // item.packageId 为 null → false → 无展开箭头 // 修复后 hasChildren: !!(item.packageId || item.packageName) // 有 packageName 也能展开 ``` ## 修复方案 1. 修改 `loadPackageDetails` 函数:去掉 `res.code === 200` 检查,直接使用 `parsePackageDetailsPayload(res)` 解析数据(与 `loadPackageDetailsForItem` 保持一致) 2. 修改 `handleItemSelect` 中 `hasChildren` 赋值:增加 `|| 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 |