UNPKG

wui-print

Version:

前端打印插件,包含打印设计器、打印表单、打印API

241 lines (240 loc) 9.18 kB
import { deepCopy } from "../../print-designer-utils"; export default ({ printData, printConfig, formConfig, layoutConfig, printedRowCount } = {}) => { const formatLayoutConfig = () => { console.log("【固定高度续打】formatLayoutConfig入参===>", { printData: deepCopy(printData), printConfig: deepCopy(printConfig), formConfig: deepCopy(formConfig), layoutConfig: deepCopy(layoutConfig), printedRowCount }); let continueDetails = _getContinueDetails(); console.log("【固定高度续打】获取续打信息====>continueDetails", continueDetails); let continueAllData = printData[continueDetails.dataField]; if (!continueAllData && printedRowCount <= 0) { // 没有续打数据 之前未打印数据 return layoutConfig; } if (!continueAllData && printedRowCount > 0) { // 没有续打数据 之前已打印数据 return []; } let continueSplitData = _splitContinueAllData({ continueAllData, pageMaxRow: continueDetails.pageMaxRow, continueBeforeRowCount: continueDetails.continueBeforeRowCount }); let oldLayoutConfig = _filterLayoutConfig(); let newLayoutConfig = []; if (printedRowCount <= 0) { // 不是续打 continueSplitData.forEach((item, index) => { let pageLayoutConfig = _createPageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData: item, currentPage: continueDetails.continueBeginPageNum + index, pageCount: continueSplitData.length }); newLayoutConfig.push(...pageLayoutConfig); }); } if (printedRowCount > 0) { // 是续打 continueSplitData.forEach((item, index) => { let pageLayoutConfig = _createContinuePageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData: item, currentPage: continueDetails.continueBeginPageNum + index, pageCount: continueDetails.continueBeginPageNum + continueSplitData.length - 1, continueBeforeRowCount: continueDetails.continueBeforeRowCount }); newLayoutConfig.push(...pageLayoutConfig); }); } if (!newLayoutConfig) { newLayoutConfig = []; } return newLayoutConfig; }; function _createPageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData, currentPage, pageCount } = {}) { let pageLayoutConfig = deepCopy(oldLayoutConfig); let newField = `_continue_${continueDetails.dataField}_${currentPage}`; let nowContinueConfig = { type: "fixed_default", currentPage, blankRowCount: 0 }; pageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField; printData[newField] = deepCopy(pageComplateTableData); // 最后一页还有空白行 if (currentPage == pageCount && pageComplateTableData.length < continueDetails.pageMaxRow) { nowContinueConfig.blankRowCount = continueDetails.pageMaxRow - pageComplateTableData.length; nowContinueConfig.type = "fixed_afterBlankRow"; } pageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = nowContinueConfig; if (pageCount > 1) { if (currentPage > 1) { // 添加分页上边距 pageLayoutConfig.unshift({ type: "pageTop" }); } if (currentPage < pageCount) { // 添加分页下边距 pageLayoutConfig.push({ type: "pageBottom" }); // 添加分页 pageLayoutConfig.push({ type: "pageBreak" }); } } return pageLayoutConfig; } function _createContinuePageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData, currentPage, pageCount, continueBeforeRowCount } = {}) { let continuePageLayoutConfig = deepCopy(oldLayoutConfig); let newField = `_continue_${continueDetails.dataField}_${currentPage}`; continuePageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField; printData[newField] = deepCopy(pageComplateTableData); // _continueConfig先赋值 continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = { type: "fixed_default", currentPage, blankRowCount: 0 }; if (currentPage === continueDetails.continueBeginPageNum && continueBeforeRowCount > 0) { // 第一页是续打页 continuePageLayoutConfig.forEach((item, index) => { if (index < continueDetails.layoutConfigIndex) { item._continueConfig = { isBefore: true }; } else if (index > continueDetails.layoutConfigIndex) { item._continueConfig = { isAfter: true }; } }); let blankLayoutConfigItem = deepCopy(continueDetails.continueConfigItem); blankLayoutConfigItem._continueConfig = { type: "fixed_blankTable", currentPage, blankRowCount: continueBeforeRowCount }; continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = { type: "fixed_continuingContent", currentPage, blankRowCount: 0 }; continuePageLayoutConfig.splice(continueDetails.layoutConfigIndex, 0, blankLayoutConfigItem); } else if ( pageCount > continueDetails.continueBeginPageNum && currentPage == pageCount && pageComplateTableData.length < continueDetails.pageMaxRow ) { // 最后一页还有空白行 continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = { type: "fixed_afterBlankRow", currentPage, blankRowCount: continueDetails.pageMaxRow - pageComplateTableData.length }; } if (currentPage > continueDetails.continueBeginPageNum) { // 添加分页上边距 continuePageLayoutConfig.unshift({ type: "pageTop" }); } if (currentPage < pageCount) { // 添加分页下边距 continuePageLayoutConfig.push({ type: "pageBottom" }); // 添加分页 continuePageLayoutConfig.push({ type: "pageBreak" }); } return continuePageLayoutConfig; } function _filterLayoutConfig() { // 只保留第一个续打表格 let newLayoutConfig = []; let continueConfigItem = false; layoutConfig.forEach((item, index) => { let nowProps = !!item.props ? item.props : {}; if (item.type == "complexTable" && !!nowProps.canContinue && !!continueConfigItem) { continueConfigItem = item; return; } if (item.type == "complexTable" && !!nowProps.canContinue) { continueConfigItem = item; } newLayoutConfig.push(item); }); return newLayoutConfig; } function _getContinueDetails() { let continueDetails = { continueState: false }; if (!layoutConfig || layoutConfig.length <= 0) { return continueDetails; } let continueConfigItem = false; layoutConfig.forEach((item, index) => { if (!!continueConfigItem) { return; } let nowProps = !!item.props ? item.props : {}; if (item.type == "complexTable" && !!nowProps.canContinue) { continueConfigItem = item; continueDetails.layoutConfigIndex = index; } }); if (!continueConfigItem) { return continueDetails; } let continueConfigItemProps = !!continueConfigItem.props ? continueConfigItem.props : {}; continueDetails.continueState = true; continueDetails.continueConfigItem = deepCopy(continueConfigItem); continueDetails.dataField = !!continueConfigItemProps.field ? continueConfigItemProps.field : ""; continueDetails.pageMaxRow = !!continueConfigItemProps.perPageMaxRow ? continueConfigItemProps.perPageMaxRow : 0; continueDetails.continueBeforeRowCount = printedRowCount % continueDetails.pageMaxRow; if (printedRowCount <= 0) { continueDetails.continueBeginPageNum = 1; } else if (continueDetails.continueBeforeRowCount === 0) { continueDetails.continueBeginPageNum = printedRowCount / continueDetails.pageMaxRow + 1; } else { continueDetails.continueBeginPageNum = Math.ceil(printedRowCount / continueDetails.pageMaxRow); } return continueDetails; } function _splitContinueAllData({ continueAllData, pageMaxRow, continueBeforeRowCount }) { let result = []; let newAllData = continueAllData; if (printedRowCount > 0) { let endIndex = pageMaxRow - continueBeforeRowCount; let firstContinueData = continueAllData.slice(0, endIndex); result.push(firstContinueData); newAllData = continueAllData.slice(endIndex, continueAllData.length); } for (let i = 0; i < newAllData.length; i += pageMaxRow) { result.push(newAllData.slice(i, i + pageMaxRow)); } return result; } return { formatLayoutConfig }; };