UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 6.41 kB
{"version":3,"file":"useMultiHeader.mjs","sources":["../../../src/table/hooks/useMultiHeader.ts"],"sourcesContent":["/**\n * 多级表头相关逻辑\n ** */\n\nimport { RowspanColspan } from '../type';\nimport { BaseTableColumns, ThRowspanAndColspan } from '../interface';\n\n// 获取节点深度,即表头总层级\nexport function getNodeDepth(columns: BaseTableColumns, depthMap: Map<any, number>, depth = 1): number {\n let maxDepth = depth;\n // 树形结构递归已有较多函数上下文,此处不使用 forEach 迭代\n for (let i = 0, len = columns.length; i < len; i++) {\n const col = columns[i];\n depthMap.set(col, depth);\n if (col?.children?.length) {\n const deep = getNodeDepth(col.children, depthMap, depth + 1);\n if (deep > maxDepth) {\n maxDepth = deep;\n }\n }\n }\n return maxDepth;\n}\n\n// 或当前节点的叶子结点宽度\nexport function getChildrenNodeWidth(node: BaseTableColumns[0], count = 0) {\n let countNew = count;\n const childrenList = node?.children || [];\n for (let i = 0, len = childrenList.length; i < len; i++) {\n const item = childrenList[i];\n if (item.children) {\n countNew = getChildrenNodeWidth(item, countNew);\n } else {\n countNew += 1;\n }\n }\n return countNew;\n}\n\n// 获取多级表头对应的 colspan 和 rowspan,以及叶子节点\nexport function getThRowspanAndColspan(columns: BaseTableColumns) {\n const depthMap = new Map<any, number>();\n const columnsDepth = getNodeDepth(columns, depthMap);\n const rowspanAndColspanMap: ThRowspanAndColspan = new Map();\n const loop = (nodes: BaseTableColumns, leafColumns: BaseTableColumns) => {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const col = nodes[i];\n const rowspan = col.children ? 1 : columnsDepth - depthMap.get(col) + 1;\n const colspan = col.children ? getChildrenNodeWidth(col) : 1;\n // 避免存在 rowspan 或者 colspan 空属性\n const span: RowspanColspan = {};\n rowspan > 1 && (span.rowspan = rowspan);\n colspan > 1 && (span.colspan = colspan);\n rowspanAndColspanMap.set(col, span);\n if (col?.children?.length) {\n loop(col.children, leafColumns);\n } else {\n leafColumns.push(col);\n }\n }\n };\n const leafColumns: BaseTableColumns = [];\n loop(columns, leafColumns);\n return { rowspanAndColspanMap, leafColumns };\n}\n\n// 表头渲染所需的二维数据\nexport function getThList(columns: BaseTableColumns): Array<BaseTableColumns> {\n const loop = (nodes: BaseTableColumns, thRows: Array<BaseTableColumns>) => {\n let thRowData: BaseTableColumns = [];\n let children: BaseTableColumns = [];\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n const thList = [node];\n thRowData = thRowData.concat(thList);\n if (node?.children?.length) {\n children = children.concat(node.children);\n }\n }\n if (children?.length) {\n loop(children, thRows);\n }\n thRows.push(thRowData);\n return thRowData;\n };\n let list: Array<BaseTableColumns> = [];\n loop(columns, list);\n list = list.reverse();\n return list;\n}\n"],"names":["depthMap","maxDepth","countNew","rowspanAndColspanMap","loop","leafColumns","thRowData","thRows","list"],"mappings":"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"}