Compare commits
4 Commits
HEAD
...
f3855c9d30
| Author | SHA1 | Date | |
|---|---|---|---|
| f3855c9d30 | |||
| 1136a479d1 | |||
| f519d83ed1 | |||
|
|
cfbd375a48 |
@@ -582,15 +582,30 @@ function handleResetSearch() {
|
|||||||
// 初始化默认日期范围为近一周
|
// 初始化默认日期范围为近一周
|
||||||
handleResetSearch();
|
handleResetSearch();
|
||||||
|
|
||||||
// 🔧 BugFix#426: 懒加载套餐明细
|
// 🔧 BugFix#426/#430: 懒加载套餐明细(支持 packageName 解析)
|
||||||
async function loadPackageDetails(row, treeNode, resolve) {
|
async function loadPackageDetails(row, treeNode, resolve) {
|
||||||
if (!row.packageId) {
|
let packageId = row.packageId;
|
||||||
|
if (!packageId && row.packageName) {
|
||||||
|
try {
|
||||||
|
const pkgRes = await listCheckPackage({ packageName: row.packageName });
|
||||||
|
let packages = pkgRes?.data || [];
|
||||||
|
if (!Array.isArray(packages)) {
|
||||||
|
packages = packages.records || packages.data || [];
|
||||||
|
}
|
||||||
|
if (packages.length > 0) {
|
||||||
|
packageId = packages[0].id;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('套餐名称解析失败:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!packageId) {
|
||||||
resolve([]);
|
resolve([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: `/system/check-type/package/${row.packageId}/details`,
|
url: `/system/check-type/package/${packageId}/details`,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
const list = parsePackageDetailsPayload(res);
|
const list = parsePackageDetailsPayload(res);
|
||||||
@@ -624,9 +639,9 @@ function getPackageDetailsList(item) {
|
|||||||
return Array.isArray(carrier?.packageDetails) ? carrier.packageDetails : [];
|
return Array.isArray(carrier?.packageDetails) ? carrier.packageDetails : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 有套餐 ID 的已选行才展示右侧套餐区(加载中 / 空 / 明细列表) */
|
/** 有套餐 ID 或 packageName 的已选行才展示右侧套餐区(加载中 / 空 / 明细列表) */
|
||||||
function shouldShowPackageBody(item) {
|
function shouldShowPackageBody(item) {
|
||||||
return !!getPackageCarrier(item)?.packageId;
|
return !!(getPackageCarrier(item)?.packageId || item.packageName || item.packageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 金额展示:统一两位小数 */
|
/** 金额展示:统一两位小数 */
|
||||||
@@ -1058,7 +1073,8 @@ const filteredCategoryList = computed(() => {
|
|||||||
const key = dictSearchKey.value.toLowerCase();
|
const key = dictSearchKey.value.toLowerCase();
|
||||||
return categoryList.value.map(cat => ({
|
return categoryList.value.map(cat => ({
|
||||||
...cat,
|
...cat,
|
||||||
items: cat.items.filter(item => (item.name || '').toLowerCase().includes(key))
|
items: cat.items.filter(item => (item.name || '').toLowerCase().includes(key)),
|
||||||
|
methods: cat.methods || []
|
||||||
})).filter(cat => cat.items.length > 0);
|
})).filter(cat => cat.items.length > 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1365,10 +1381,10 @@ 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;
|
||||||
// 从方法中获取套餐信息
|
// 从方法中获取套餐信息(支持 packageId 或 packageName 解析)
|
||||||
if (method.packageId) {
|
if (method.packageId || method.packageName) {
|
||||||
existingItem.isPackage = true;
|
existingItem.isPackage = true;
|
||||||
existingItem.packageId = method.packageId;
|
existingItem.packageId = method.packageId || existingItem.packageId;
|
||||||
existingItem.hasChildren = true; // #426修复
|
existingItem.hasChildren = true; // #426修复
|
||||||
existingItem.packageName = method.packageName || existingItem.packageName; // #428修复: 确保 packageName 同步
|
existingItem.packageName = method.packageName || existingItem.packageName; // #428修复: 确保 packageName 同步
|
||||||
// 预加载套餐明细
|
// 预加载套餐明细
|
||||||
@@ -1405,12 +1421,12 @@ async function handleMethodSelect(checked, method, cat) {
|
|||||||
isPackage: !!method.packageId || !!targetItem.packageName,
|
isPackage: !!method.packageId || !!targetItem.packageName,
|
||||||
packageId: method.packageId || targetItem.packageId || null,
|
packageId: method.packageId || targetItem.packageId || null,
|
||||||
packageName: method.packageName || targetItem.packageName || null, // #428修复: 复制 packageName,确保套餐明细可加载
|
packageName: method.packageName || targetItem.packageName || null, // #428修复: 复制 packageName,确保套餐明细可加载
|
||||||
hasChildren: !!(method.packageId || targetItem.packageId) // #426修复: 树形表格懒加载展开标记
|
hasChildren: !!(method.packageId || method.packageName || targetItem.packageId || targetItem.packageName) // #426修复: 树形表格懒加载展开标记,支持 packageName 解析
|
||||||
};
|
};
|
||||||
selectedItems.value.push(newItem);
|
selectedItems.value.push(newItem);
|
||||||
|
|
||||||
// 如果是套餐,预加载套餐明细
|
// 如果是套餐,预加载套餐明细
|
||||||
if (newItem.isPackage && newItem.packageId) {
|
if (newItem.isPackage && (newItem.packageId || newItem.packageName)) {
|
||||||
loadPackageDetailsForItem(newItem);
|
loadPackageDetailsForItem(newItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1548,7 +1564,7 @@ async function toggleItemExpand(item) {
|
|||||||
async function selectMethodCheckbox(checked, item, method) {
|
async function selectMethodCheckbox(checked, item, method) {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
item.selectedMethod = method;
|
item.selectedMethod = method;
|
||||||
if (item.expanded && method.packageId) {
|
if (item.expanded && (method.packageId || method.packageName)) {
|
||||||
loadPackageDetailsForItem(item);
|
loadPackageDetailsForItem(item);
|
||||||
}
|
}
|
||||||
// 动态加载该方法对应的套餐明细
|
// 动态加载该方法对应的套餐明细
|
||||||
@@ -1613,8 +1629,9 @@ async function loadMethodPackageDetails(item, method) {
|
|||||||
/** 检查明细表格中切换检查方法 */
|
/** 检查明细表格中切换检查方法 */
|
||||||
async function onDetailMethodChange(row, val) {
|
async function onDetailMethodChange(row, val) {
|
||||||
row.selectedMethod = val || null;
|
row.selectedMethod = val || null;
|
||||||
if (val?.packageId) {
|
if (val?.packageId || val?.packageName) {
|
||||||
row.packageId = val.packageId;
|
row.packageId = val.packageId || row.packageId;
|
||||||
|
row.packageName = val.packageName || row.packageName;
|
||||||
row.isPackage = true;
|
row.isPackage = true;
|
||||||
row.hasChildren = true; // #426修复
|
row.hasChildren = true; // #426修复
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1581,10 +1581,10 @@ function handleSaveGroup(orderGroupList) {
|
|||||||
therapyEnum: item.orderDetailInfos?.therapyEnum || '1',
|
therapyEnum: item.orderDetailInfos?.therapyEnum || '1',
|
||||||
};
|
};
|
||||||
|
|
||||||
// 预初始化空行
|
// 预初始化空行(组套项带预填值,设为 false 让明细字段在表格中直接展示)
|
||||||
prescriptionList.value[rowIndex.value] = {
|
prescriptionList.value[rowIndex.value] = {
|
||||||
uniqueKey: nextId.value++,
|
uniqueKey: nextId.value++,
|
||||||
isEdit: true,
|
isEdit: false,
|
||||||
statusEnum: 1,
|
statusEnum: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1131,8 +1131,7 @@ function handleLocationClick(item, row, index) {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
const list = res.data || [];
|
const list = res.data || [];
|
||||||
const d = pickBestOrgQuantityRow(list);
|
const d = pickBestOrgQuantityRow(list);
|
||||||
const strictOk = d && Number(d.orgQuantity ?? 0) > 0;
|
if (d) {
|
||||||
if (strictOk) {
|
|
||||||
applyFromDto(d, false);
|
applyFromDto(d, false);
|
||||||
if (Number(r.totalQuantity) <= 0) {
|
if (Number(r.totalQuantity) <= 0) {
|
||||||
proxy.$message.warning('仓库数量为0,无法调用!');
|
proxy.$message.warning('仓库数量为0,无法调用!');
|
||||||
@@ -1144,11 +1143,15 @@ function handleLocationClick(item, row, index) {
|
|||||||
return runGet(false).then((res2) => {
|
return runGet(false).then((res2) => {
|
||||||
const list2 = res2.data || [];
|
const list2 = res2.data || [];
|
||||||
const d2 = pickBestOrgQuantityRow(list2);
|
const d2 = pickBestOrgQuantityRow(list2);
|
||||||
if (d2 && Number(d2.orgQuantity ?? 0) > 0) {
|
if (d2) {
|
||||||
applyFromDto(d2, true);
|
applyFromDto(d2, true);
|
||||||
proxy.$message.info(
|
if (Number(r.totalQuantity) <= 0) {
|
||||||
'所选批号在本仓库无对应库存或批号不一致,已按仓库实物回显批号与可领数量,请核对。'
|
proxy.$message.warning('仓库数量为0,无法调用!');
|
||||||
);
|
} else {
|
||||||
|
proxy.$message.info(
|
||||||
|
'所选批号在本仓库无对应库存或批号不一致,已按仓库实物回显批号与可领数量,请核对。'
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
r.totalQuantity = 0;
|
r.totalQuantity = 0;
|
||||||
r.price = 0;
|
r.price = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user