66 lines
3.0 KiB
Markdown
66 lines
3.0 KiB
Markdown
# 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 |
|