43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
import { VxeUI } from "vxe-table"
|
|
|
|
// 数组分块分组
|
|
function chunk<T>(array: T[], size: number): T[][] {
|
|
if (size <= 0) {
|
|
throw new Error("组的大小必须大于0")
|
|
}
|
|
|
|
const result: T[][] = []
|
|
for (let i = 0; i < array.length; i += size) {
|
|
result.push(array.slice(i, i + size))
|
|
}
|
|
return result
|
|
}
|
|
|
|
// 表格分页 + 表单信息 打印
|
|
export const tablePrint = (vxeTableRef: any, baseInfoRef: any, vxeTableData: any, tableChunkSize: number = 20, printTitle: string = "") => {
|
|
const $table = vxeTableRef
|
|
const formPrintHtml = baseInfoRef ? baseInfoRef.innerHTML : ""
|
|
if ($table && formPrintHtml) {
|
|
// 分割每页20条
|
|
Promise.all(
|
|
chunk(vxeTableData, tableChunkSize).map((pageData: any, index: number) => {
|
|
return $table
|
|
.getPrintHtml({
|
|
data: pageData,
|
|
})
|
|
.then(({ html }: any) => {
|
|
return {
|
|
bodyHtml: index === 0 ? formPrintHtml + html : html,
|
|
}
|
|
})
|
|
}),
|
|
).then((pageBreaks) => {
|
|
VxeUI.print({
|
|
title: printTitle,
|
|
showPageNumber: true,
|
|
pageBreaks,
|
|
})
|
|
})
|
|
}
|
|
}
|