import { CSSProperties , RenderFunction , Slot , VNode } from 'vue' ; import { Data } from '../_utils/types' ; import { TriggerProps } from '../trigger' ; export const TABLE_PAGE_POSITION = [ 'tl' , 'top' , 'tr' , 'bl' , 'bottom' , 'br' , ] as const ; export type TablePagePosition = typeof TABLE_PAGE_POSITION [ number ] ; export interface TableData { zh en key ? : string ; zh en expand ? : string | RenderFunction ; zh en children ? : TableData [ ] ; zh en disabled ? : boolean ; zh en version isLeaf ? : boolean ; [ name ] : any ; } export interface TableSortable { zh en sortDirections : ( 'ascend' | 'descend' ) [ ] ; zh en sorter ? : ( ( a : any , b : any ) => number ) | boolean ; zh en sortOrder ? : 'ascend' | 'descend' | '' ; zh en defaultSortOrder ? : 'ascend' | 'descend' | '' ; } interface TableFilterData { zh en text : string | RenderFunction ; zh en value : string ; } export interface TableFilterable { zh en filters : TableFilterData [ ] ; zh en filter : ( filteredValue : string [ ] , record : TableData ) => boolean ; zh en multiple ? : boolean ; zh en filteredValue ? : string [ ] ; zh en defaultFilteredValue ? : string [ ] ; zh en renderContent ? : ( data : { filterValue : string [ ] ; setFilterValue : ( filterValue : string [ ] ) => void ; handleFilterConfirm : ( event : Event ) => void ; handleFilterReset : ( event : Event ) => void ; } ) => VNode ; zh en icon ? : ( ) => VNode ; zh en triggerProps ? : TriggerProps ; zh en version alignLeft ? : boolean ; } export interface TableColumn { zh en dataIndex : string ; zh en title ? : string | RenderFunction ; zh en width ? : number ; zh en align ? : 'left' | 'center' | 'right' ; zh en fixed ? : 'left' | 'right' ; zh en ellipsis ? : boolean ; zh en sortable ? : TableSortable ; zh en filterable ? : TableFilterable ; zh en children ? : TableColumn [ ] ; zh en version cellStyle ? : CSSProperties ; zh en render ? : ( { record , column , rowIndex , } : { record : TableData ; column : TableColumn ; rowIndex : number ; } ) => VNode ; isLastLeftFixed ? : boolean ; isFirstRightFixed ? : boolean ; slot ? : Slot ; } export interface TableCell extends TableColumn { colSpan ? : number ; rowSpan ? : number ; } export interface TableBorder { zh en wrapper ? : boolean ; zh en cell ? : boolean ; zh en headerCell ? : boolean ; zh en bodyCell ? : boolean ; } export interface TableRowSelection { zh en type ? : 'checkbox' | 'radio' ; zh en selectedRowKeys ? : string [ ] ; zh en defaultSelectedRowKeys ? : string [ ] ; zh en showCheckedAll ? : boolean ; zh en title ? : string ; zh en width ? : number ; zh en fixed ? : boolean ; } export interface TableExpandable { zh en expandedRowKeys ? : string [ ] ; zh en defaultExpandedRowKeys ? : string [ ] ; zh en defaultExpandAllRows ? : boolean ; zh en expandedRowRender ? : ( record : TableData ) => VNode ; zh en icon ? : ( expanded : boolean , record : TableData ) => VNode ; zh en title ? : string ; zh en width ? : number ; zh en fixed ? : boolean ; } export interface TableOperationColumn { name : string ; title ? : string ; width ? : number ; fixed ? : boolean ; isLastLeftFixed ? : boolean ; columnNode ? : ( props : any ) => VNode ; bodyNode ? : ( record : TableData , props : any ) => VNode ; } export interface TableComponents { operations : ( operations : { expand ? : TableOperationColumn ; selection ? : TableOperationColumn ; } ) => TableOperationColumn [ ] ; } export interface TableProps { columns : TableColumn [ ] ; data : TableData [ ] ; bordered ? : boolean | TableBorder ; rowSelection ? : TableRowSelection ; expandable ? : TableExpandable ; pagination ? : boolean | Data ; pagePosition ? : string ; } export type Filters = Record < string , string [ ] > ; export type Sorter = { filed : string ; direction : 'ascend' | 'descend' ; } | Record < string , never > ;