/// import * as React from 'react'; import CommonProps from '../util'; import { LoadingProps } from '../loading'; import { AffixProps } from '../affix'; interface HTMLAttributesWeak extends React.HTMLAttributes { title?: any; } export interface ColumnProps extends HTMLAttributesWeak, CommonProps { /** * 指定列对应的字段,支持`a.b`形式的快速取值 */ dataIndex?: string; /** * 行渲染的逻辑 * value, rowIndex, record, context四个属性只可读不可被更改 * Function(value, index, record) => Element */ cell?: React.ReactElement | React.ReactNode | ((value: any, index: number, record: any) => any); /** * 表头显示的内容 * value, rowIndex, record, context四个属性只可读不可被更改 */ title?: React.ReactElement | React.ReactNode | (() => any); htmlTitle?: string; /** * 是否支持排序 */ sortable?: boolean; /** * 列宽,注意在锁列的情况下一定需要配置宽度 */ width?: number | string; /** * 单元格的对齐方式 */ align?: 'left' | 'center' | 'right'; sortDirections?: Array<'desc' | 'asc' | 'default'>; /** * 单元格标题的对齐方式, 不配置默认读取align值 */ alignHeader?: 'left' | 'center' | 'right'; /** * 生成标题过滤的菜单, 格式为`[{label:'xxx', value:'xxx'}]` */ filters?: Array; /** * 过滤的模式是单选还是多选 */ filterMode?: 'single' | 'multiple'; /** * 是否支持锁列,可选值为`left`,`right`, `true` */ lock?: boolean | string; /** * 是否支持列宽调整, 当该值设为true,table的布局方式会修改为fixed. */ resizable?: boolean; /** * 是否支持异步列宽调整, 当该值设为true,table的布局方式会修改为fixed. */ asyncResizable?: boolean; /** * header cell 横跨的格数,设置为0表示不出现此 th */ colSpan?: number; /** * 设置该列单元格的word-break样式,对于id类、中文类适合用all,对于英文句子适合用word */ wordBreak?: 'all' | 'word'; } export class Column extends React.Component {} interface HTMLAttributesWeak extends React.HTMLAttributes { title?: any; } export interface ColumnGroupProps extends HTMLAttributesWeak, CommonProps { /** * 表头显示的内容 */ title?: React.ReactElement | React.ReactNode | (() => any); } export class ColumnGroup extends React.Component {} export interface GroupHeaderProps extends React.HTMLAttributes, CommonProps { /** * 行渲染的逻辑 */ cell?: React.ReactElement | React.ReactNode | ((value: any, index: number, record: any) => any); /** * 是否在Children上面渲染selection */ hasChildrenSelection?: boolean; /** * 是否在GroupHeader上面渲染selection */ hasSelection?: boolean; /** * 当 dataSouce 里没有 children 时,是否使用内容作为数据 */ useFirstLevelDataWhenNoChildren?: boolean; } export class GroupHeader extends React.Component {} export interface GroupFooterProps extends React.HTMLAttributes, CommonProps { /** * 行渲染的逻辑 */ cell?: React.ReactElement | React.ReactNode | ((value: any, index: number, record: any) => any); } export class GroupFooter extends React.Component {} export interface BaseTableProps extends React.HTMLAttributes, CommonProps { /** * 样式类名的品牌前缀 */ prefix?: string; /** * 尺寸 small为紧凑模式 */ size?: 'small' | 'medium'; /** * 自定义类名 */ className?: string; /** * 自定义内联样式 */ style?: React.CSSProperties; columns?: Array; /** * 表格元素的 table-layout 属性,设为 fixed 表示内容不会影响列的布局 */ tableLayout?: 'fixed' | 'auto'; /** * 表格的总长度,可以这么用:设置表格总长度 、设置部分列的宽度,这样表格会按照剩余空间大小,自动其他列分配宽度 */ tableWidth?: number; /** * 表格展示的数据源 */ dataSource?: Array; /** * 表格是否具有边框 */ hasBorder?: boolean; /** * 表格是否具有头部 */ hasHeader?: boolean; /** * 表格是否是斑马线 */ isZebra?: boolean; /** * 表格是否在加载中 */ loading?: boolean; /** * 自定义国际化文案对象 */ locale?: { ok: string; reset: string; empty: string; asc: string; desc: string; expanded: string; folded: string; filter: string; selectAll: string; }; /** * 设置数据为空的时候的表格内容展现 */ emptyContent?: React.ReactNode; /** * dataSource当中数据的主键,如果给定的数据源中的属性不包含该主键,会造成选择状态全部选中 */ primaryKey?: string; } export interface TableProps extends React.HTMLAttributes, BaseTableProps { /** * 点击表格每一行触发的事件 */ onRowClick?: (record: any, index: number, e: React.MouseEvent) => void; /** * 悬浮在表格每一行的时候触发的事件 */ onRowMouseEnter?: (record: any, index: number, e: React.MouseEvent) => void; /** * 离开表格每一行的时候触发的事件 */ onRowMouseLeave?: (record: any, index: number, e: React.MouseEvent) => void; /** * 点击列排序触发的事件 */ onSort?: (dataIndex: string, order: string) => void; /** * 点击过滤确认按钮触发的事件 */ onFilter?: (filterParams: any) => void; /** * 重设列尺寸的时候触发的事件 */ onResizeChange?: (dataIndex: string, value: number) => void; /** * 设置每一行的属性,如果返回值和其他针对行操作的属性冲突则无效。 */ getRowProps?: (record: any, index: number) => any; rowProps?: (record: any, index: number) => any; /** * 设置单元格的属性,通过该属性可以进行合并单元格 */ getCellProps?: ( rowIndex: number, colIndex: number, dataIndex: string, record: any ) => any; cellProps?: ( rowIndex: number, colIndex: number, dataIndex: string, record: any ) => any; /** * 自定义 Loading 组件 * 请务必传递 props, 使用方式: loadingComponent={props => } */ loadingComponent?: (props: LoadingProps) => React.ReactNode; /** * 当前过滤的的keys,使用此属性可以控制表格的头部的过滤选项中哪个菜单被选中,格式为 {dataIndex: {selectedKeys:[]}} * 示例: * 假设要控制dataIndex为id的列的过滤菜单中key为one的菜单项选中 * `` */ filterParams?: {[propName: string]: any}; /** * 当前排序的字段,使用此属性可以控制表格的字段的排序,格式为{dataIndex: 'asc'} */ sort?: {[propName: string]: any}; /** * 自定义排序按钮,例如上下排布的: `{desc: , asc: }` */ sortIcons?: {desc?: React.ReactNode; asc?: React.ReactNode}; /** * 额外渲染行的渲染函数 */ expandedRowRender?: (record: any, index: number) => React.ReactElement; rowExpandable?: (record: any) => boolean; /** * 额外渲染行的缩进,包含两个数字,第一个数字为左侧缩进,第二个数字为右侧缩进 */ expandedRowIndent?: [number, number]; /** * 默认情况下展开的渲染行或者Tree, 传入此属性为受控状态 */ openRowKeys?: Array; /** * 是否显示点击展开额外渲染行的+号按钮 */ hasExpandedRowCtrl?: boolean; /** * 设置额外渲染行的属性 */ getExpandedColProps?: (record: IRecord, index: number) => object | Record; /** * 在额外渲染行或者Tree展开或者收起的时候触发的事件 */ onRowOpen?: ( openRowKeys: Array, currentRowKey: string, expanded: boolean, currentRecord:any ) => void; /** * 点击额外渲染行触发的事件 */ onExpandedRowClick?: (record: any, index: number, e: React.MouseEvent) => void; /** * 表头是否固定,该属性配合maxBodyHeight使用,当内容区域的高度超过maxBodyHeight的时候,在内容区域会出现滚动条 */ fixedHeader?: boolean; /** * 最大内容区域的高度,在`fixedHeader`为`true`的时候,超过这个高度会出现滚动条 */ maxBodyHeight?: number | string; /** * 是否启用选择模式 */ rowSelection?: { getProps?: (record: any, index: number) => void; onChange?: (selectedRowKeys: Array, records: Array) => void; onSelect?: ( selected: boolean, record: any, records: Array ) => void; onSelectAll?: (selected: boolean, records: Array) => void; selectedRowKeys?: Array; mode?: 'single' | 'multiple'; titleProps?: () => any; columnProps?: () => any; titleAddons?: () => any; }; /** * 表头是否是sticky */ stickyHeader?: boolean; /** * 距离窗口顶部达到指定偏移量后触发 */ offsetTop?: number; /** * affix组件的的属性 */ affixProps?: AffixProps; /** * 在tree模式下的缩进尺寸, 仅在isTree为true时候有效 */ indent?: number; /** * 开启Table的tree模式, 接收的数据格式中包含children则渲染成tree table */ isTree?: boolean; /** * 是否开启虚拟滚动 */ useVirtual?: boolean; /** * 滚动到指定行 */ scrollToRow?: number; /** * 设置行高 */ rowHeight?: number | (() => any); /** * 在内容区域滚动的时候触发的函数 */ onBodyScroll?: (start: number) => void; /** * 开启时,getExpandedColProps() / getRowProps() / expandedRowRender() 的第二个参数 index (该行所对应的序列) 将按照01,2,3,4...的顺序返回,否则返回真实index(0,2,4,6... / 1,3,5,7...) */ expandedIndexSimulate?: boolean; /** * 在 hover 时出现十字参考轴,适用于表头比较复杂,需要做表头分类的场景。 */ crossline?: boolean; } export default class Table extends React.Component { static Column: typeof Column; static ColumnGroup: typeof ColumnGroup; static GroupHeader: typeof GroupHeader; static GroupFooter: typeof GroupFooter; static StickyLock: typeof Table; static Base: typeof Table; }