amis
Version:
一种MIS页面生成工具
292 lines (291 loc) • 8.88 kB
TypeScript
import React from 'react';
import { RendererProps } from '../../factory';
import { SchemaNode, Action } from '../../types';
import { ITableStore, IColumn, IRow } from '../../store/table';
import Sortable from 'sortablejs';
import { TableCell } from './TableCell';
import { BaseSchema, SchemaClassName, SchemaObject, SchemaTokenizeableString } from '../../Schema';
import { SchemaPopOver } from '../PopOver';
import { SchemaQuickEdit } from '../QuickEdit';
import { SchemaCopyable } from '../Copyable';
import { SchemaRemark } from '../Remark';
/**
* 表格列,不指定类型时默认为文本类型。
*/
export declare type TableColumnObject = {
/**
* 列标题
*/
label: string;
/**
* 配置是否固定当前列
*/
fixed?: 'left' | 'right' | 'none';
/**
* 绑定字段名
*/
name?: string;
/**
* 配置查看详情功能
*/
popOver?: SchemaPopOver;
/**
* 配置快速编辑功能
*/
quickEdit?: SchemaQuickEdit;
/**
* 作为表单项时,可以单独配置编辑时的快速编辑面板。
*/
quickEditOnUpdate?: SchemaQuickEdit;
/**
* 配置点击复制功能
*/
copyable?: SchemaCopyable;
/**
* 配置是否可以排序
*/
sortable?: boolean;
/**
* 是否可快速搜索
*/
searchable?: boolean;
/**
* 配置是否默认展示
*/
toggled?: boolean;
/**
* 列宽度
*/
width?: number | string;
/**
* todo
*/
filterable?: boolean | {
source?: string;
options?: Array<any>;
};
/**
* 结合表格的 footable 一起使用。
* 填写 *、xs、sm、md、lg指定 footable 的触发条件,可以填写多个用空格隔开
*/
breakpoint?: '*' | 'xs' | 'sm' | 'md' | 'lg';
/**
* 提示信息
*/
remark?: SchemaRemark;
};
export declare type TableColumnWithType = SchemaObject & TableColumnObject;
export declare type TableColumn = TableColumnWithType | TableColumnObject;
/**
* Table 表格渲染器。
* 文档:https://baidu.gitee.io/amis/docs/components/table
*/
export interface TableSchema extends BaseSchema {
/**
* 指定为表格渲染器。
*/
type: 'table' | 'static-table';
/**
* 是否固定表头
*/
affixHeader?: boolean;
/**
* 表格的列信息
*/
columns?: Array<TableColumn>;
/**
* 展示列显示开关,自动即:列数量大于或等于5个时自动开启
*/
columnsTogglable?: boolean | 'auto';
/**
* 是否开启底部展示功能,适合移动端展示
*/
footable?: boolean | {
expand?: 'first' | 'all' | 'none';
/**
* 是否为手风琴模式
*/
accordion?: boolean;
};
/**
* 底部外层 CSS 类名
*/
footerClassName?: SchemaClassName;
/**
* 顶部外层 CSS 类名
*/
headerClassName?: SchemaClassName;
/**
* 占位符
*/
placeholder?: string;
/**
* 是否显示底部
*/
showFooter?: boolean;
/**
* 是否显示头部
*/
showHeader?: boolean;
/**
* 数据源:绑定当前环境变量
*/
source?: SchemaTokenizeableString;
/**
* 表格 CSS 类名
*/
tableClassName?: SchemaClassName;
/**
* 标题
*/
title?: string;
/**
* 工具栏 CSS 类名
*/
toolbarClassName?: SchemaClassName;
/**
* 合并单元格配置,配置数字表示从左到右的多少列自动合并单元格。
*/
combineNum?: number;
/**
* 顶部总结行
*/
prefixRow?: Array<SchemaObject>;
/**
* 底部总结行
*/
affixRow?: Array<SchemaObject>;
}
export interface TableProps extends RendererProps {
title?: string;
header?: SchemaNode;
footer?: SchemaNode;
actions?: Action[];
className?: string;
headerClassName?: string;
footerClassName?: string;
store: ITableStore;
columns?: Array<any>;
headingClassName?: string;
toolbarClassName?: string;
headerToolbarClassName?: string;
footerToolbarClassName?: string;
tableClassName?: string;
source?: string;
selectable?: boolean;
selected?: Array<any>;
maxKeepItemSelectionLength?: number;
valueField?: string;
draggable?: boolean;
columnsTogglable?: boolean | 'auto';
affixHeader?: boolean;
affixColumns?: boolean;
combineNum?: number;
footable?: boolean | {
expand?: 'first' | 'all' | 'none';
expandAll?: boolean;
accordion?: boolean;
};
expandConfig?: {
expand?: 'first' | 'all' | 'none';
expandAll?: boolean;
accordion?: boolean;
};
itemCheckableOn?: string;
itemDraggableOn?: string;
itemActions?: Array<Action>;
onSelect: (selectedItems: Array<object>, unSelectedItems: Array<object>) => void;
onSave?: (items: Array<object> | object, diff: Array<object> | object, rowIndexes: Array<string> | string, unModifiedItems?: Array<object>, rowOrigins?: Array<object> | object, resetOnFailed?: boolean) => void;
onSaveOrder?: (moved: Array<object>, items: Array<object>) => void;
onQuery: (values: object) => void;
onImageEnlarge?: (data: any, target: any) => void;
buildItemProps?: (item: any, index: number) => any;
checkOnItemClick?: boolean;
hideCheckToggler?: boolean;
rowClassName?: string;
rowClassNameExpr?: string;
popOverContainer?: any;
canAccessSuperData?: boolean;
}
export default class Table extends React.Component<TableProps, object> {
static propsList: Array<string>;
static defaultProps: Partial<TableProps>;
table?: HTMLTableElement;
sortable?: Sortable;
dragTip?: HTMLElement;
affixedTable?: HTMLTableElement;
parentNode?: HTMLElement | Window;
lastScrollLeft: number;
totalWidth: number;
totalHeight: number;
outterWidth: number;
outterHeight: number;
unSensor?: Function;
updateTableInfoLazy: () => void;
widths: {
[propName: string]: number;
};
heights: {
[propName: string]: number;
};
renderedToolbars: Array<string>;
subForms: any;
constructor(props: TableProps);
static syncRows(store: ITableStore, props: TableProps, prevProps?: TableProps): void;
componentWillMount(): void;
componentDidMount(): void;
componentWillReceiveProps(nextProps: TableProps): void;
componentDidUpdate(): void;
componentWillUnmount(): void;
subFormRef(form: any, x: number, y: number): void;
handleAction(e: React.UIEvent<any>, action: Action, ctx: object): void;
handleCheck(item: IRow): void;
handleCheckAll(): void;
handleQuickChange(item: IRow, values: object, saveImmediately?: boolean | any, savePristine?: boolean, resetOnFailed?: boolean): void;
handleSave(): Promise<void>;
handleSaveOrder(): void;
syncSelected(): void;
reset(): void;
bulkUpdate(value: any, items: Array<object>): void;
getSelected(): any[];
affixDetect(): void;
updateTableInfo(): void;
handleOutterScroll(): void;
tableRef(ref: HTMLTableElement): void;
dragTipRef(ref: any): void;
affixedTableRef(ref: HTMLTableElement): void;
initDragging(): void;
destroyDragging(): void;
getPopOverContainer(): Element | Text | null;
handleMouseMove(e: React.MouseEvent<any>): void;
handleMouseLeave(): void;
draggingTr: HTMLTableRowElement;
originIndex: number;
draggingSibling: Array<HTMLTableRowElement>;
handleDragStart(e: React.DragEvent): void;
handleDragOver(e: any): void;
handleDrop(): void;
handleDragEnd(): void;
handleImageEnlarge(info: any, target: {
rowIndex: number;
colIndex: number;
}): void;
renderHeading(): JSX.Element | null;
renderHeadCell(column: IColumn, props?: any): JSX.Element;
renderCell(region: string, column: IColumn, item: IRow, props: any, ignoreDrag?: boolean): JSX.Element | null;
renderAffixHeader(tableClassName: string): JSX.Element | null;
renderFixedColumns(rows: Array<any>, columns: Array<IColumn>, headerOnly?: boolean, tableClassName?: string): JSX.Element;
renderToolbar(toolbar: SchemaNode): JSX.Element | null | undefined;
renderColumnsToggler(config?: any): JSX.Element | null;
renderDragToggler(): JSX.Element | null;
renderExportExcel(toolbar: SchemaNode): JSX.Element | null;
renderActions(region: string): JSX.Element | null;
renderHeader(editable?: boolean): JSX.Element | JSX.Element[] | null;
renderFooter(): JSX.Element | JSX.Element[] | null;
renderItemActions(): JSX.Element | null;
renderTableContent(): JSX.Element;
render(): JSX.Element;
}
export declare class TableRenderer extends Table {
}
export { TableCell };