async function exportExcel(fileName = "共识调整.xlsx") {
const exportData = await getAllMainData();
let fitstTitleList = [];
const secondTitleList = [];
allColumns.value.forEach(column => {
if (!column.children) {
fitstTitleList.push(column.label);
secondTitleList.push("");
} else {
const arr = [column.label, "", ""];
fitstTitleList = fitstTitleList.concat(arr);
column.children.forEach(child => {
secondTitleList.push(child.label);
});
}
});
let res = exportData.map(item => {
const fixedData = [item.dimension, item.sku, item.skuDescr1];
const dynamicData =
item.qtyData?.flatMap(qtyItem => {
const arr = [
qtyItem.machPreQty || "",
qtyItem.sumQty || "",
qtyItem.adjRate || ""
];
return arr;
}) || [];
return [...fixedData, ...dynamicData];
});
res = [fitstTitleList, secondTitleList, ...res];
const workSheet = utils.aoa_to_sheet(res);
setMergedCells(workSheet, res);
setStyleCells(utils, workSheet);
workSheet["!cols"] = [
{ wch: 15 },
{ wch: 15 },
{ wch: 20 },
...Array(fitstTitleList.length - 3).fill({ wch: 12 })
];
const workBook = utils.book_new();
utils.book_append_sheet(workBook, workSheet, "数据报表");
writeFile(workBook, fileName);
message("导出成功", { type: "success" });
}
function setStyleCells(utils, workSheet) {
const range = utils.decode_range(workSheet["!ref"] || "A1:A1");
const dataStyle = {
alignment: { horizontal: "center", vertical: "center" },
border: {
top: { style: "thin" },
bottom: { style: "thin" },
left: { style: "thin" },
right: { style: "thin" }
}
};
for (let r = range.s.r; r <= range.e.r; r++) {
for (let c = range.s.c; c <= range.e.c; c++) {
const cellAddress = utils.encode_cell({ r, c });
const cell = workSheet[cellAddress];
if (cell) {
cell.s = { ...(cell.s || {}), ...dataStyle };
}
}
}
}
function setMergedCells(workSheet, res) {
const mergeRanges = [];
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
const firstRow = res[0];
for (let colIndex = 0; colIndex < firstRow.length; colIndex++) {
const cellValue = firstRow[colIndex];
if (cellValue && dateRegex.test(String(cellValue))) {
const mergeRange = {
s: { r: 0, c: colIndex },
e: { r: 0, c: colIndex + 2 }
};
mergeRanges.push(mergeRange);
colIndex += 2;
}
}
const fixedColumns = [
{ s: { r: 0, c: 0 }, e: { r: 1, c: 0 } },
{ s: { r: 0, c: 1 }, e: { r: 1, c: 1 } },
{ s: { r: 0, c: 2 }, e: { r: 1, c: 2 } }
];
fixedColumns.forEach(range => {
mergeRanges.push(range);
});
workSheet["!merges"] = mergeRanges;
}
async function getAllMainData() {
try {
if (pagination.total === dataList.value.length) {
return dataList.value;
} else {
const params = {
...form,
pageSize: pagination.total,
currentPage: 1
};
const { data } = await getConsensusList(toRaw(params));
return data?.list ?? [];
}
} finally {
setTimeout(() => {
loading.value = false;
}, 500);
}
}
