wui-print
Version:
前端打印插件,包含打印设计器、打印表单、打印API
130 lines (129 loc) • 4.15 kB
JavaScript
import { deepCopy } from "../../print-designer-utils";
const getHeaderCellId = ({ rowIndex, colIndex } = {}) => {
return `${rowIndex}-${colIndex}`;
};
const createHeaderSpanDetails = ({ complexTableDetails } = {}) => {
let spanHeaderCellDict = {};
let spanHeaderCellList = [];
if (!complexTableDetails.headerLayout || complexTableDetails.headerLayout.length <= 0) {
return { spanHeaderCellDict, spanHeaderCellList };
}
complexTableDetails.headerLayout.forEach((item, index) => {
let rowspan = !!item.rowspan ? item.rowspan : 1;
let colspan = !!item.colspan ? item.colspan : 1;
let minRowIndex = item.rowIndex;
let maxRowIndex = item.rowIndex + rowspan - 1;
let minColIndex = item.colIndex;
let maxColIndex = item.colIndex + colspan - 1;
let itemSpanCellList = [];
for (let rowIndex = minRowIndex; rowIndex <= maxRowIndex; rowIndex++) {
for (let colIndex = minColIndex; colIndex <= maxColIndex; colIndex++) {
let newCellDetails;
if (rowIndex === item.rowIndex && colIndex === item.colIndex) {
newCellDetails = {
rowIndex,
colIndex,
rowspan,
colspan,
show: true
};
} else {
newCellDetails = {
rowIndex,
colIndex,
rowspan,
colspan,
startRowIndex: item.rowIndex,
startColIndex: item.colIndex,
show: false
};
}
itemSpanCellList.push(newCellDetails);
}
}
spanHeaderCellDict[getHeaderCellId({ rowIndex: item.rowIndex, colIndex: item.colIndex })] = itemSpanCellList;
spanHeaderCellList.push(...itemSpanCellList);
});
return { spanHeaderCellDict, spanHeaderCellList };
};
const getHeaderCellShow = ({ rowIndex, colIndex, spanHeaderCellList }) => {
if (!spanHeaderCellList || spanHeaderCellList.length <= 0) {
return true;
}
let cellItem = spanHeaderCellList.find((item, index) => {
return rowIndex === item.rowIndex && item.colIndex === colIndex;
});
if (!cellItem) {
return true;
}
if (!!cellItem) {
return cellItem.show;
}
};
const getRowspan = ({ rowIndex, colIndex, headerLayout } = {}) => {
let nowRowspan = 1;
if (!headerLayout || headerLayout.length <= 0) {
return nowRowspan;
}
let cellItem = headerLayout.find((item, index) => {
return rowIndex === item.rowIndex && item.colIndex === colIndex;
});
if (!cellItem) {
return nowRowspan;
}
if (!!cellItem && !!cellItem.rowspan) {
return cellItem.rowspan;
}
return nowRowspan;
};
const getColspan = ({ rowIndex, colIndex, headerLayout } = {}) => {
let nowColspan = 1;
if (!headerLayout || headerLayout.length <= 0) {
return nowColspan;
}
let cellItem = headerLayout.find((item, index) => {
return rowIndex === item.rowIndex && item.colIndex === colIndex;
});
if (!cellItem) {
return nowColspan;
}
if (!!cellItem && !!cellItem.colspan) {
return cellItem.colspan;
}
return nowColspan;
};
const getTableData = ({ complexTableDetails, printData } = {}) => {
if (!complexTableDetails.props || !complexTableDetails.props.field) {
return [];
}
let field = complexTableDetails.props.field;
if (Array.isArray(printData[field])) {
return deepCopy(printData[field]);
}
return [];
};
const formatHeaderRules = ({ complexTableDetails }) => {
let headerRules = complexTableDetails.headerRules;
if (!headerRules) {
return;
}
let { spanHeaderCellDict, spanHeaderCellList } = createHeaderSpanDetails({ complexTableDetails });
spanHeaderCellList.forEach((item, index) => {
if (!!item.show) {
return;
}
let headerCellId = getHeaderCellId({ rowIndex: item.rowIndex, colIndex: item.colIndex });
if (!!headerRules[headerCellId]) {
delete headerRules[headerCellId];
}
});
};
export default {
getHeaderCellId,
createHeaderSpanDetails,
getHeaderCellShow,
getRowspan,
getColspan,
getTableData,
formatHeaderRules
};