@hkyhy/marsun-components-core 0.1.35 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Key,\n type ReactNode,\n} from 'react';\nimport { Button, Space, Table as AntTable, Tooltip } from 'antd';\nimport type { TableProps as AntTableProps } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n columnsToConfig,\n columnsToPanelItems,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport styles from './style.module.scss';\nimport gearStyles from './columnConfig.module.scss';\n\nexport type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };\nexport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 多级表头 title 注入眼睛;path 为 TableColumnConfigItem id 路径 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n ),\n } as ColumnType<RecordType>;\n }\n return { ...col, title: titleNode } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n */\nfunction Table<RecordType extends object = Record<string, unknown>>({\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n ...rest\n}: TableProps<RecordType>) {\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n if (!enableConfig) return base;\n return applyColumnConfig(base, savedConfig);\n }, [columns, enableConfig, savedConfig]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: items }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return dataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(dataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, dataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n };\n\n const mergedLocale = {\n emptyText: <Empty iconType=\"simple\" description=\"暂无数据\" />,\n ...locale,\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n return (\n <div className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n rowSelection={mergedRowSelection}\n {...rest}\n />\n </div>\n );\n}\n\nexport default Table;\n\nexport {\n columnsToConfig,\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n isInternalColumnKey,\n hideColumnAtPath,\n};\nexport {\n parseTablePrefs,\n serializeTablePrefs,\n mergeTablePrefs,\n applyHiddenRows,\n normalizeHiddenRowKeys,\n} from './tablePrefsUtils';\nexport { emptyTablePrefs } from './tablePrefsTypes';\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","injectHeaderHideEyes","onHidePath","parentFullKey","path","i","full","configId","shortChildId","nextPath","titleNode","jsxs","styles","jsx","Tooltip","e","Eye","Table","className","style","scroll","pagination","locale","dataSource","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","rest","enableConfig","defaultColumnsRef","useRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","useEffect","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","useMemo","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","mergeTablePrefs","handleHideColumnPath","columnsToConfig","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","cols","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","classNames","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","AntTable"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Key,\n type ReactNode,\n} from 'react';\nimport { Button, Space, Table as AntTable, Tooltip } from 'antd';\nimport type { TableProps as AntTableProps } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n columnsToConfig,\n columnsToPanelItems,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport styles from './style.module.scss';\nimport gearStyles from './columnConfig.module.scss';\n\nexport type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };\nexport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 一级组色带数量(与 SCSS headerGroup0..5 对齐) */\nconst HEADER_GROUP_PALETTE_SIZE = 6;\n\n/** 多级表头 title 注入眼睛;同色系按一级组,depth 加深浅 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n depth = 0,\n groupIndex?: number,\n): ColumnsType<RecordType> {\n let groupSeq = 0;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n /** 顶层有 children 的列为一级组,分配色带;固定列叶子不着色 */\n let gIdx = groupIndex;\n if (depth === 0) {\n gIdx = col.children?.length ? groupSeq++ : undefined;\n }\n\n const depthClass =\n gIdx == null\n ? undefined\n : depth === 0\n ? styles.headerDepth0\n : depth === 1\n ? styles.headerDepth1\n : styles.headerDepth2;\n const groupClass =\n gIdx == null ? undefined : styles[`headerGroup${gIdx % HEADER_GROUP_PALETTE_SIZE}`];\n\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n const mergeHeaderCell = (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n className: classNames((prev as { className?: string }).className, groupClass, depthClass),\n };\n };\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n depth + 1,\n gIdx,\n ),\n } as ColumnType<RecordType>;\n }\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n */\nfunction Table<RecordType extends object = Record<string, unknown>>({\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n ...rest\n}: TableProps<RecordType>) {\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n if (!enableConfig) return base;\n return applyColumnConfig(base, savedConfig);\n }, [columns, enableConfig, savedConfig]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: items }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return dataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(dataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, dataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n };\n\n const mergedLocale = {\n emptyText: <Empty iconType=\"simple\" description=\"暂无数据\" />,\n ...locale,\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n return (\n <div className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n rowSelection={mergedRowSelection}\n {...rest}\n />\n </div>\n );\n}\n\nexport default Table;\n\nexport {\n columnsToConfig,\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n isInternalColumnKey,\n hideColumnAtPath,\n};\nexport {\n parseTablePrefs,\n serializeTablePrefs,\n mergeTablePrefs,\n applyHiddenRows,\n normalizeHiddenRowKeys,\n} from './tablePrefsUtils';\nexport { emptyTablePrefs } from './tablePrefsTypes';\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","HEADER_GROUP_PALETTE_SIZE","injectHeaderHideEyes","onHidePath","parentFullKey","path","depth","groupIndex","groupSeq","i","full","configId","shortChildId","nextPath","prevOnHeaderCell","gIdx","depthClass","styles","groupClass","titleNode","jsxs","jsx","Tooltip","e","Eye","mergeHeaderCell","c","prev","classNames","_b","Table","className","style","scroll","pagination","locale","dataSource","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","rest","enableConfig","defaultColumnsRef","useRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","useEffect","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","useMemo","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","mergeTablePrefs","handleHideColumnPath","columnsToConfig","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","cols","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","AntTable"],"mappings":"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"}
@@ -1,146 +1,146 @@
1
- const S = "__marsun_column_config", x = "__marsun_flex_spacer";
2
- function g(n, e) {
1
+ const S = "__marsun_column_config", k = "__marsun_flex_spacer";
2
+ function p(n, e) {
3
3
  return n.key != null && String(n.key) !== "" ? String(n.key) : n.dataIndex != null ? Array.isArray(n.dataIndex) ? n.dataIndex.join(".") : String(n.dataIndex) : `__col_${e}`;
4
4
  }
5
- function A(n) {
6
- return n === S || n === x || n.startsWith("__marsun_");
5
+ function w(n) {
6
+ return n === S || n === k || n.startsWith("__marsun_");
7
7
  }
8
- function y(n, e) {
9
- return A(g(n, e));
8
+ function b(n, e) {
9
+ return w(p(n, e));
10
10
  }
11
11
  function C(n, e) {
12
- const d = `${n}_`;
13
- return e.startsWith(d) ? e.slice(d.length) : e;
12
+ const l = `${n}_`;
13
+ return e.startsWith(l) ? e.slice(l.length) : e;
14
14
  }
15
- function E(n) {
15
+ function A(n) {
16
16
  return n == null ? "" : typeof n == "string" || typeof n == "number" ? String(n) : "";
17
17
  }
18
- function H(n, e) {
19
- return n != null && n.length ? n.map((d, i) => {
20
- var u;
21
- if (y(d, i)) return null;
22
- const r = g(d, i), l = e ? C(e, r) : r, t = (u = d.children) != null && u.length ? H(d.children, r) : void 0;
23
- return t != null && t.length ? { id: l, children: t } : { id: l };
18
+ function E(n, e) {
19
+ return n != null && n.length ? n.map((l, i) => {
20
+ var o;
21
+ if (b(l, i)) return null;
22
+ const r = p(l, i), h = e ? C(e, r) : r, t = (o = l.children) != null && o.length ? E(l.children, r) : void 0;
23
+ return t != null && t.length ? { id: h, children: t } : { id: h };
24
24
  }).filter(Boolean) : [];
25
25
  }
26
- function L(n, e, d) {
26
+ function L(n, e, l) {
27
27
  return n != null && n.length ? n.map((i, r) => {
28
- var h;
29
- if (y(i, r)) return null;
30
- const l = g(i, r), t = d ? C(d, l) : l, u = E(i.title) || t, o = (h = i.children) != null && h.length ? L(i.children, e, l) : void 0, p = !!((o == null ? void 0 : o.length) && o.every((s) => s.hidden || !1));
28
+ var d;
29
+ if (b(i, r)) return null;
30
+ const h = p(i, r), t = l ? C(l, h) : h, o = A(i.title) || t, u = (d = i.children) != null && d.length ? L(i.children, e, h) : void 0, s = !!((u == null ? void 0 : u.length) && u.every((f) => f.hidden || !1));
31
31
  return {
32
32
  id: t,
33
33
  title: i.title,
34
- label: u,
35
- hidden: !!p,
36
- children: o
34
+ label: o,
35
+ hidden: !!s,
36
+ children: u
37
37
  };
38
38
  }).filter(Boolean) : [];
39
39
  }
40
- function b(n) {
40
+ function v(n) {
41
41
  var e;
42
- return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(b));
42
+ return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(v));
43
43
  }
44
- function k(n, e) {
44
+ function P(n, e) {
45
45
  return (n.children || []).find((i, r) => {
46
- const l = g(i, r), t = g(n, 0);
47
- return C(String(n.key ?? ""), l) === e || C(t, l) === e || l === e || l.endsWith(`_${e}`);
46
+ const h = p(i, r), t = p(n, 0);
47
+ return C(String(n.key ?? ""), h) === e || C(t, h) === e || h === e || h.endsWith(`_${e}`);
48
48
  });
49
49
  }
50
- function P(n, e) {
50
+ function O(n, e) {
51
51
  if (!(n != null && n.length)) return n || [];
52
52
  if (!(e != null && e.length)) return n;
53
- const d = /* @__PURE__ */ new Map();
54
- n.forEach((r, l) => {
55
- d.set(g(r, l), r);
53
+ const l = /* @__PURE__ */ new Map();
54
+ n.forEach((r, h) => {
55
+ l.set(p(r, h), r);
56
56
  });
57
- const i = (r, l, t) => {
58
- var c, p;
59
- const u = [], o = /* @__PURE__ */ new Set();
60
- for (const h of r) {
61
- if (b(h)) {
62
- o.add(h.id);
57
+ const i = (r, h, t) => {
58
+ var a, s;
59
+ const o = [], u = /* @__PURE__ */ new Set();
60
+ for (const d of r) {
61
+ if (v(d)) {
62
+ u.add(d.id);
63
63
  continue;
64
64
  }
65
- let s;
66
- if (t ? s = k(t, h.id) : s = d.get(h.id), !!s)
67
- if (o.add(h.id), (c = h.children) != null && c.length && ((p = s.children) != null && p.length)) {
68
- const a = i(h.children, s.children, s);
69
- if (!a.length) continue;
70
- u.push({ ...s, children: a });
65
+ let f;
66
+ if (t ? f = P(t, d.id) : f = l.get(d.id), !!f)
67
+ if (u.add(d.id), (a = d.children) != null && a.length && ((s = f.children) != null && s.length)) {
68
+ const g = i(d.children, f.children, f);
69
+ if (!g.length) continue;
70
+ o.push({ ...f, children: g });
71
71
  } else {
72
- const a = { ...s };
73
- h.children, u.push(a);
72
+ const g = { ...f };
73
+ d.children, o.push(g);
74
74
  }
75
75
  }
76
- return l.forEach((h, s) => {
77
- const a = g(h, s), f = t ? C(String(t.key ?? g(t, 0)), a) : a;
78
- !o.has(f) && !o.has(a) && u.push(h);
79
- }), u;
76
+ return h.forEach((d, f) => {
77
+ const g = p(d, f), y = t ? C(String(t.key ?? p(t, 0)), g) : g;
78
+ !u.has(y) && !u.has(g) && o.push(d);
79
+ }), o;
80
80
  };
81
81
  return i(e, n);
82
82
  }
83
83
  function m(n) {
84
84
  return n.map((e) => {
85
85
  var r;
86
- const d = (r = e.children) != null && r.length ? m(e.children) : void 0, i = { id: e.id };
87
- return e.hidden && (i.hidden = !0), d != null && d.length && (i.children = d), i;
86
+ const l = (r = e.children) != null && r.length ? m(e.children) : void 0, i = { id: e.id };
87
+ return e.hidden && (i.hidden = !0), l != null && l.length && (i.children = l), i;
88
88
  });
89
89
  }
90
- function w(n, e) {
90
+ function M(n, e) {
91
91
  if (!e.length) return n;
92
- const [d, ...i] = e;
92
+ const [l, ...i] = e;
93
93
  return n.map((r) => {
94
- var u;
95
- if (r.id !== d) return r;
94
+ var o;
95
+ if (r.id !== l) return r;
96
96
  if (!i.length)
97
- return v(r);
98
- const l = (u = r.children) != null && u.length ? w(r.children, i) : r.children, t = l != null && l.length ? l.every(I) : r.hidden;
99
- return { ...r, children: l, hidden: t || r.hidden };
97
+ return I(r);
98
+ const h = (o = r.children) != null && o.length ? M(r.children, i) : r.children, t = h != null && h.length ? h.every(x) : r.hidden;
99
+ return { ...r, children: h, hidden: t || r.hidden };
100
100
  });
101
101
  }
102
- function v(n) {
102
+ function I(n) {
103
103
  var e;
104
104
  return {
105
105
  ...n,
106
106
  hidden: !0,
107
- children: (e = n.children) == null ? void 0 : e.map(v)
107
+ children: (e = n.children) == null ? void 0 : e.map(I)
108
108
  };
109
109
  }
110
- function I(n) {
110
+ function x(n) {
111
111
  var e;
112
- return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(I));
112
+ return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(x));
113
113
  }
114
- function M(n, e) {
114
+ function T(n, e) {
115
115
  if (!(e != null && e.length)) return n.map(_);
116
- const d = new Map(n.map((t) => [t.id, t])), i = /* @__PURE__ */ new Set(), r = (t, u) => {
117
- var a;
118
- const o = u || d.get(t.id);
119
- if (!o) return null;
116
+ const l = new Map(n.map((t) => [t.id, t])), i = /* @__PURE__ */ new Set(), r = (t, o) => {
117
+ var y;
118
+ const u = o || l.get(t.id);
119
+ if (!u) return null;
120
120
  i.add(t.id);
121
- const c = o.children || [], p = new Map(c.map((f) => [f.id, f]));
122
- let h;
123
- if ((a = t.children) != null && a.length) {
124
- h = t.children.map((f) => r(f, p.get(f.id))).filter(Boolean);
125
- for (const f of c)
126
- t.children.some((B) => B.id === f.id) || h.push(_(f));
127
- } else c.length && (h = c.map(_));
128
- const s = !!t.hidden || !!(h != null && h.length && h.every((f) => f.hidden));
121
+ const a = u.children || [], s = new Map(a.map((c) => [c.id, c]));
122
+ let d;
123
+ if ((y = t.children) != null && y.length) {
124
+ d = t.children.map((c) => r(c, s.get(c.id))).filter(Boolean);
125
+ for (const c of a)
126
+ t.children.some((H) => H.id === c.id) || d.push(_(c));
127
+ } else a.length && (d = a.map(_));
128
+ const f = !!t.hidden || !!(d != null && d.length && d.every((c) => c.hidden)), g = f && (d != null && d.length) ? d.map((c) => B(c, !0)) : d;
129
129
  return {
130
- id: o.id,
131
- title: o.title,
132
- label: o.label,
133
- hidden: s,
134
- children: h
130
+ id: u.id,
131
+ title: u.title,
132
+ label: u.label,
133
+ hidden: f,
134
+ children: g
135
135
  };
136
- }, l = [];
136
+ }, h = [];
137
137
  for (const t of e) {
138
- const u = r(t);
139
- u && l.push(u);
138
+ const o = r(t);
139
+ o && h.push(o);
140
140
  }
141
141
  for (const t of n)
142
- i.has(t.id) || l.push(_(t));
143
- return l;
142
+ i.has(t.id) || h.push(_(t));
143
+ return h;
144
144
  }
145
145
  function _(n) {
146
146
  var e;
@@ -149,23 +149,47 @@ function _(n) {
149
149
  children: (e = n.children) == null ? void 0 : e.map(_)
150
150
  };
151
151
  }
152
- function O(n) {
153
- const e = [], d = [];
154
- for (const i of n)
155
- i.hidden ? d.push(i) : e.push(i);
156
- return { visible: e, hidden: d };
152
+ function B(n, e) {
153
+ var l;
154
+ return {
155
+ ...n,
156
+ hidden: e,
157
+ children: (l = n.children) == null ? void 0 : l.map((i) => B(i, e))
158
+ };
159
+ }
160
+ function W(n) {
161
+ var h;
162
+ const e = n.filter((t) => !t.hidden), l = n.filter((t) => t.hidden), i = [], r = (t, o) => {
163
+ var u, a;
164
+ for (const s of t) {
165
+ if (s.hidden) {
166
+ const d = [...o, s.label || s.id].join(" / ");
167
+ i.push({
168
+ ...s,
169
+ label: d,
170
+ // 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项
171
+ children: (u = s.children) != null && u.length ? s.children : void 0
172
+ });
173
+ continue;
174
+ }
175
+ (a = s.children) != null && a.length && r(s.children, [...o, s.label || s.id]);
176
+ }
177
+ };
178
+ for (const t of e)
179
+ (h = t.children) != null && h.length && r(t.children, [t.label || t.id]);
180
+ return { visible: e, hidden: [...l, ...i] };
157
181
  }
158
182
  export {
159
183
  S as COLUMN_CONFIG_COL_KEY,
160
- x as FLEX_SPACER_COL_KEY,
161
- P as applyColumnConfig,
162
- H as columnsToConfig,
184
+ k as FLEX_SPACER_COL_KEY,
185
+ O as applyColumnConfig,
186
+ E as columnsToConfig,
163
187
  L as columnsToPanelItems,
164
- w as hideColumnAtPath,
165
- A as isInternalColumnKey,
166
- M as mergePanelWithConfig,
188
+ M as hideColumnAtPath,
189
+ w as isInternalColumnKey,
190
+ T as mergePanelWithConfig,
167
191
  m as panelItemsToConfig,
168
192
  C as shortChildId,
169
- O as splitVisibleHidden
193
+ W as splitVisibleHidden
170
194
  };
171
195
  //# sourceMappingURL=columnConfigUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnConfigUtils.js","sources":["../../../src/components/Table/columnConfigUtils.ts"],"sourcesContent":["import type { ColumnsType } from 'antd/es/table';\nimport type {\n ColumnConfigPanelItem,\n ColumnTypeAny,\n TableColumnConfigItem,\n} from './columnConfigTypes';\n\nexport type { ColumnTypeAny };\n/** 列配置齿轮列 key;不进面板 / 持久化 */\nexport const COLUMN_CONFIG_COL_KEY = '__marsun_column_config';\n/** 弹性占位列:吃掉表宽多余空间,避免固定列被撑开;不进面板 / 持久化 */\nexport const FLEX_SPACER_COL_KEY = '__marsun_flex_spacer';\n\nfunction colKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\n/** 内部列(齿轮 / 弹性占位等):不进列配置面板与持久化 */\nexport function isInternalColumnKey(key: string): boolean {\n return (\n key === COLUMN_CONFIG_COL_KEY || key === FLEX_SPACER_COL_KEY || key.startsWith('__marsun_')\n );\n}\n\nfunction isInternalCol(col: ColumnTypeAny, index: number): boolean {\n return isInternalColumnKey(colKey(col, index));\n}\n\n/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */\nexport function shortChildId(parentId: string, childKey: string): string {\n const prefix = `${parentId}_`;\n if (childKey.startsWith(prefix)) return childKey.slice(prefix.length);\n return childKey;\n}\n\nfunction titleToLabel(title: unknown): string {\n if (title == null) return '';\n if (typeof title === 'string' || typeof title === 'number') return String(title);\n return '';\n}\n\n/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */\nexport function columnsToConfig(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentId?: string,\n): TableColumnConfigItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const children = col.children?.length\n ? columnsToConfig(col.children as ColumnsType<Record<string, unknown>>, full)\n : undefined;\n return children?.length ? { id, children } : { id };\n })\n .filter(Boolean) as TableColumnConfigItem[];\n}\n\n/** columns → 面板树(含 title 文案);子 id 用短名与持久化一致 */\nexport function columnsToPanelItems(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n hiddenIds?: Set<string>,\n parentId?: string,\n): ColumnConfigPanelItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const label = titleToLabel(col.title) || id;\n const children = col.children?.length\n ? columnsToPanelItems(col.children as ColumnsType<Record<string, unknown>>, hiddenIds, full)\n : undefined;\n const childAllHidden =\n children?.length && children.every((c) => c.hidden || (hiddenIds?.has(c.id) ?? false));\n const hidden = hiddenIds?.has(id) || Boolean(childAllHidden);\n return {\n id,\n title: col.title,\n label,\n hidden: Boolean(hidden),\n children,\n };\n })\n .filter(Boolean) as ColumnConfigPanelItem[];\n}\n\nfunction isHiddenItem(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isHiddenItem)) return true;\n return false;\n}\n\nfunction findChildCol(parent: ColumnTypeAny, childId: string): ColumnTypeAny | undefined {\n const kids = (parent.children || []) as ColumnTypeAny[];\n return kids.find((c, i) => {\n const full = colKey(c, i);\n const parentFull = colKey(parent, 0);\n // parent key 可能与 map 不一致,用 shortChildId 对每个可能的 parent key\n return (\n shortChildId(String(parent.key ?? ''), full) === childId ||\n shortChildId(parentFull, full) === childId ||\n full === childId ||\n full.endsWith(`_${childId}`)\n );\n });\n}\n\n/** 按配置重排列并过滤 hidden;子列相对父列解析 */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\n\n const topById = new Map<string, ColumnTypeAny>();\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n topById.set(colKey(col, i), col);\n });\n\n const buildLevel = (\n items: TableColumnConfigItem[],\n sourceCols: ColumnTypeAny[],\n parent?: ColumnTypeAny,\n ): ColumnTypeAny[] => {\n const out: ColumnTypeAny[] = [];\n const used = new Set<string>();\n\n for (const item of items) {\n if (isHiddenItem(item)) {\n used.add(item.id);\n continue;\n }\n let src: ColumnTypeAny | undefined;\n if (parent) {\n src = findChildCol(parent, item.id);\n } else {\n src = topById.get(item.id);\n }\n if (!src) continue;\n used.add(item.id);\n\n if (item.children?.length && src.children?.length) {\n const childCols = buildLevel(item.children, src.children as ColumnTypeAny[], src);\n if (!childCols.length) continue;\n out.push({ ...src, children: childCols as ColumnsType<Record<string, unknown>> });\n } else {\n const next = { ...src };\n if (!item.children) {\n // keep children as-is when config leaf but source has group — strip if short ids only\n }\n out.push(next);\n }\n }\n\n // 配置未覆盖的同级列追加末尾\n sourceCols.forEach((col, i) => {\n const full = colKey(col, i);\n const id = parent ? shortChildId(String(parent.key ?? colKey(parent, 0)), full) : full;\n if (!used.has(id) && !used.has(full)) {\n out.push(col);\n }\n });\n\n return out;\n };\n\n return buildLevel(config, columns as ColumnTypeAny[]) as ColumnsType<RecordType>;\n}\n\n/** 找最右可见叶子列路径(用于挂齿轮) */\nexport function findRightmostLeafPath(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n): number[] | null {\n if (!columns?.length) return null;\n const cols = columns as ColumnTypeAny[];\n const last = cols.length - 1;\n const col = cols[last];\n if (!col) return null;\n if (col.children?.length) {\n const sub = findRightmostLeafPath(col.children as ColumnsType<Record<string, unknown>>);\n if (!sub) return [last];\n return [last, ...sub];\n }\n return [last];\n}\n\nexport function getColumnFixed(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n path: number[],\n): 'left' | 'right' | boolean | undefined {\n let cur: ColumnTypeAny[] | undefined = columns as ColumnTypeAny[] | undefined;\n let fixed: 'left' | 'right' | boolean | undefined;\n for (const idx of path) {\n if (!cur?.[idx]) return fixed;\n fixed = cur[idx].fixed ?? fixed;\n cur = cur[idx].children as ColumnTypeAny[] | undefined;\n }\n return fixed;\n}\n\n/** 在指定 path 的叶子 title 上注入节点 */\nexport function injectTitleAtPath<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n path: number[],\n inject: (originalTitle: unknown) => unknown,\n): ColumnsType<RecordType> {\n if (!path.length) return columns;\n const clone = (columns as ColumnTypeAny[]).map((c) => ({ ...c }));\n let cur = clone;\n for (let i = 0; i < path.length; i++) {\n const idx = path[i]!;\n const prev = cur[idx];\n if (!prev) return columns;\n const col = { ...prev };\n cur[idx] = col;\n if (i === path.length - 1) {\n col.title = inject(col.title) as ColumnTypeAny['title'];\n } else if (col.children) {\n col.children = (col.children as ColumnTypeAny[]).map((c) => ({ ...c }));\n cur = col.children as ColumnTypeAny[];\n }\n }\n return clone as ColumnsType<RecordType>;\n}\n\n/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */\nexport function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[] {\n return items.map((it) => {\n const children = it.children?.length ? panelItemsToConfig(it.children) : undefined;\n const base: TableColumnConfigItem = { id: it.id };\n if (it.hidden) base.hidden = true;\n if (children?.length) base.children = children;\n return base;\n });\n}\n\n/** 按配置路径隐藏节点(含子树) */\nexport function hideColumnAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n return items.map((it) => {\n if (it.id !== head) return it;\n if (!rest.length) {\n return hideConfigDeep(it);\n }\n const children = it.children?.length ? hideColumnAtPath(it.children, rest) : it.children;\n const allHidden = children?.length ? children.every(isConfigHidden) : it.hidden;\n return { ...it, children, hidden: allHidden || it.hidden };\n });\n}\n\nfunction hideConfigDeep(item: TableColumnConfigItem): TableColumnConfigItem {\n return {\n ...item,\n hidden: true,\n children: item.children?.map(hideConfigDeep),\n };\n}\n\nfunction isConfigHidden(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isConfigHidden)) return true;\n return false;\n}\n\n/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */\nexport function mergePanelWithConfig(\n defaults: ColumnConfigPanelItem[],\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnConfigPanelItem[] {\n if (!config?.length) return defaults.map(clonePanel);\n\n const byId = new Map(defaults.map((d) => [d.id, d]));\n const used = new Set<string>();\n\n const mapItem = (\n cfg: TableColumnConfigItem,\n fallback?: ColumnConfigPanelItem,\n ): ColumnConfigPanelItem | null => {\n const src = fallback || byId.get(cfg.id);\n if (!src) return null;\n used.add(cfg.id);\n const childDefaults = src.children || [];\n const childById = new Map(childDefaults.map((c) => [c.id, c]));\n let children: ColumnConfigPanelItem[] | undefined;\n if (cfg.children?.length) {\n children = cfg.children\n .map((c) => mapItem(c, childById.get(c.id)))\n .filter(Boolean) as ColumnConfigPanelItem[];\n for (const cd of childDefaults) {\n if (!cfg.children.some((c) => c.id === cd.id)) {\n children.push(clonePanel(cd));\n }\n }\n } else if (childDefaults.length) {\n children = childDefaults.map(clonePanel);\n }\n const hidden =\n Boolean(cfg.hidden) || Boolean(children?.length && children.every((c) => c.hidden));\n return {\n id: src.id,\n title: src.title,\n label: src.label,\n hidden,\n children,\n };\n };\n\n const ordered: ColumnConfigPanelItem[] = [];\n for (const cfg of config) {\n const mapped = mapItem(cfg);\n if (mapped) ordered.push(mapped);\n }\n for (const d of defaults) {\n if (!used.has(d.id)) ordered.push(clonePanel(d));\n }\n return ordered;\n}\n\nfunction clonePanel(item: ColumnConfigPanelItem): ColumnConfigPanelItem {\n return {\n ...item,\n children: item.children?.map(clonePanel),\n };\n}\n\nexport function splitVisibleHidden(items: ColumnConfigPanelItem[]): {\n visible: ColumnConfigPanelItem[];\n hidden: ColumnConfigPanelItem[];\n} {\n const visible: ColumnConfigPanelItem[] = [];\n const hidden: ColumnConfigPanelItem[] = [];\n for (const it of items) {\n if (it.hidden) hidden.push(it);\n else visible.push(it);\n }\n return { visible, hidden };\n}\n"],"names":["COLUMN_CONFIG_COL_KEY","FLEX_SPACER_COL_KEY","colKey","col","index","isInternalColumnKey","key","isInternalCol","shortChildId","parentId","childKey","prefix","titleToLabel","title","columnsToConfig","columns","_a","full","id","children","columnsToPanelItems","hiddenIds","i","label","hidden","c","isHiddenItem","item","findChildCol","parent","childId","parentFull","applyColumnConfig","config","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","panelItemsToConfig","it","base","hideColumnAtPath","path","head","rest","hideConfigDeep","allHidden","isConfigHidden","mergePanelWithConfig","defaults","clonePanel","byId","d","mapItem","cfg","fallback","childDefaults","childById","cd","ordered","mapped","splitVisibleHidden","visible"],"mappings":"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"}
1
+ {"version":3,"file":"columnConfigUtils.js","sources":["../../../src/components/Table/columnConfigUtils.ts"],"sourcesContent":["import type { ColumnsType } from 'antd/es/table';\nimport type {\n ColumnConfigPanelItem,\n ColumnTypeAny,\n TableColumnConfigItem,\n} from './columnConfigTypes';\n\nexport type { ColumnTypeAny };\n/** 列配置齿轮列 key;不进面板 / 持久化 */\nexport const COLUMN_CONFIG_COL_KEY = '__marsun_column_config';\n/** 弹性占位列:吃掉表宽多余空间,避免固定列被撑开;不进面板 / 持久化 */\nexport const FLEX_SPACER_COL_KEY = '__marsun_flex_spacer';\n\nfunction colKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\n/** 内部列(齿轮 / 弹性占位等):不进列配置面板与持久化 */\nexport function isInternalColumnKey(key: string): boolean {\n return (\n key === COLUMN_CONFIG_COL_KEY || key === FLEX_SPACER_COL_KEY || key.startsWith('__marsun_')\n );\n}\n\nfunction isInternalCol(col: ColumnTypeAny, index: number): boolean {\n return isInternalColumnKey(colKey(col, index));\n}\n\n/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */\nexport function shortChildId(parentId: string, childKey: string): string {\n const prefix = `${parentId}_`;\n if (childKey.startsWith(prefix)) return childKey.slice(prefix.length);\n return childKey;\n}\n\nfunction titleToLabel(title: unknown): string {\n if (title == null) return '';\n if (typeof title === 'string' || typeof title === 'number') return String(title);\n return '';\n}\n\n/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */\nexport function columnsToConfig(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentId?: string,\n): TableColumnConfigItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const children = col.children?.length\n ? columnsToConfig(col.children as ColumnsType<Record<string, unknown>>, full)\n : undefined;\n return children?.length ? { id, children } : { id };\n })\n .filter(Boolean) as TableColumnConfigItem[];\n}\n\n/** columns → 面板树(含 title 文案);子 id 用短名与持久化一致 */\nexport function columnsToPanelItems(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n hiddenIds?: Set<string>,\n parentId?: string,\n): ColumnConfigPanelItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const label = titleToLabel(col.title) || id;\n const children = col.children?.length\n ? columnsToPanelItems(col.children as ColumnsType<Record<string, unknown>>, hiddenIds, full)\n : undefined;\n const childAllHidden =\n children?.length && children.every((c) => c.hidden || (hiddenIds?.has(c.id) ?? false));\n const hidden = hiddenIds?.has(id) || Boolean(childAllHidden);\n return {\n id,\n title: col.title,\n label,\n hidden: Boolean(hidden),\n children,\n };\n })\n .filter(Boolean) as ColumnConfigPanelItem[];\n}\n\nfunction isHiddenItem(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isHiddenItem)) return true;\n return false;\n}\n\nfunction findChildCol(parent: ColumnTypeAny, childId: string): ColumnTypeAny | undefined {\n const kids = (parent.children || []) as ColumnTypeAny[];\n return kids.find((c, i) => {\n const full = colKey(c, i);\n const parentFull = colKey(parent, 0);\n // parent key 可能与 map 不一致,用 shortChildId 对每个可能的 parent key\n return (\n shortChildId(String(parent.key ?? ''), full) === childId ||\n shortChildId(parentFull, full) === childId ||\n full === childId ||\n full.endsWith(`_${childId}`)\n );\n });\n}\n\n/** 按配置重排列并过滤 hidden;子列相对父列解析 */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\n\n const topById = new Map<string, ColumnTypeAny>();\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n topById.set(colKey(col, i), col);\n });\n\n const buildLevel = (\n items: TableColumnConfigItem[],\n sourceCols: ColumnTypeAny[],\n parent?: ColumnTypeAny,\n ): ColumnTypeAny[] => {\n const out: ColumnTypeAny[] = [];\n const used = new Set<string>();\n\n for (const item of items) {\n if (isHiddenItem(item)) {\n used.add(item.id);\n continue;\n }\n let src: ColumnTypeAny | undefined;\n if (parent) {\n src = findChildCol(parent, item.id);\n } else {\n src = topById.get(item.id);\n }\n if (!src) continue;\n used.add(item.id);\n\n if (item.children?.length && src.children?.length) {\n const childCols = buildLevel(item.children, src.children as ColumnTypeAny[], src);\n if (!childCols.length) continue;\n out.push({ ...src, children: childCols as ColumnsType<Record<string, unknown>> });\n } else {\n const next = { ...src };\n if (!item.children) {\n // keep children as-is when config leaf but source has group — strip if short ids only\n }\n out.push(next);\n }\n }\n\n // 配置未覆盖的同级列追加末尾\n sourceCols.forEach((col, i) => {\n const full = colKey(col, i);\n const id = parent ? shortChildId(String(parent.key ?? colKey(parent, 0)), full) : full;\n if (!used.has(id) && !used.has(full)) {\n out.push(col);\n }\n });\n\n return out;\n };\n\n return buildLevel(config, columns as ColumnTypeAny[]) as ColumnsType<RecordType>;\n}\n\n/** 找最右可见叶子列路径(用于挂齿轮) */\nexport function findRightmostLeafPath(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n): number[] | null {\n if (!columns?.length) return null;\n const cols = columns as ColumnTypeAny[];\n const last = cols.length - 1;\n const col = cols[last];\n if (!col) return null;\n if (col.children?.length) {\n const sub = findRightmostLeafPath(col.children as ColumnsType<Record<string, unknown>>);\n if (!sub) return [last];\n return [last, ...sub];\n }\n return [last];\n}\n\nexport function getColumnFixed(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n path: number[],\n): 'left' | 'right' | boolean | undefined {\n let cur: ColumnTypeAny[] | undefined = columns as ColumnTypeAny[] | undefined;\n let fixed: 'left' | 'right' | boolean | undefined;\n for (const idx of path) {\n if (!cur?.[idx]) return fixed;\n fixed = cur[idx].fixed ?? fixed;\n cur = cur[idx].children as ColumnTypeAny[] | undefined;\n }\n return fixed;\n}\n\n/** 在指定 path 的叶子 title 上注入节点 */\nexport function injectTitleAtPath<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n path: number[],\n inject: (originalTitle: unknown) => unknown,\n): ColumnsType<RecordType> {\n if (!path.length) return columns;\n const clone = (columns as ColumnTypeAny[]).map((c) => ({ ...c }));\n let cur = clone;\n for (let i = 0; i < path.length; i++) {\n const idx = path[i]!;\n const prev = cur[idx];\n if (!prev) return columns;\n const col = { ...prev };\n cur[idx] = col;\n if (i === path.length - 1) {\n col.title = inject(col.title) as ColumnTypeAny['title'];\n } else if (col.children) {\n col.children = (col.children as ColumnTypeAny[]).map((c) => ({ ...c }));\n cur = col.children as ColumnTypeAny[];\n }\n }\n return clone as ColumnsType<RecordType>;\n}\n\n/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */\nexport function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[] {\n return items.map((it) => {\n const children = it.children?.length ? panelItemsToConfig(it.children) : undefined;\n const base: TableColumnConfigItem = { id: it.id };\n if (it.hidden) base.hidden = true;\n if (children?.length) base.children = children;\n return base;\n });\n}\n\n/** 按配置路径隐藏节点(含子树) */\nexport function hideColumnAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n return items.map((it) => {\n if (it.id !== head) return it;\n if (!rest.length) {\n return hideConfigDeep(it);\n }\n const children = it.children?.length ? hideColumnAtPath(it.children, rest) : it.children;\n const allHidden = children?.length ? children.every(isConfigHidden) : it.hidden;\n return { ...it, children, hidden: allHidden || it.hidden };\n });\n}\n\nfunction hideConfigDeep(item: TableColumnConfigItem): TableColumnConfigItem {\n return {\n ...item,\n hidden: true,\n children: item.children?.map(hideConfigDeep),\n };\n}\n\nfunction isConfigHidden(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isConfigHidden)) return true;\n return false;\n}\n\n/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */\nexport function mergePanelWithConfig(\n defaults: ColumnConfigPanelItem[],\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnConfigPanelItem[] {\n if (!config?.length) return defaults.map(clonePanel);\n\n const byId = new Map(defaults.map((d) => [d.id, d]));\n const used = new Set<string>();\n\n const mapItem = (\n cfg: TableColumnConfigItem,\n fallback?: ColumnConfigPanelItem,\n ): ColumnConfigPanelItem | null => {\n const src = fallback || byId.get(cfg.id);\n if (!src) return null;\n used.add(cfg.id);\n const childDefaults = src.children || [];\n const childById = new Map(childDefaults.map((c) => [c.id, c]));\n let children: ColumnConfigPanelItem[] | undefined;\n if (cfg.children?.length) {\n children = cfg.children\n .map((c) => mapItem(c, childById.get(c.id)))\n .filter(Boolean) as ColumnConfigPanelItem[];\n for (const cd of childDefaults) {\n if (!cfg.children.some((c) => c.id === cd.id)) {\n children.push(clonePanel(cd));\n }\n }\n } else if (childDefaults.length) {\n children = childDefaults.map(clonePanel);\n }\n const hidden =\n Boolean(cfg.hidden) || Boolean(children?.length && children.every((c) => c.hidden));\n // 父 hidden 时级联子树,避免「父隐子显」的脏持久化态\n const nextChildren =\n hidden && children?.length ? children.map((c) => cascadePanelHidden(c, true)) : children;\n return {\n id: src.id,\n title: src.title,\n label: src.label,\n hidden,\n children: nextChildren,\n };\n };\n\n const ordered: ColumnConfigPanelItem[] = [];\n for (const cfg of config) {\n const mapped = mapItem(cfg);\n if (mapped) ordered.push(mapped);\n }\n for (const d of defaults) {\n if (!used.has(d.id)) ordered.push(clonePanel(d));\n }\n return ordered;\n}\n\nfunction clonePanel(item: ColumnConfigPanelItem): ColumnConfigPanelItem {\n return {\n ...item,\n children: item.children?.map(clonePanel),\n };\n}\n\n/** 面板项整棵子树打 hidden(加载已存 config 时与 toggle 级联对齐) */\nfunction cascadePanelHidden(item: ColumnConfigPanelItem, hidden: boolean): ColumnConfigPanelItem {\n return {\n ...item,\n hidden,\n children: item.children?.map((c) => cascadePanelHidden(c, hidden)),\n };\n}\n\nexport function splitVisibleHidden(items: ColumnConfigPanelItem[]): {\n visible: ColumnConfigPanelItem[];\n hidden: ColumnConfigPanelItem[];\n} {\n const visible = items.filter((it) => !it.hidden);\n const topHidden = items.filter((it) => it.hidden);\n const nestedHidden: ColumnConfigPanelItem[] = [];\n\n const walk = (nodes: ColumnConfigPanelItem[], pathLabels: string[]) => {\n for (const it of nodes) {\n if (it.hidden) {\n const pathLabel = [...pathLabels, it.label || it.id].join(' / ');\n nestedHidden.push({\n ...it,\n label: pathLabel,\n // 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项\n children: it.children?.length ? it.children : undefined,\n });\n continue;\n }\n if (it.children?.length) {\n walk(it.children, [...pathLabels, it.label || it.id]);\n }\n }\n };\n\n // 仅从「仍显示的顶层」往下收二/三级隐藏项(顶层整棵隐藏已在 topHidden)\n for (const top of visible) {\n if (top.children?.length) {\n walk(top.children, [top.label || top.id]);\n }\n }\n\n return { visible, hidden: [...topHidden, ...nestedHidden] };\n}\n"],"names":["COLUMN_CONFIG_COL_KEY","FLEX_SPACER_COL_KEY","colKey","col","index","isInternalColumnKey","key","isInternalCol","shortChildId","parentId","childKey","prefix","titleToLabel","title","columnsToConfig","columns","_a","full","id","children","columnsToPanelItems","hiddenIds","i","label","hidden","c","isHiddenItem","item","findChildCol","parent","childId","parentFull","applyColumnConfig","config","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","panelItemsToConfig","it","base","hideColumnAtPath","path","head","rest","hideConfigDeep","allHidden","isConfigHidden","mergePanelWithConfig","defaults","clonePanel","byId","d","mapItem","cfg","fallback","childDefaults","childById","cd","nextChildren","cascadePanelHidden","ordered","mapped","splitVisibleHidden","visible","topHidden","nestedHidden","walk","nodes","pathLabels","pathLabel","top"],"mappings":"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"}
@@ -1,20 +1,38 @@
1
- const e = "_headerEyeBtn_1plg0_114", t = "_rowEyeBtn_1plg0_115", l = "_headerTitleWithEye_1plg0_121", a = "_headerTitleText_1plg0_131", r = "_rowSelectWithEye_1plg0_186", _ = {
2
- "marsun-table-shell": "_marsun-table-shell_1plg0_2",
3
- "marsun-table-toolbar": "_marsun-table-toolbar_1plg0_9",
4
- "marsun-table-row-config": "_marsun-table-row-config_1plg0_15",
5
- "marsun-table": "_marsun-table_1plg0_2",
1
+ const e = "_headerEyeBtn_1vchc_114", r = "_rowEyeBtn_1vchc_115", h = "_headerTitleWithEye_1vchc_121", t = "_headerTitleText_1vchc_131", a = "_headerDepth0_1vchc_142", c = "_headerDepth1_1vchc_146", _ = "_headerDepth2_1vchc_150", o = "_headerGroup0_1vchc_157", d = "_headerGroup1_1vchc_170", n = "_headerGroup2_1vchc_183", p = "_headerGroup3_1vchc_196", s = "_headerGroup4_1vchc_209", u = "_headerGroup5_1vchc_222", l = "_rowSelectWithEye_1vchc_283", v = {
2
+ "marsun-table-shell": "_marsun-table-shell_1vchc_2",
3
+ "marsun-table-toolbar": "_marsun-table-toolbar_1vchc_9",
4
+ "marsun-table-row-config": "_marsun-table-row-config_1vchc_15",
5
+ "marsun-table": "_marsun-table_1vchc_2",
6
6
  headerEyeBtn: e,
7
- rowEyeBtn: t,
8
- headerTitleWithEye: l,
9
- headerTitleText: a,
10
- rowSelectWithEye: r
7
+ rowEyeBtn: r,
8
+ headerTitleWithEye: h,
9
+ headerTitleText: t,
10
+ headerDepth0: a,
11
+ headerDepth1: c,
12
+ headerDepth2: _,
13
+ headerGroup0: o,
14
+ headerGroup1: d,
15
+ headerGroup2: n,
16
+ headerGroup3: p,
17
+ headerGroup4: s,
18
+ headerGroup5: u,
19
+ rowSelectWithEye: l
11
20
  };
12
21
  export {
13
- _ as default,
22
+ v as default,
23
+ a as headerDepth0,
24
+ c as headerDepth1,
25
+ _ as headerDepth2,
14
26
  e as headerEyeBtn,
15
- a as headerTitleText,
16
- l as headerTitleWithEye,
17
- t as rowEyeBtn,
18
- r as rowSelectWithEye
27
+ o as headerGroup0,
28
+ d as headerGroup1,
29
+ n as headerGroup2,
30
+ p as headerGroup3,
31
+ s as headerGroup4,
32
+ u as headerGroup5,
33
+ t as headerTitleText,
34
+ h as headerTitleWithEye,
35
+ r as rowEyeBtn,
36
+ l as rowSelectWithEye
19
37
  };
20
38
  //# sourceMappingURL=style.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}