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

根因: loadPackageDetails 函数中 res.code === 200 判断永远为 false(Axios 拦截
器已对 code===200 解包返回 res.data,解包后对象不含 code 字段),导致树形表格懒加
载套餐明细永远返回空数组。handleItemSelect 中 hasChildren 只判断了 packageId 但数据
库 check_part 表只有 package_name 无 package_id,导致套餐项无展开箭头。

修复:
1. loadPackageDetails 去掉 res.code 检查,直接用 parsePackageDetailsPayload 解析
   (与 loadPackageDetailsForItem 保持一致)
2. handleItemSelect hasChildren 增加 || item.packageName 条件

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
赵云
2026-05-16 16:30:06 +08:00
parent 5e5f2c3d79
commit 82b5fc747e

View File

@@ -584,20 +584,16 @@ async function loadPackageDetails(row, treeNode, resolve) {
url: `/system/check-type/package/${row.packageId}/details`, url: `/system/check-type/package/${row.packageId}/details`,
method: 'get' method: 'get'
}); });
if (res.code === 200) { const list = parsePackageDetailsPayload(res);
const list = parsePackageDetailsPayload(res); const children = list.map((child) => ({
const children = list.map((child) => ({ ...child,
...child, name: child.name || child.itemName,
name: child.name || child.itemName, unit: child.unit || '次',
unit: child.unit || '次', price: child.price ?? child.unitPrice ?? child.itemPrice ?? 0,
price: child.price ?? child.unitPrice ?? child.itemPrice ?? 0, quantity: row.quantity || 1,
quantity: row.quantity || 1, isPackageDetail: true
isPackageDetail: true }));
})); resolve(children);
resolve(children);
} else {
resolve([]);
}
} catch (err) { } catch (err) {
console.error('加载套餐明细失败:', err); console.error('加载套餐明细失败:', err);
resolve([]); resolve([]);
@@ -1489,7 +1485,7 @@ async function handleItemSelect(checked, item, cat) {
packageName: item.packageName || null, packageName: item.packageName || null,
packageDetailsLoading: false, packageDetailsLoading: false,
packageId: item.packageId || null, packageId: item.packageId || null,
hasChildren: !!(item.packageId) // #426修复: 树形表格懒加载展开标记 hasChildren: !!(item.packageId || item.packageName) // #426修复: 树形表格懒加载展开标记,支持 packageName 解析
}; };
selectedItems.value.push(newRow); selectedItems.value.push(newRow);
// 必须用数组里的响应式行,不能继续改局部 newRowpush 后列表内是 proxy改 raw 对象不会触发右侧卡片更新(会一直卡在「加载中」) // 必须用数组里的响应式行,不能继续改局部 newRowpush 后列表内是 proxy改 raw 对象不会触发右侧卡片更新(会一直卡在「加载中」)