import { VNode } from 'vue'; export type TableSize = 'small' | 'medium' | 'large'; export type TableAlign = 'left' | 'center' | 'right'; export type TableColumnType = 'selection' | 'index' | 'expand'; export type SortOrder = 'asc' | 'desc' | null; export interface TableColumn { /** 列的唯一标识 */ key: string; /** 列标题 */ title: string; /** 对应数据字段名,支持嵌套如 'user.name' */ dataIndex?: string; /** 列宽度 */ width?: number | string; /** 最小列宽 */ minWidth?: number | string; /** 列对齐方式 */ align?: TableAlign; /** 列类型 */ type?: TableColumnType; /** 是否可排序 */ sortable?: boolean; /** 是否固定列 */ fixed?: boolean | 'left' | 'right'; /** 是否可调整列宽 */ resizable?: boolean; /** 超出内容是否显示 tooltip */ ellipsis?: boolean; /** 自定义渲染函数 */ render?: (value: any, record: any, index: number) => VNode | string; /** 插槽名称,用于自定义列内容 */ slotName?: string; /** 列是否隐藏 */ hidden?: boolean; /** 格式化函数 */ formatter?: (value: any, record: any, index: number) => string; /** 筛选器配置 */ filters?: Array<{ text: string; value: any; }>; /** 自定义筛选函数 */ onFilter?: (value: any, record: any) => boolean; } export interface PaginationConfig { /** 当前页码 */ current: number; /** 每页条数 */ pageSize: number; /** 总条数 */ total: number; /** 每页条数选择器选项 */ pageSizes?: number[]; /** 是否显示总数 */ showTotal?: boolean; /** 是否显示每页条数选择器 */ showSizeChanger?: boolean; /** 是否显示快速跳转 */ showQuickJumper?: boolean; /** 自定义总数显示文本 */ totalText?: string; } export interface SortConfig { /** 排序字段 */ key: string; /** 排序方向 */ order: SortOrder; } export interface FilterConfig { /** 筛选字段 */ key: string; /** 筛选值 */ values: any[]; } export interface SearchField { /** 字段名 */ key: string; /** 显示标签 */ label: string; /** 输入类型 */ type?: 'input' | 'select' | 'date' | 'daterange'; /** 占位符 */ placeholder?: string; /** 选择器选项 */ options?: Array<{ label: string; value: any; }>; /** 默认值 */ defaultValue?: any; /** 是否必填 */ required?: boolean; } export interface TableProps { /** 数据源 */ dataSource: any[]; /** 列配置 */ columns: TableColumn[]; /** 行唯一标识字段名 */ rowKey?: string | ((record: any) => string); /** 是否显示加载状态 */ loading?: boolean; /** 表格尺寸 */ size?: TableSize; /** 是否显示边框 */ bordered?: boolean; /** 是否显示斑马纹 */ striped?: boolean; /** 表格高度 */ height?: number | string; /** 表格最大高度 */ maxHeight?: number | string; /** 是否高亮当前行 */ highlightCurrentRow?: boolean; /** 空数据时显示的文本 */ emptyText?: string; /** 分页配置,false 时不显示分页 */ pagination?: false | PaginationConfig; /** 搜索字段配置 */ searchFields?: SearchField[]; /** 是否显示搜索区域 */ showSearch?: boolean; /** 是否显示工具栏 */ showToolbar?: boolean; /** 是否可多选 */ selectable?: boolean; /** 默认选中的行 */ defaultSelectedRowKeys?: string[]; /** 选中行的键 */ selectedRowKeys?: string[]; /** 是否显示序号列 */ showIndex?: boolean; /** 序号列标题 */ indexTitle?: string; /** 序号列宽度 */ indexWidth?: number; /** 是否可展开行 */ expandable?: boolean; /** 默认展开的行 */ defaultExpandedRowKeys?: string[]; /** 展开的行键 */ expandedRowKeys?: string[]; /** 是否可拖拽排序 */ draggable?: boolean; /** 表格滚动配置 */ scroll?: { x?: number | string; y?: number | string; }; /** 操作列宽度 */ operationsWidth?: number | string; } export interface SelectionChangeParams { selectedRowKeys: string[]; selectedRows: any[]; changeRows: any[]; type: 'select' | 'selectAll'; } export interface SortChangeParams { key: string; order: SortOrder; column: TableColumn; } export interface FilterChangeParams { key: string; values: any[]; column: TableColumn; } export interface ExpandChangeParams { expanded: boolean; record: any; expandedRows: any[]; } export interface SearchParams { [key: string]: any; } export interface PaginationChangeParams { current: number; pageSize: number; total: number; }