import { ReactElement } from 'react'; import { CnBalloonProps } from '@alife/cn-ui/es/components/cn-balloon/index'; import { Fn, anyValue } from '../index'; import { TagProps } from '../op-tag'; type columnRender = (value: anyValue, index: number, record: object) => object; type itemRender = ( value: tdType, index: number, record: ItemProps, options: optionType, ) => void; type optionType = CodeProps | StateProps; export type domType = object | columnRender; export type tdType = ReactElement | string | number | boolean; export interface FunctionObjI { [funcName: string]: (value: tdType, index: number, record: object) => void; } export interface ColumnProps { key: string; align: 'left' | 'right' | 'center'; width: number | string; title: string; name: string; render: any; options: object; lock?: 'left' | 'right'; // 只支持左右各 lock 一列 } export interface TableProps { dataSource: ItemProps[]; columns: ColumnProps[]; className?: string; renders?: FunctionObjI; rowProps?: domType; cellProps?: domType; primaryKey?: string; selectedKeys?: (string | number)[]; completeKeys?: string[]; hasHeader?: boolean; onRowClick?: (item: ItemProps, index: number) => void; pagination?: PaginationProps; showSelect?: boolean; // 开启选择行 rowSelection?: { useDetailValue?: boolean; defaultValue?: string | number | (string | number)[]; type?: 'multiple' | 'single'; selectedRowKeys?: string | number | (string | number)[]; onCurrentPageChange?: (value: number) => void; }; onPageChange?: (info: paginationInfo) => void; onSelectChange?: ( keys: string | number | (string | number)[], record: ItemProps | ItemProps[], ) => void; // 选择行后的回调 autoWidth?: boolean; // 是否自动宽度,设置为 true 时,表格列 设的宽度失效 } export interface ItemProps { selected?: boolean; completed?: boolean; checked?: boolean; tagList?: TagProps[]; snList?: string[]; [key: string]: anyValue; } // render export interface RenderProps { value: string; index: number; record: ItemProps; options?: CodeProps | StateProps; } // render code export interface CodeProps { lenLimit?: number; maxLength?: number; hightlightNum?: number; highlightLength?: number; copyable?: boolean; } // render state export interface StateProps { conditionKey?: string; conditionValue?: string; } interface countItem { label: string; value: string; balloon?: CnBalloonProps; onClick?: Fn; } export interface CountProps { dataSource: Array; } export interface GroupProps { name: string; visible: boolean; defaultVisible: boolean; indent: number | string | undefined; extra: string; onClick?: Fn; children: React.FC; className?: string; } export interface TitleProps { className?: string; children?: React.ReactNode; } export interface PaginationProps { /** 是否激活按钮 */ enabled: boolean; /** 当前页 */ current: number; currentPage: number; /** 当前页 */ defaultCurrent: number; /** 总页数 */ total: number; /** 点击按钮触发函数 */ onCurrentPageChange: (value: number) => void; pageSize: number; onPageSizeChange: (value: number) => void; // 每页显示记录数量改变时的回调函数 } interface paginationInfo { currentPage: number; pageSize: number; }