UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 5.65 kB
{"version":3,"file":"utils.mjs","sources":["../../../../../../src/components/ivue-table/table-header/utils.ts"],"sourcesContent":["import { computed, inject } from 'vue';\r\n\r\n// type\r\nimport type { TableHeaderProps } from './types';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\nimport { TableContextKey } from '../table/defaults';\r\n\r\n// 获取所有列\r\nconst getAllColumns = (columns: TableColumnCtx[]): TableColumnCtx[] => {\r\n const result: TableColumnCtx[] = [];\r\n\r\n columns.forEach((column) => {\r\n // 有子项\r\n if (column.children) {\r\n result.push(column);\r\n\r\n // eslint-disable-next-line prefer-spread\r\n result.push.apply(result, getAllColumns(column.children));\r\n }\r\n // 没有子项\r\n else {\r\n result.push(column);\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n// 转换行\r\nconst convertToRows = (originColumns: TableColumnCtx[]): TableColumnCtx[] => {\r\n let maxLevel = 1;\r\n\r\n // 遍历\r\n const traverse = (\r\n column: TableColumnCtx,\r\n parent: TableColumnCtx | undefined\r\n ) => {\r\n // 父\r\n if (parent) {\r\n column.level = parent.level + 1;\r\n\r\n if (maxLevel < column.level) {\r\n maxLevel = column.level;\r\n }\r\n }\r\n\r\n // 有子项\r\n if (column.children) {\r\n let colSpan = 0;\r\n\r\n column.children.forEach((subColumn) => {\r\n traverse(subColumn, column);\r\n\r\n // 单元格可横跨的列数\r\n colSpan += subColumn.colSpan;\r\n });\r\n\r\n // 单元格可横跨的列数\r\n column.colSpan = colSpan;\r\n }\r\n // 没有子项\r\n else {\r\n // 单元格可横跨的列数\r\n column.colSpan = 1;\r\n }\r\n };\r\n\r\n // 列数据\r\n originColumns.forEach((item) => {\r\n item.level = 1;\r\n\r\n traverse(item, undefined);\r\n });\r\n\r\n // 行数据\r\n const rows = [];\r\n\r\n for (let i = 0; i < maxLevel; i++) {\r\n rows.push([]);\r\n }\r\n\r\n // 获取所有列\r\n const allColumns: TableColumnCtx[] = getAllColumns(originColumns);\r\n\r\n allColumns.forEach((item) => {\r\n // 没有子项\r\n if (!item.children) {\r\n // 单元格可横跨的行数\r\n item.rowSpan = maxLevel - item.level + 1;\r\n }\r\n // 有子项\r\n else {\r\n // 单元格可横跨的行数\r\n item.rowSpan = 1;\r\n // 设置是否是子项\r\n item.children.forEach((col) => (col.isSubColumn = true));\r\n }\r\n\r\n rows[item.level - 1].push(item);\r\n });\r\n\r\n return rows;\r\n};\r\n\r\nfunction useUtils(props: TableHeaderProps) {\r\n // inject\r\n const IvueTable = inject(TableContextKey);\r\n\r\n // 获取当前列的行数\r\n const columnRows = computed(() => {\r\n return convertToRows(props.store.states.originColumns.value);\r\n });\r\n\r\n // 是否拥有多级表头\r\n const isGroup = computed(() => {\r\n const result = columnRows.value.length > 1;\r\n\r\n if (result && IvueTable) {\r\n IvueTable.state.isGroup.value = true;\r\n }\r\n\r\n return result;\r\n });\r\n\r\n return {\r\n isGroup,\r\n columnRows,\r\n };\r\n}\r\n\r\nexport default useUtils;\r\n"],"names":[],"mappings":"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"}