myprint-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
1 lines • 44.9 kB
Source Map (JSON)
{"version":3,"file":"dataTable.mjs","sources":["../../../../../src/utils/table/dataTable.ts"],"sourcesContent":["// 找到层的深度\nimport {\n MyElement,\n Rect,\n RuntimeElementOption,\n TableCellElement,\n TableHeadProviderCellElement,\n TableStatisticsCellElement\n} from '@myprint/design/types/entity';\nimport numberUtil from '@myprint/design/utils/numberUtil';\nimport { parse, stringify } from '@myprint/design/utils/utils';\nimport { reactive } from 'vue-demi';\nimport { installParentElement, setCurrentElement, setElementWidthPx } from '@myprint/design/utils/elementUtil';\n\n\nexport function recursionForTableCell(tableHeadList: TableHeadProviderCellElement[], callback: (providerCell: TableHeadProviderCellElement) => void) {\n for (let tableHeadCellElement of tableHeadList) {\n callback(tableHeadCellElement);\n if (tableHeadCellElement.columnList != null && tableHeadCellElement.columnList.length > 0) {\n recursionForTableCell(tableHeadCellElement.columnList, callback);\n }\n }\n}\n\n// 表头深度\nexport function findTableHeadDeep(tableHeadList: TableHeadProviderCellElement[], deep: number) {\n for (let tableHeadCellElement of tableHeadList) {\n if (tableHeadCellElement.columnList != null && tableHeadCellElement.columnList.length > 0) {\n return findTableHeadDeep(tableHeadCellElement.columnList, deep + 1);\n }\n }\n return deep;\n}\n\n// 根据位置获取对应的cell,级下面所有行\nexport function getTableCellDown(element: MyElement, tableHeadList: TableCellElement[][], row: number, col: number) {\n const rowCellList: TableCellElement[][] = [];\n const cellList: TableCellElement[] = [];\n let rowStart = 0;\n let colIndex = -1;\n let baseCell: TableCellElement = undefined!;\n\n for (let i = 0; i < tableHeadList[row].length; i++) {\n let tableHeadCellElement = tableHeadList[row][i];\n\n if (tableHeadCellElement && col == rowStart) {\n // cellList.push(tableHeadCellElement);\n baseCell = tableHeadCellElement;\n colIndex = i;\n // 左上角的位置\n break;\n }\n\n if (cellIsContinue(element, tableHeadCellElement, i)) {\n continue;\n }\n\n rowStart++;\n if (tableHeadCellElement.colspan > 1) {\n i = i + tableHeadCellElement.colspan - 1;\n }\n\n }\n\n if (colIndex >= 0) {\n for (let i = row; i < tableHeadList.length; i++) {\n const rowList = tableHeadList[i];\n const cellListTmp: TableCellElement[] = [];\n for (let j = 0; j < baseCell.colspan; j++) {\n if (rowList[colIndex + j]) {\n cellListTmp.push(rowList[colIndex + j]);\n cellList.push(rowList[colIndex + j]);\n }\n }\n rowCellList.push(cellListTmp);\n\n }\n\n }\n\n // console.log(rowCellList);\n return { cellList, rowCellList, colIndex };\n}\n\nexport function cellIsContinue(element: MyElement, tableHeadCellElement: TableCellElement, col: number) {\n if (tableHeadCellElement == null) {\n return true;\n }\n if (tableHeadCellElement.enable == 0) {\n return true;\n }\n if (element.disableCellMap && element.disableCellMap[col]) {\n return true;\n }\n return false;\n}\n\n// 根据位置获取对应的cell\nexport function getTableCell(element: MyElement, tableHeadList: TableCellElement[][], chooseRow: number, chooseCol: number) {\n\n const cellList: TableCellElement[] = [];\n if (chooseRow >= 0 && chooseCol >= 0) {\n let rowStart = 0;\n for (let col = 0; col < tableHeadList[chooseRow].length; col++) {\n let tableHeadCellElement = tableHeadList[chooseRow][col];\n if (cellIsContinue(element, tableHeadCellElement, col)) {\n continue;\n }\n\n if (tableHeadCellElement && chooseCol == rowStart) {\n cellList.push(tableHeadCellElement);\n break;\n }\n\n rowStart++;\n if (tableHeadCellElement.colspan > 1) {\n col = col + tableHeadCellElement.colspan - 1;\n }\n\n }\n\n } else if (chooseCol < 0) {\n // 整行\n for (let col = 0; col < tableHeadList[chooseRow].length; col++) {\n let tableHeadCellElement = tableHeadList[chooseRow][col];\n if (cellIsContinue(element, tableHeadCellElement, col)) {\n continue;\n }\n\n cellList.push(tableHeadCellElement);\n\n if (tableHeadCellElement.colspan > 1) {\n col = col + tableHeadCellElement.colspan - 1;\n }\n }\n } else if (chooseRow < 0) {\n // 整列\n for (let col = 0; col < tableHeadList.length; col++) {\n let tableHeadCellElement = tableHeadList[col][chooseCol];\n if (cellIsContinue(element, tableHeadCellElement, col)) {\n continue;\n }\n\n cellList.push(tableHeadCellElement);\n\n if (tableHeadCellElement.rowspan > 1) {\n col = col + tableHeadCellElement.rowspan - 1;\n }\n }\n }\n\n // console.log(cellList);\n return cellList;\n}\n\n// 获取同一个父级下的兄弟元素\nexport function getChildByParent(tableHeadList: TableCellElement[][], row: number, col: number) {\n const rowList = tableHeadList[row];\n const baseCell = rowList[col];\n const childByParentList: TableCellElement[] = [];\n\n for (let i = 0; i < rowList.length; i++) {\n const cell = rowList[i];\n if (cell == null) {\n continue;\n }\n if (baseCell.runtimeOption.cellParent == null) {\n childByParentList.push(cell);\n } else {\n if (cell.runtimeOption.cellParent == null) {\n }\n if (cell.runtimeOption.cellParent!.id == baseCell.runtimeOption.cellParent.id) {\n childByParentList.push(cell);\n }\n }\n }\n return childByParentList;\n}\n\nexport function selectCell(highlightColumn: any, cellList: TableCellElement[]) {\n const rect = computedCellRect(cellList);\n highlightColumn.x = rect.x;\n highlightColumn.y = rect.y;\n highlightColumn.width = rect.width;\n highlightColumn.height = rect.height;\n // data.highlightColumn.rowList = {};\n // data.highlightColumn.rowList[data.row] = [data.col];\n highlightColumn.visibility = 'visible';\n setCurrentElement(cellList);\n}\n\nexport function computedCellRect(cellList: TableCellElement[]) {\n const rect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n } as Rect;\n\n if (cellList.length == 0) {\n return rect;\n }\n rect.x = cellList[0].runtimeOption.x;\n rect.y = cellList[0].runtimeOption.y;\n\n for (let i = 0; i < cellList.length; i++) {\n const cell = cellList[i];\n\n if (rect.x > cell.runtimeOption.x) {\n rect.x = cell.runtimeOption.x;\n }\n\n if (rect.y > cell.runtimeOption.y) {\n rect.y = cell.runtimeOption.y;\n }\n const width = cell.runtimeOption.x - rect.x + cell.runtimeOption.width;\n const height = cell.runtimeOption.y - rect.y + cell.runtimeOption.height;\n\n if (rect.width < width) {\n rect.width = width;\n }\n\n if (rect.height < height) {\n rect.height = height;\n }\n }\n rect.y = rect.y - 1;\n rect.height = rect.height - 1;\n\n return rect;\n}\n\n/**\n * 往上找,看有没有不为空的节点\n * @param floorHeaderList\n * @param col\n * @param deep\n */\nexport function findUpperCell(floorHeaderList: TableCellElement[][], col: number, deep: number) {\n for (let i = deep; i >= 0; i--) {\n const cell = floorHeaderList[i][col];\n if (cell != null) {\n return floorHeaderList[i][col];\n }\n }\n}\n\nexport function findUpperCellIndex(floorHeaderList: TableCellElement[][], col: number, deep: number) {\n for (let i = deep; i >= 0; i--) {\n const cell = floorHeaderList[i][col];\n if (cell != null) {\n return i;\n }\n }\n}\n\nexport function findFromLeftCell(floorHeaderList: TableCellElement[][], row: number, col: number, deep: number) {\n // debugger\n const rowList = floorHeaderList[row];\n // debugger\n if (deep > 0) {\n // 往后找\n for (let i = col + 1; i < rowList.length; i++) {\n const cell = rowList[i];\n if (cell != null) {\n if (--deep == 0) {\n // debugger\n return { cell: rowList[i], col: i };\n }\n if (cell.colspan > 1) {\n i = i + cell.colspan - 1;\n }\n }\n }\n }\n if (deep < 0) {\n // 往前找\n for (let i = col - 1; i >= 0; i--) {\n const cell = rowList[i];\n if (cell != null) {\n if (++deep == 0) {\n // debugger\n return { cell: rowList[i], col: i };\n }\n }\n }\n }\n}\n\nexport function lastHeadList(tableHeadListList: TableCellElement[][]) {\n const headList = tableHeadListList[tableHeadListList.length - 1];\n const lastHeadList: TableCellElement[] = [];\n\n for (let i = 0; i < headList.length; i++) {\n let head = headList[i];\n if (head == null) {\n head = findUpperCell(tableHeadListList, i, tableHeadListList.length - 1)!;\n }\n lastHeadList.push(head);\n }\n return lastHeadList;\n}\n\n/**\n * 计算表格的宽高和位置\n * @param tableElement\n * @param table\n * @param tableHeadListList\n */\nexport function computedTableCell(tableElement: MyElement, table: HTMLElement, tableHeadListList: TableCellElement[][]) {\n const tableRect = table.getBoundingClientRect() as DOMRect;\n const disableCellMap = tableElement.disableCellMap ?? {};\n\n const rowHeightList: number[] = [];\n for (let row = 0; row < tableHeadListList.length; row++) {\n let height = 0;\n const tableHeadListListElement = tableHeadListList[row];\n for (let col = 0; col < tableHeadListListElement.length; col++) {\n const tableCellElement = tableHeadListListElement[col];\n if (tableCellElement == null) {\n continue;\n }\n\n if (tableCellElement.colspan > 1) {\n if (row + 1 < tableHeadListList.length) {\n const childList = tableHeadListList[row + 1];\n for (let childCol = col; childCol < childList.length; childCol++) {\n const child = childList[childCol];\n if (child == null) {\n continue;\n }\n if (child.runtimeOption == null) {\n child.runtimeOption = {} as RuntimeElementOption;\n }\n // console.log(child);\n child.runtimeOption.cellParent = tableCellElement;\n }\n }\n }\n\n if (recursionColumnDisable(tableCellElement)) {\n continue;\n }\n if (disableCellMap[col]) {\n continue;\n }\n\n const target = tableCellElement.runtimeOption.target as HTMLElement;\n\n if (target == null) {\n // 被隐藏了\n continue;\n }\n\n const tdRect = target.getBoundingClientRect();\n\n const tdY = numberUtil.sub(tdRect.y, tableRect.y);\n const tdX = numberUtil.sub(tdRect.x, tableRect.x);\n\n tableCellElement.runtimeOption.x = tdX;\n tableCellElement.runtimeOption.y = tdY;\n tableCellElement.runtimeOption.width = tdRect.width;\n tableCellElement.runtimeOption.height = tdRect.height;\n\n height = numberUtil.div(tableCellElement.runtimeOption.height, tableCellElement.rowspan);\n }\n\n rowHeightList.push(height);\n }\n\n return rowHeightList;\n}\n\nexport function initTableCell(tableHeadListList: TableCellElement[][]) {\n\n for (let row = 0; row < tableHeadListList.length; row++) {\n const tableHeadListListElement = tableHeadListList[row];\n for (let col = 0; col < tableHeadListListElement.length; col++) {\n const tableCellElement = tableHeadListListElement[col];\n if (tableCellElement == null) {\n continue;\n }\n tableCellElement.runtimeOption.init.width = tableCellElement.runtimeOption.width;\n tableCellElement.runtimeOption.init.height = tableCellElement.runtimeOption.height;\n }\n }\n}\n\nexport function handleTableCellInitHeight(tableHeadListList: TableCellElement[][]) {\n for (let tableHeadListListElement of tableHeadListList) {\n let height = 0;\n for (let tableCellElement of tableHeadListListElement) {\n if (tableCellElement == null) {\n continue;\n }\n if (height < tableCellElement.height) {\n height = tableCellElement.height;\n }\n }\n\n for (let tableCellElement of tableHeadListListElement) {\n if (tableCellElement == null) {\n continue;\n }\n tableCellElement.height = height * tableCellElement.rowspan;\n }\n }\n}\n\n// 表格转嵌套表头\n// + + + + + - - - + +\n// - - - - + + - + - -\n// - - - - - + + - - -\nexport function tableHeadList2Nest(headListList: TableCellElement[][], row: number, col: number, size: number) {\n const tableHeadNest: TableCellElement[] = [];\n const headList = headListList[row];\n for (let i = col; i < col + size; i++) {\n const column = headList[i];\n if (column == null) {\n continue;\n }\n\n tableHeadNest.push(column);\n\n if (row < headListList.length - 1) {\n\n let colspan = 1;\n for (let j = i + 1; j < headList.length; j++) {\n const cell = headList[j];\n if (row > 0) {\n const upperCellIndex = findUpperCellIndex(headListList, j, row);\n if (upperCellIndex != null) {\n break;\n }\n }\n\n if (cell != null) {\n break;\n }\n colspan++;\n }\n if (colspan > 1) {\n column.runtimeOption.nestColumnList = tableHeadList2Nest(headListList, row + 1, i, colspan);\n }\n }\n }\n return tableHeadNest;\n}\n\nexport function computedDisableColumn(rowColumnList: TableCellElement[][]) {\n const disableCellMap = {};\n for (let row = 0; row < rowColumnList.length; row++) {\n const columnList = rowColumnList[row];\n if (columnList == null) {\n continue;\n }\n for (let col = 0; col < columnList.length; col++) {\n\n const column = columnList[col];\n\n if (column == null) {\n continue;\n }\n\n if (column.option.enable == 0) {\n for (let k = 0; k < column.colspan; k++) {\n disableCellMap[col + k] = 1;\n }\n }\n }\n }\n\n return disableCellMap;\n}\n\nexport function recursionColumnDisable(column: TableCellElement) {\n if (column == null) {\n return false;\n }\n if (column.option.enable == 0) {\n return true;\n }\n if (column.runtimeOption.cellParent) {\n return recursionColumnDisable(column.runtimeOption.cellParent);\n }\n return false;\n}\n\n// 表格处理 树形表头展开\nexport function recursionHandleTableHead(tableHeadListList: TableCellElement[][], tableHeadList: TableHeadProviderCellElement[], deep: number) {\n const tableHeadListTmp = tableHeadListList[deep];\n for (let j = 0; j < tableHeadList.length; j++) {\n const tableHeadCell = tableHeadList[j];\n const childList = tableHeadCell.columnList;\n tableHeadCell.columnList = undefined!;\n if (childList != null && childList.length > 0) {\n tableHeadCell.rowspan = 1;\n\n recursionHandleTableHead(tableHeadListList, childList, deep + 1);\n let colspan = 0;\n let width = 0;\n for (let tableHeadCellElement of childList) {\n colspan += tableHeadCellElement.colspan;\n width = numberUtil.sub(width, tableHeadCellElement.width);\n }\n\n tableHeadCell.colspan = colspan;\n tableHeadCell.width = width;\n\n } else {\n tableHeadCell.colspan = 1;\n tableHeadCell.rowspan = tableHeadListList.length - deep;\n }\n\n tableHeadListTmp.push(tableHeadCell as any);\n for (let k = 1; k < tableHeadCell.colspan; k++) {\n tableHeadListTmp.push(undefined!);\n }\n if (tableHeadCell.rowspan > 1) {\n for (let k = 1 + deep; k < tableHeadCell.rowspan + deep; k++) {\n tableHeadListList[k].push(undefined!);\n }\n }\n\n }\n}\n\n// 重新统计colspan 和宽\nexport function computeColumnColspan(tableHeadList: TableCellElement[], deep: number) {\n for (let j = 0; j < tableHeadList.length; j++) {\n const tableHeadCell = tableHeadList[j];\n const childList = tableHeadCell.runtimeOption.nestColumnList;\n if (childList != null && childList.length > 0) {\n // tableHeadCell.rowspan = 1;\n\n computeColumnColspan(childList, deep + 1);\n let colspan = 0;\n let width = 0;\n let widthEx = 0;\n for (let tableHeadCellElement of childList) {\n if (tableHeadCellElement.option.enable == 0) {\n continue;\n }\n colspan += tableHeadCellElement.colspan;\n width = numberUtil.sum(width, tableHeadCellElement.width);\n widthEx = numberUtil.sum(widthEx, tableHeadCellElement.runtimeOption.width);\n }\n\n tableHeadCell.colspan = colspan;\n setElementWidthPx(widthEx, tableHeadCell);\n\n } else {\n tableHeadCell.colspan = 1;\n }\n }\n}\n\nexport function addStatisticsRow(tableElement: MyElement) {\n const statisticsRowList: TableStatisticsCellElement[] = [];\n tableElement.tableBodyList[0].map((v) => {\n const element = parse(stringify(v, 'parent', 'target', 'elementList'), reactive({}) as TableStatisticsCellElement);\n element.id = undefined!;\n element.data = undefined!;\n element.option.formatter = undefined!;\n element.runtimeOption.cellType = 'Statistics';\n installParentElement(tableElement, element);\n statisticsRowList.push(element);\n });\n tableElement.statisticsList.push(statisticsRowList);\n}\n\nexport function tableRealCol(tableElement: MyElement, colList: TableCellElement[], col: number) {\n let realCol = 0;\n for (let i = 0; i < colList.length; i++) {\n if (cellIsContinue(tableElement, colList[i], i)) {\n continue;\n }\n if (realCol == col) {\n return colList[i];\n }\n realCol++;\n }\n}\n\n// preview\nexport function previewTableStatisticsList(tableStatisticsTmpList: TableStatisticsCellElement[][], tableStatisticsList: TableStatisticsCellElement[][],\n statisticsListWrapper: Record<number, any[]>,\n headList: TableCellElement[]) {\n\n for (let i = 0; i < tableStatisticsTmpList.length; i++) {\n const rowList = [...tableStatisticsTmpList[i]];\n let hasCell = previewRowStatisticsList(rowList, statisticsListWrapper, headList, 'everyPageStatisticsIs');\n if (hasCell) {\n tableStatisticsList.push(rowList);\n }\n }\n}\n\nexport function previewRowStatisticsList(rowList: TableStatisticsCellElement[], statisticsList: Record<number, any[]>, headList: TableCellElement[], statisticsDisplayType: string) {\n let hasCell = false;\n for (let col = 0; col < rowList.length; col++) {\n const head = rowList[col];\n if (head == null || !head[statisticsDisplayType]) {\n continue;\n }\n const statisticsCell = parse(stringify(head, 'parent'), reactive({}) as TableStatisticsCellElement);\n // console.log(statisticsCell);\n statisticsCell.runtimeOption.parent = head.runtimeOption.parent;\n rowList[col] = statisticsCell;\n\n hasCell = true;\n let statisticsWrapper = statisticsList[col];\n if (statisticsWrapper == undefined) {\n statisticsWrapper = [];\n statisticsList[col] = statisticsWrapper;\n }\n const column = headList[col];\n const cellWrapper = {\n head: column,\n value: 0,\n count: 0,\n setCount: {},\n cell: statisticsCell\n };\n if (statisticsCell.statisticsType == 'Min') {\n cellWrapper.value = Number.MAX_VALUE;\n }\n if (statisticsCell.statisticsType == 'Max') {\n cellWrapper.value = Number.MIN_VALUE;\n }\n statisticsWrapper.push(cellWrapper);\n }\n\n return hasCell;\n}\n\nexport function statisticsData(previewDataList: any[], statisticsListWrapper: Record<number, any[]>) {\n // console.log(previewDataList, statisticsListWrapper);\n // const rowList = previewDataList[0];\n const colList = Object.keys(statisticsListWrapper);\n\n if (colList.length == 0) {\n return;\n }\n\n for (let previewData of previewDataList) {\n for (let col of colList) {\n const statisticsWrapperList = statisticsListWrapper[col];\n for (let statisticsWrapper of statisticsWrapperList) {\n const cell = statisticsWrapper.cell as TableStatisticsCellElement;\n const head = statisticsWrapper.head as TableCellElement;\n const data = previewData[head.field];\n // console.log(col, cell, head, previewData[head.field]);\n\n if (numberUtil.isNumber(data)) {\n if (cell.statisticsType == 'Sum' || cell.statisticsType == 'Avg') {\n statisticsWrapper.value = statisticsWrapper.value + data;\n\n if (cell.statisticsType == 'Avg') {\n statisticsWrapper.count++;\n }\n } else if (cell.statisticsType == 'Max') {\n if (statisticsWrapper.value < data) {\n statisticsWrapper.value = data;\n }\n } else if (cell.statisticsType == 'Min') {\n if (statisticsWrapper.value > data) {\n statisticsWrapper.value = data;\n }\n }\n }\n if (cell.statisticsType == 'Count') {\n statisticsWrapper.count++;\n }\n if (cell.statisticsType == 'DistinctCount') {\n statisticsWrapper.setCount[data] = null;\n }\n }\n }\n }\n\n for (let col of colList) {\n for (let statisticsWrapper of statisticsListWrapper[col]) {\n const cell = statisticsWrapper.cell as TableStatisticsCellElement;\n if (cell.statisticsType == 'Sum' || cell.statisticsType == 'Max' || cell.statisticsType == 'Min') {\n cell.data = statisticsWrapper.value;\n } else if (cell.statisticsType == 'Avg') {\n cell.data = numberUtil.div(statisticsWrapper.value, statisticsWrapper.count);\n } else if (cell.statisticsType == 'Count') {\n cell.data = statisticsWrapper.count;\n } else if (cell.statisticsType == 'DistinctCount') {\n cell.data = Object.keys(statisticsWrapper.setCount).length;\n }\n }\n }\n}\n\n"],"names":["lastHeadList","numberUtil"],"mappings":"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"}