import type { VNodeChild } from 'vue'; import type { PaginationProps } from './pagination'; import type { FormProps } from '/@/components/BzForm'; import type { TableRowSelection as ITableRowSelection } from 'ant-design-vue/lib/table/interface'; import type { ColumnProps } from 'ant-design-vue/es/table/interface'; import { ComponentType } from './componentType'; import { VueNode } from '/@/utils/propTypes'; import { RoleEnum } from '/@/enums/roleEnum'; export declare type SortOrder = 'ascend' | 'descend'; export interface TableCurrentDataSource { currentDataSource: T[]; } export interface TableRowSelection extends ITableRowSelection { /** * 当所选行发生更改时执行的回调 * @type Function */ onChange?: (selectedRowKeys: string[] | number[], selectedRows: T[]) => any; /** * 当选择/取消选择一行时执行的回调 * @type Function */ onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any; /** * 当选择/取消选择所有行时执行回调 * @type Function */ onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => any; /** * 当行选择倒置时执行的回调 * @type Function */ onSelectInvert?: (selectedRows: string[] | number[]) => any; } export interface TableCustomRecord { record?: T; index?: number; } export interface ExpandedRowRenderRecord extends TableCustomRecord { indent?: number; expanded?: boolean; } export interface ColumnFilterItem { text?: string; value?: string; children?: any; } export interface TableCustomRecord { record?: T; index?: number; } export interface SorterResult { column: ColumnProps; order: SortOrder; field: string; columnKey: string; } export interface FetchParams { searchInfo?: Recordable; page?: number; sortInfo?: Recordable; filterInfo?: Recordable; } export interface GetColumnsParams { ignoreIndex?: boolean; ignoreAction?: boolean; sort?: boolean; } export type SizeType = 'default' | 'middle' | 'small' | 'large'; export interface TableActionType { reload: (opt?: FetchParams) => Promise; setSelectedRows: (rows: Recordable[]) => void; getSelectRows: () => T[]; clearSelectedRowKeys: () => void; expandAll: () => void; expandRows: (keys: string[] | number[]) => void; collapseAll: () => void; scrollTo: (pos: string) => void; // pos: id | "top" | "bottom" getSelectRowKeys: () => string[]; deleteSelectRowByKey: (key: string) => void; setPagination: (info: Partial) => void; setTableData: (values: T[]) => void; updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void; deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => void; insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => Recordabl[] | void; findTableDataRecord: (rowKey: string | number) => Recordable | void; getColumns: (opt?: GetColumnsParams) => BasicColumn[]; setColumns: (columns: BasicColumn[] | string[]) => void; getDataSource: () => T[]; getRawDataSource: () => T; setLoading: (loading: boolean) => void; setProps: (props: Partial) => void; redoHeight: () => void; setSelectedRowKeys: (rowKeys: string[] | number[]) => void; getPaginationRef: () => PaginationProps | boolean; getSize: () => SizeType; getRowSelection: () => TableRowSelection; getCacheColumns: () => BasicColumn[]; emit?: EmitType; updateTableData: (index: number, key: string, value: any) => Recordable; setShowPagination: (show: boolean) => Promise; getShowPagination: () => boolean; setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void; } export interface FetchSetting { // 请求接口当前页数 pageField: string; // 每页显示多少条 sizeField: string; // 请求结果列表字段 支持 a.b.c listField: string; // 请求结果总数字段 支持 a.b.c totalField: string; } export interface BasicTableProps { // 点击行选中 clickToRowSelect?: boolean; isTreeTable?: boolean; // 自定义排序方法 sortFn?: (sortInfo: SorterResult) => any; // 排序方法 filterFn?: (data: Partial>) => any; // 取消表格的默认padding inset?: boolean; // 斑马纹 striped?: boolean; // 是否自动生成key autoCreateKey?: boolean; // 计算合计行的方法 summaryFunc?: (...arg: any) => Recordable[]; // 自定义合计表格内容 summaryData?: Recordable[]; // 是否显示合计行 showSummary?: boolean; // 是否可拖拽列 canColDrag?: boolean; // 接口请求对象 api?: (...arg: any) => Promise; // 请求之前处理参数 beforeFetch?: Fn; // 自定义处理接口返回参数 afterFetch?: Fn; // 查询条件请求之前处理 handleSearchInfoFn?: Fn; // 请求接口配置 fetchSetting?: Partial; // 立即请求接口 immediate?: boolean; // 在开起搜索表单的时候,如果没有数据是否显示表格 emptyDataIsShowTable?: boolean; // 额外的请求参数 searchInfo?: Recordable; // 默认的排序参数 defSort?: Recordable; // 使用搜索表单 useSearchForm?: boolean; // 表单配置 formConfig?: Partial; // 列配置 columns: BasicColumn[]; // 是否显示序号列 showIndexColumn?: boolean; // 序号列配置 indexColumnProps?: BasicColumn; actionColumn?: BasicColumn; // 文本超过宽度是否显示。。。 ellipsis?: boolean; // 是否继承父级高度(父级高度-表单高度-padding高度) isCanResizeParent?: boolean; // 是否可以自适应高度 canResize?: boolean; // 自适应高度偏移, 计算结果-偏移量 resizeHeightOffset?: number; // 在分页改变的时候清空选项 clearSelectOnPageChange?: boolean; // rowKey?: string | ((record: Recordable) => string); // 数据 dataSource?: Recordable[]; // 标题右侧提示 titleHelpMessage?: string | string[]; // 表格滚动最大高度 maxHeight?: number; // 是否显示边框 bordered?: boolean; // 分页配置 pagination?: PaginationProps | boolean; // loading加载 loading?: boolean; /** * 列包含要显示的子列 * @default 'children' * @type string | string[] */ childrenColumnName?: string; /** * 覆盖默认的表元素 * @type object */ components?: object; /** * 默认展开全部 * @default false * @type boolean */ defaultExpandAllRows?: boolean; /** * 默认展开行 keys * @type string[] */ defaultExpandedRowKeys?: string[]; /** * 当前展开行 keys * @type string[] */ expandedRowKeys?: string[]; /** * 每行的展开Render渲染 * @type Function */ expandedRowRender?: (record?: ExpandedRowRenderRecord) => VNodeChild | JSX.Element; /** * 自定义行展开图标. * @type Function | VNodeChild */ expandIcon?: Function | VNodeChild | JSX.Element; /** * 是否通过单击整行中的任何位置来展开行 * @default false * @type boolean */ expandRowByClick?: boolean; /** * 当expandIconAsCell为false时,将插入的列expandIcon的索引。默认值0 */ expandIconColumnIndex?: number; /** * Table footer renderer * @type Function | VNodeChild */ footer?: Function | VNodeChild | JSX.Element; /** * 以像素为单位缩进树数据的大小 * @default 15 * @type number */ indentSize?: number; /** * i18n text including filter, sort, empty text, etc * @default { filterConfirm: 'Ok', filterReset: 'Reset', emptyText: 'No Data' } * @type object */ locale?: object; /** * Row's className * @type Function */ rowClassName?: (record: TableCustomRecord, index: number) => string; /** * Row selection config * @type object */ rowSelection?: TableRowSelection; /** * Set horizontal or vertical scrolling, can also be used to specify the width and height of the scroll area. * It is recommended to set a number for x, if you want to set it to true, * you need to add style .ant-table td { white-space: nowrap; }. * @type object */ scroll?: { x?: number | true; y?: number }; /** * Whether to show table header * @default true * @type boolean */ showHeader?: boolean; /** * Size of table * @default 'default' * @type string */ size?: SizeType; /** * Table title renderer * @type Function | ScopedSlot */ title?: VNodeChild | JSX.Element | string | ((data: Recordable) => string); /** * Set props on per header row * @type Function */ customHeaderRow?: (column: ColumnProps, index: number) => object; /** * Set props on per row * @type Function */ customRow?: (record: T, index: number) => object; /** * `table-layout` attribute of table element * `fixed` when header/columns are fixed, or using `column.ellipsis` * * @see https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout * @version 1.5.0 */ tableLayout?: 'auto' | 'fixed' | string; /** * the render container of dropdowns in table * @param triggerNode * @version 1.5.0 */ getPopupContainer?: (triggerNode?: HTMLElement) => HTMLElement; /** * Data can be changed again before rendering. * The default configuration of general user empty data. * You can configured globally through [ConfigProvider](https://antdv.com/components/config-provider-cn/) * * @version 1.5.4 */ transformCellText?: Function; /** * Callback executed before editable cell submit value, not for row-editor * * The cell will not submit data while callback return false */ beforeEditSubmit?: (data: { record: Recordable; index: number; key: string | number; value: any; }) => Promise; /** * Callback executed when pagination, filters or sorter is changed * @param pagination * @param filters * @param sorter * @param currentDataSource */ onChange?: (pagination: any, filters: any, sorter: any, extra: any) => void; /** * Callback executed when the row expand icon is clicked * * @param expanded * @param record */ onExpand?: (expande: boolean, record: T) => void; /** * Callback executed when the expanded rows change * @param expandedRows */ onExpandedRowsChange?: (expandedRows: string[] | number[]) => void; onColumnsChange?: (data: ColumnChangeParam[]) => void; } export type CellFormat = | string | ((text: string, record: Recordable, index: number) => string | number) | Map; // @ts-ignore export interface BasicColumn extends ColumnProps { children?: BasicColumn[]; filters?: { text: string; value: string; children?: | unknown[] | (((props: Record) => unknown[]) & (() => unknown[]) & (() => unknown[])); }[]; // flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION'; customTitle?: VueNode; slots?: Recordable; // Whether to hide the column by default, it can be displayed in the column configuration defaultHidden?: boolean; // Help text for table column header helpMessage?: string | string[]; format?: CellFormat; // Editable edit?: boolean; editRow?: boolean; editable?: boolean; editComponent?: ComponentType; editComponentProps?: | ((opt: { text: string | number | boolean | Recordable; record: Recordable; column: BasicColumn; index: number; }) => Recordable) | Recordable; editRule?: boolean | ((text: string, record: Recordable) => Promise); editValueMap?: (value: any) => string; onEditRow?: () => void; // 权限编码控制是否显示 auth?: RoleEnum | RoleEnum[] | string | string[]; // 业务控制是否显示 ifShow?: boolean | ((column: BasicColumn) => boolean); // 自定义修改后显示的内容 editRender?: (opt: { text: string | number | boolean | Recordable; record: Recordable; column: BasicColumn; index: number; }) => VNodeChild | JSX.Element; // 动态 Disabled editDynamicDisabled?: boolean | ((record: Recordable) => boolean); } export type ColumnChangeParam = { dataIndex: string; fixed: boolean | 'left' | 'right' | undefined; visible: boolean; }; export interface InnerHandlers { onColumnsChange: (data: ColumnChangeParam[]) => void; }