xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 8.48 kB
Source Map (JSON)
{"version":3,"file":"enhanced-table.mjs","sources":["../../src/table/enhanced-table.tsx"],"sourcesContent":["import { defineComponent, SetupContext, computed, ref, getCurrentInstance } from 'vue';\nimport baseTableProps from './base-table-props';\nimport primaryTableProps from './primary-table-props';\nimport enhancedTableProps from './enhanced-table-props';\nimport PrimaryTable from './primary-table';\nimport { TdEnhancedTableProps, PrimaryTableCol, TableRowData, DragSortContext, TdPrimaryTableProps } from './type';\nimport useTreeData from './hooks/useTreeData';\nimport useTreeSelect from './hooks/useTreeSelect';\nimport get from 'lodash/get';\nimport { ScrollToElementParams } from '../hooks/useVirtualScrollNew';\nimport { usePrefixClass } from '../hooks';\n\nexport default defineComponent({\n name: 'XEnhancedTable',\n\n props: {\n ...baseTableProps,\n ...primaryTableProps,\n ...enhancedTableProps,\n },\n\n setup(props: TdEnhancedTableProps, context: SetupContext) {\n const primaryTableRef = ref(null);\n const { store, dataSource, formatTreeColumn, swapData, ...treeInstanceFunctions } = useTreeData(props, context);\n const classPrefix = usePrefixClass();\n\n const treeDataMap = ref(store.value.treeDataMap);\n\n const { tIndeterminateSelectedRowKeys, onInnerSelectChange } = useTreeSelect(props, treeDataMap);\n\n // 影响列和单元格内容的因素有:树形节点需要添加操作符 [+] [-]\n const getColumns = (columns: PrimaryTableCol<TableRowData>[]) => {\n const arr: PrimaryTableCol<TableRowData>[] = [];\n for (let i = 0, len = columns.length; i < len; i++) {\n let item = { ...columns[i] };\n item = formatTreeColumn(item);\n if (item.children?.length) {\n item.children = getColumns(item.children);\n }\n // 多级表头和自定义列配置特殊逻辑:要么子节点不存在,要么子节点长度大于 1,方便做自定义列配置\n if (!item.children || item.children?.length) {\n arr.push(item);\n }\n }\n return arr;\n };\n\n const tColumns = computed(() => {\n // 暂时只有树形结构需要处理 column.cell\n const isTreeData = !props.tree || !Object.keys(props.tree).length;\n return isTreeData ? props.columns : getColumns(props.columns);\n });\n\n const onDragSortChange = (params: DragSortContext<TableRowData>) => {\n if (props.beforeDragSort && !props.beforeDragSort(params)) return;\n swapData({\n current: params.current,\n target: params.target,\n currentIndex: params.currentIndex,\n targetIndex: params.targetIndex,\n });\n props.onDragSort?.(params);\n };\n\n const onEnhancedTableRowClick: TdPrimaryTableProps['onRowClick'] = (p) => {\n if (props.tree?.expandTreeNodeOnClick) {\n treeInstanceFunctions.toggleExpandData(\n {\n row: p.row,\n rowIndex: p.index,\n },\n 'row-click',\n );\n }\n props.onRowClick?.(p);\n };\n\n context.expose({\n store: store.value,\n dataSource: dataSource.value,\n ...treeInstanceFunctions,\n primaryTableRef,\n validateRowData: (rowValue: any) => {\n return primaryTableRef.value.validateRowData(rowValue);\n },\n validateTableData: () => {\n return primaryTableRef.value.validateTableData();\n },\n clearValidateData: () => {\n primaryTableRef.value.clearValidateData();\n },\n refreshTable: () => {\n primaryTableRef.value.refreshTable();\n },\n scrollToElement: (data: ScrollToElementParams) => {\n primaryTableRef.value.scrollToElement(data);\n },\n });\n\n return () => {\n const { vnode } = getCurrentInstance();\n const enhancedProps: TdPrimaryTableProps = {\n ...vnode.props,\n rowKey: props.rowKey || 'id',\n data: dataSource.value,\n columns: tColumns.value,\n // 半选状态节点\n indeterminateSelectedRowKeys: tIndeterminateSelectedRowKeys.value,\n // 树形结构不允许本地数据分页\n disableDataPage: Boolean(props.tree && Object.keys(props.tree).length),\n onSelectChange: onInnerSelectChange,\n onDragSort: onDragSortChange,\n rowClassName: ({ row }) => {\n const rowValue = get(row, props.rowKey || 'id');\n const rowState = treeDataMap.value.get(rowValue);\n if (!rowState) return [props.rowClassName];\n return [`${classPrefix.value}-table-tr--level-${rowState.level}`, props.rowClassName];\n },\n };\n if (props.tree?.expandTreeNodeOnClick) {\n enhancedProps.onRowClick = onEnhancedTableRowClick;\n }\n // @ts-ignore ref 顺序很重要,如果移动到 v-slots 前面,会让 EnhancedTable 所有实例方法失效,勿动\n return <PrimaryTable v-slots={context.slots} {...enhancedProps} ref={primaryTableRef} />;\n };\n },\n});\n"],"names":["name","props","setup","treeInstanceFunctions","item","arr","swapData","context","primaryTableRef","validateRowData","scrollToElement","rowKey","disableDataPage","onSelectChange","onDragSort","rowClassName","_createVNode","PrimaryTable","_mergeProps"],"mappings":"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"}