fix: #568 (codex)
This commit is contained in:
@@ -298,6 +298,7 @@ const { proxy } = getCurrentInstance();
|
||||
const totalAmount = ref(0);
|
||||
const purchaseinventoryListAll = ref([]);
|
||||
const xiaojiTotal = ref([]);
|
||||
const rowSpanMap = ref({});
|
||||
const rowSpan = ref(1);
|
||||
const issuerOptions = ref([]);
|
||||
const payeeOptions = ref([]);
|
||||
@@ -548,92 +549,91 @@ function handleTotalAmount() {
|
||||
}, 0);
|
||||
}
|
||||
|
||||
// 门诊号合并行处理
|
||||
function getTotals(row, i) {
|
||||
let totalPriceSums = Number(purchaseinventoryList.value[i].totalPrice);
|
||||
|
||||
for (let j = 1; i - j >= 0; j++) {
|
||||
if (purchaseinventoryList.value[i].busNo == purchaseinventoryList.value[i - j].busNo) {
|
||||
totalPriceSums += Number(purchaseinventoryList.value[i - j].totalPrice);
|
||||
}
|
||||
}
|
||||
|
||||
xiaojiTotal.value.push({
|
||||
inde: i + 1,
|
||||
busNo: row.busNo,
|
||||
genderEnum_enumText: row.genderEnum_enumText,
|
||||
totalPrice: totalPriceSums.toFixed(4) || 0.0,
|
||||
});
|
||||
|
||||
purchaseinventoryList.value.splice(i + 1, 0, {
|
||||
busNo: row.busNo,
|
||||
genderEnum_enumText: row.genderEnum_enumText,
|
||||
departmentName: '小计',
|
||||
totalPrice: totalPriceSums.toFixed(4) || 0.0,
|
||||
});
|
||||
}
|
||||
|
||||
// 表格合并行方法
|
||||
// 表格合并行方法(纯函数,不修改数据)
|
||||
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
||||
if (columnIndex === 1 && purchaseinventoryList.value.length > 0) {
|
||||
if (
|
||||
rowIndex === 0 ||
|
||||
(rowIndex > 0 && row.busNo !== purchaseinventoryList.value[rowIndex - 1]?.busNo)
|
||||
) {
|
||||
let rowspan = 1;
|
||||
let totalPriceSum = 0;
|
||||
|
||||
for (let i = rowIndex + 1; i < purchaseinventoryList.value.length + 1; i++) {
|
||||
if (purchaseinventoryList.value[i - 1].departmentName != '合计') {
|
||||
if (
|
||||
purchaseinventoryList.value[i] &&
|
||||
purchaseinventoryList.value[i].busNo === row.busNo
|
||||
) {
|
||||
rowspan++;
|
||||
totalPriceSum += Number(purchaseinventoryList.value[i].totalPrice);
|
||||
|
||||
if (i == purchaseinventoryList.value.length - 1) {
|
||||
let findIndexTotal = xiaojiTotal.value.findIndex((k) => k.busNo == row.busNo);
|
||||
if (findIndexTotal < 0) {
|
||||
getTotals(row, i);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
totalPriceSum += Number(row.totalPrice);
|
||||
let findIndexTotal = xiaojiTotal.value.findIndex((k) => k.busNo == row.busNo);
|
||||
|
||||
if (findIndexTotal < 0) {
|
||||
xiaojiTotal.value.push({
|
||||
inde: i,
|
||||
genderEnum_enumText: row.genderEnum_enumText,
|
||||
busNo: row.busNo,
|
||||
totalPrice: totalPriceSum,
|
||||
});
|
||||
|
||||
purchaseinventoryList.value.splice(i, 0, {
|
||||
busNo: row.busNo,
|
||||
genderEnum_enumText: row.genderEnum_enumText,
|
||||
departmentName: '小计',
|
||||
totalPrice: totalPriceSum.toFixed(4) || 0.0,
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { rowspan, colspan: 1 };
|
||||
// 仅处理科室列(columnIndex === 1)的门诊号合并
|
||||
if (columnIndex === 1) {
|
||||
const spanInfo = rowSpanMap.value[rowIndex];
|
||||
if (spanInfo) {
|
||||
return { rowspan: spanInfo.rowspan, colspan: spanInfo.colspan || 1 };
|
||||
} else {
|
||||
return { rowspan: 0, colspan: 0 };
|
||||
}
|
||||
}
|
||||
// 其他列不合并
|
||||
return { rowspan: 1, colspan: 1 };
|
||||
};
|
||||
|
||||
// 预处理列表数据:插入小计行、计算合并行信息
|
||||
// 此函数替代了原来在 arraySpanMethod 中 splice 修改数据的做法
|
||||
function processListWithSubtotals(list) {
|
||||
rowSpanMap.value = {};
|
||||
xiaojiTotal.value = [];
|
||||
|
||||
const result = [];
|
||||
let i = 0;
|
||||
|
||||
while (i < list.length) {
|
||||
const row = list[i];
|
||||
// 跳过已有的合计行
|
||||
if (row.departmentName === '合计') {
|
||||
result.push(row);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const currentBusNo = row.busNo;
|
||||
let rowspan = 0;
|
||||
let totalPriceSum = 0;
|
||||
let j = i;
|
||||
|
||||
// 计算相同门诊号的行数
|
||||
while (j < list.length && list[j].busNo === currentBusNo && list[j].departmentName !== '合计') {
|
||||
rowspan++;
|
||||
totalPriceSum += Number(list[j].totalPrice) || 0;
|
||||
j++;
|
||||
}
|
||||
|
||||
// 设置第一行的 rowspan
|
||||
const startRow = result.length;
|
||||
rowSpanMap.value[startRow] = { rowspan, colspan: 1 };
|
||||
|
||||
// 添加数据行
|
||||
for (let k = i; k < j; k++) {
|
||||
result.push(list[k]);
|
||||
}
|
||||
|
||||
// 添加小计行(多于1行时才添加)
|
||||
if (rowspan > 1) {
|
||||
const subtotalRow = {
|
||||
...list[i],
|
||||
departmentName: '小计',
|
||||
totalPrice: totalPriceSum.toFixed(4),
|
||||
};
|
||||
// 小计行不合并
|
||||
rowSpanMap.value[result.length] = { rowspan: 1, colspan: 1 };
|
||||
result.push(subtotalRow);
|
||||
xiaojiTotal.value.push({
|
||||
inde: result.length,
|
||||
busNo: currentBusNo,
|
||||
genderEnum_enumText: list[i].genderEnum_enumText,
|
||||
totalPrice: totalPriceSum.toFixed(4),
|
||||
});
|
||||
}
|
||||
|
||||
i = j;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// 统计类型变化处理
|
||||
function inventoryChange(val) {
|
||||
queryParams.value.statisticsType = val;
|
||||
xiaojiTotal.value = [];
|
||||
purchaseinventoryList.value = [];
|
||||
rowSpanMap.value = {};
|
||||
getList();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user