wui-print
Version:
前端打印插件,包含打印设计器、打印表单、打印API
241 lines (240 loc) • 9.18 kB
JavaScript
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
};
};