Fix Bug #428: 门诊医生站-检查申请:未实现分类联动检查方法及套餐明细展示与勾选逻辑
根本原因: 1. 分类联动加载检查方法时,未提取后端返回的 packageId 字段 2. 勾选检查方法后,未从方法中获取套餐信息(isPackage/packageId) 3. 选中带套餐的检查方法后,未调用 loadPackageDetailsForItem 预加载套餐明细 修复内容(4处手术式修改): - handleCategoryExpand:方法映射增加 packageId 字段 - handleRowClick:回充已有申请单时,从匹配的方法中获取套餐信息 - handleMethodSelect:从方法获取套餐信息并预加载套餐明细 - handleItemSelect:方法映射增加 packageId 字段 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -682,6 +682,7 @@ async function handleCategoryExpand(cat) {
|
|||||||
code: m.code,
|
code: m.code,
|
||||||
price: m.price || 0,
|
price: m.price || 0,
|
||||||
packageName: m.packageName || '',
|
packageName: m.packageName || '',
|
||||||
|
packageId: m.packageId || null,
|
||||||
packagePrice: m.packagePrice || null,
|
packagePrice: m.packagePrice || null,
|
||||||
serviceFee: m.serviceFee || null
|
serviceFee: m.serviceFee || null
|
||||||
}));
|
}));
|
||||||
@@ -1025,12 +1026,18 @@ function handleRowClick(row) {
|
|||||||
code: md.code,
|
code: md.code,
|
||||||
price: m.itemFee || 0, // fallback 到已保存的价格
|
price: m.itemFee || 0, // fallback 到已保存的价格
|
||||||
packageName: md.packageName || '',
|
packageName: md.packageName || '',
|
||||||
|
packageId: md.packageId || null,
|
||||||
packagePrice: md.packagePrice || null, // Bug #384修复: 套餐价格
|
packagePrice: md.packagePrice || null, // Bug #384修复: 套餐价格
|
||||||
serviceFee: md.serviceFee || null
|
serviceFee: md.serviceFee || null
|
||||||
}));
|
}));
|
||||||
// 如果有已保存的检查方法信息,尝试匹配
|
// 如果有已保存的检查方法信息,尝试匹配
|
||||||
if (m.checkMethodId) {
|
if (m.checkMethodId) {
|
||||||
item.selectedMethod = item.methods.find(md => md.id === m.checkMethodId) || null;
|
item.selectedMethod = item.methods.find(md => md.id === m.checkMethodId) || null;
|
||||||
|
// 从已保存的方法中获取套餐信息
|
||||||
|
if (item.selectedMethod?.packageId) {
|
||||||
|
item.isPackage = true;
|
||||||
|
item.packageId = item.selectedMethod.packageId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -1091,6 +1098,13 @@ async function handleMethodSelect(checked, method, cat) {
|
|||||||
const existingItem = selectedItems.value.find(s => s.id === targetItem.id);
|
const existingItem = selectedItems.value.find(s => s.id === targetItem.id);
|
||||||
if (existingItem) {
|
if (existingItem) {
|
||||||
existingItem.selectedMethod = method;
|
existingItem.selectedMethod = method;
|
||||||
|
// 从方法中获取套餐信息
|
||||||
|
if (method.packageId) {
|
||||||
|
existingItem.isPackage = true;
|
||||||
|
existingItem.packageId = method.packageId;
|
||||||
|
// 预加载套餐明细
|
||||||
|
loadPackageDetailsForItem(existingItem);
|
||||||
|
}
|
||||||
updateMethodDisplay();
|
updateMethodDisplay();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1105,7 +1119,7 @@ async function handleMethodSelect(checked, method, cat) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedItems.value.push({
|
const newItem = {
|
||||||
id: targetItem.id, name: targetItem.name,
|
id: targetItem.id, name: targetItem.name,
|
||||||
price: targetItem.price, quantity: 1,
|
price: targetItem.price, quantity: 1,
|
||||||
serviceFee: targetItem.serviceFee || 0,
|
serviceFee: targetItem.serviceFee || 0,
|
||||||
@@ -1117,9 +1131,16 @@ async function handleMethodSelect(checked, method, cat) {
|
|||||||
methods: [method],
|
methods: [method],
|
||||||
selectedMethod: method,
|
selectedMethod: method,
|
||||||
expanded: false,
|
expanded: false,
|
||||||
isPackage: !!targetItem.packageName,
|
// 从方法中获取套餐信息(优先级高于项目本身的 packageName)
|
||||||
packageId: targetItem.packageId || null
|
isPackage: !!method.packageId || !!targetItem.packageName,
|
||||||
});
|
packageId: method.packageId || targetItem.packageId || null
|
||||||
|
};
|
||||||
|
selectedItems.value.push(newItem);
|
||||||
|
|
||||||
|
// 如果是套餐,预加载套餐明细
|
||||||
|
if (newItem.isPackage && newItem.packageId) {
|
||||||
|
loadPackageDetailsForItem(newItem);
|
||||||
|
}
|
||||||
|
|
||||||
// 自动回填执行科室
|
// 自动回填执行科室
|
||||||
if (selectedItems.value.length === 1 && cat?.performDeptName) {
|
if (selectedItems.value.length === 1 && cat?.performDeptName) {
|
||||||
@@ -1164,6 +1185,7 @@ async function handleItemSelect(checked, item, cat) {
|
|||||||
code: m.code,
|
code: m.code,
|
||||||
price: m.price || item.price, // fallback 到项目价格
|
price: m.price || item.price, // fallback 到项目价格
|
||||||
packageName: m.packageName || '',
|
packageName: m.packageName || '',
|
||||||
|
packageId: m.packageId || null,
|
||||||
packagePrice: m.packagePrice || null, // Bug #384修复: 套餐价格
|
packagePrice: m.packagePrice || null, // Bug #384修复: 套餐价格
|
||||||
serviceFee: m.serviceFee || null // Bug #384修复: 服务费
|
serviceFee: m.serviceFee || null // Bug #384修复: 服务费
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user