import type { TableProps } from 'antd'; import type { ColumnType } from 'antd/es/table'; import type { Key, ReactNode } from 'react'; export type TableRowAction = { key: string; label: string; onClick: (record: T) => void; disabled?: boolean | ((record: T) => boolean); visible?: boolean | ((record: T) => boolean); render?: (record: T) => ReactNode; }; export type RowSelectionConfig = { selectedRowKeys?: Key[]; onChange: (keys: Key[], rows: T[]) => void; preserveSelectedRowKeys?: boolean; }; /** 列定义;ellipsisExpand / showTitleOnHover 为列级可选能力 */ export type DataTableColumn = ColumnType & { /** 该列参与行点击展开截断(需同时开启 rowTextExpand) */ ellipsisExpand?: boolean; /** * hover 时用原生 title 展示单元格文本。 * 仅对无自定义 render 的列生效;有 render 时由外部自行处理。 */ showTitleOnHover?: boolean; }; /** 行文本展开配置;不传或 false 时关闭 */ export type RowTextExpandConfig = { /** 是否允许多行同时展开;默认 true */ multiple?: boolean; /** 展开后最大高度(px);默认 200 */ expandedMaxHeight?: number; }; export type DataTableProps = { rowKey: string | ((record: T) => Key); columns: DataTableColumn[]; actions?: TableRowAction[] | null; actionColumnTitle?: string; actionColumnWidth?: number; dataSource?: T[]; loading?: boolean; pagination?: { current: number; pageSize: number; total: number; } | false; onChange?: TableProps['onChange']; rowSelection?: RowSelectionConfig; defaultPageSize?: number; showSizeChanger?: boolean; showQuickJumper?: boolean; className?: string; /** 表格最小宽度;小于该宽度时横向滚动。默认 920 */ minWidth?: number | string; /** * 点击行展开标记了 ellipsisExpand 的列文本。 * 默认关闭;传 true 或配置对象开启。 */ rowTextExpand?: boolean | RowTextExpandConfig; };