fastlion-amis
Version:
一种MIS页面生成工具
366 lines (365 loc) • 13.6 kB
TypeScript
import React from 'react';
import { RendererProps } from '../factory';
import { SchemaNode, Schema, Action, PlainObject } from '../types';
import { ICRUDStore } from '../store/crud';
import { IScopedContext } from '../Scoped';
import { BaseSchema, SchemaApi, SchemaClassName, SchemaCollection, SchemaExpression, SchemaMessage, SchemaName, SchemaObject, SchemaTokenizeableString, SchemaTpl } from '../Schema';
import { ActionSchema } from './Action';
import { CardsSchema } from './Cards';
import { ListSchema } from './List';
import { TableRenderer, TableSchema } from './Table';
export declare type CRUDBultinToolbarType = 'columns-toggler' | 'drag-toggler' | 'pagination' | 'headerBulkActions' | 'footerBulkActions' | 'bulk-actions' | 'statistics' | 'switch-per-page' | 'load-more' | 'filter-toggler' | 'export-csv' | 'export-excel';
export interface CRUDBultinToolbar extends Omit<BaseSchema, 'type'> {
type: CRUDBultinToolbarType;
}
export declare type filterTpl = {
value?: string;
label?: string;
name?: string;
labelName?: string;
};
export declare type CRUDToolbarChild = SchemaObject | CRUDBultinToolbar;
export declare type CRUDToolbarObject = {
/**
* 对齐方式
*/
align?: 'left' | 'right';
};
export interface CRUDCommonSchema extends BaseSchema {
/**
* 指定为 CRUD 渲染器。
*/
type: 'crud';
/**
* 指定内容区的展示模式。
*/
mode?: 'table' | 'grid' | 'cards' | /* grid 的别名*/ 'list';
/**
* 初始化数据 API
*/
api?: SchemaApi;
/**
* 顶部批量操作
*/
headerBulkActions?: Array<ActionSchema>;
/**
* 底部批量操作
*/
footerBulkActions?: Array<ActionSchema>;
/**
* 单条操作
*/
itemActions?: Array<ActionSchema>;
/**
* 每页个数,默认为 10,如果不是请设置。
*
* @default 10
*/
perPage?: number;
/**
* 可以默认给定初始参数如: {\"perPage\": 24}
*/
defaultParams?: PlainObject;
/**
* 是否可通过拖拽排序
*/
draggable?: boolean;
/**
* 是否可通过拖拽排序,通过表达式来配置
*/
draggableOn?: SchemaExpression;
name?: SchemaName;
/**
* 过滤器表单
*/
filter?: any;
/**
* 初始是否拉取
* @deprecated 建议用 api 的 sendOn 代替。
*/
initFetch?: boolean;
/**
* 初始是否拉取,用表达式来配置。
* @deprecated 建议用 api 的 sendOn 代替。
*/
initFetchOn?: SchemaExpression;
/**
* 配置内部 DOM 的 className
*/
innerClassName?: SchemaClassName;
/**
* 设置自动刷新时间
*/
interval?: number;
/**
* 设置用来确定位置的字段名,设置后新的顺序将被赋值到该字段中。
*/
orderField?: string;
/**
* 设置分页页码字段名。
* @default page
*/
pageField?: string;
/**
* 设置分页一页显示的多少条数据的字段名。
* @default perPage
*/
perPageField?: string;
/**
* 快速编辑后用来批量保存的 API
*/
quickSaveApi?: SchemaApi;
/**
* 快速编辑配置成及时保存时使用的 API
*/
quickSaveItemApi?: SchemaApi;
/**
* 保存排序的 api
*/
saveOrderApi?: SchemaApi;
/**
* 是否将过滤条件的参数同步到地址栏,默认为true
* @default true
*/
syncLocation?: boolean;
/**
* 顶部工具栏
*/
headerToolbar?: Array<(CRUDToolbarChild & CRUDToolbarObject) | CRUDBultinToolbarType>;
/**
* 底部工具栏
*/
footerToolbar?: Array<(CRUDToolbarChild & CRUDToolbarObject) | CRUDBultinToolbarType>;
/**
* 每页显示多少个空间成员的配置如: [10, 20, 50, 100]。
*/
perPageAvailable?: Array<number>;
messages?: SchemaMessage;
/**
* 是否隐藏快速编辑的按钮。
*/
hideQuickSaveBtn?: boolean;
/**
* 是否自动跳顶部,当切分页的时候。
*/
autoJumpToTopOnPagerChange?: boolean;
/**
* 静默拉取
*/
silentPolling?: boolean;
stopAutoRefreshWhen?: SchemaExpression;
stopAutoRefreshWhenModalIsOpen?: boolean;
filterTogglable?: boolean;
filterDefaultVisible?: boolean;
/**
* 是否将接口返回的内容自动同步到地址栏,前提是开启了同步地址栏。
*/
syncResponse2Query?: boolean;
/**
* 分页的时候是否保留用户选择。
*/
keepItemSelectionOnPageChange?: boolean;
/**
* 当配置 keepItemSelectionOnPageChange 时有用,用来配置已勾选项的文案。
*/
labelTpl?: SchemaTpl;
/**
* 是否为前端单次加载模式,可以用来实现前端分页。
*/
loadDataOnce?: boolean;
/**
* 在开启loadDataOnce时,filter时是否去重新请求api
*/
loadDataOnceFetchOnFilter?: boolean;
/**
* 也可以直接从环境变量中读取,但是不太推荐。
*/
source?: SchemaTokenizeableString;
/**
* 如果时内嵌模式,可以通过这个来配置默认的展开选项。
*/
expandConfig?: {
/**
* 默认是展开第一个、所有、还是都不展开。
*/
expand?: 'first' | 'all' | 'none';
/**
* 是否显示全部切换按钮
*/
expandAll?: boolean;
/**
* 是否为手风琴模式
*/
accordion?: boolean;
};
/**
* 默认只有当分页数大于 1 是才显示,如果总是想显示请配置。
*/
alwaysShowPagination?: boolean;
/**
* 开启查询区域,会根据列元素的searchable属性值,自动生成查询条件表单
*/
autoGenerateFilter?: boolean;
/**
* 内容区域占满屏幕剩余空间
*/
autoFillHeight?: boolean;
/**
* 无限加载
*/
infinteLoad?: boolean;
primaryField: string;
saveColApi?: SchemaApi;
columnInfo?: Record<string, {
index: number;
hidden: number;
}>;
setBorder?: boolean;
preSortAble?: boolean;
advancedFilter: any;
mobileLayout?: 'vertical' | 'horizontal';
statistic?: SchemaCollection;
advancedQueryFields?: string;
}
export declare type CRUDCardsSchema = CRUDCommonSchema & {
mode: 'cards';
} & Omit<CardsSchema, 'type'>;
export declare type CRUDListSchema = CRUDCommonSchema & {
mode: 'list';
} & Omit<ListSchema, 'type'>;
export declare type CRUDTableSchema = CRUDCommonSchema & {
mode?: 'table';
} & Omit<TableSchema, 'type'>;
/**
* CRUD 增删改查渲染器。
* 文档:https://baidu.gitee.io/amis/docs/components/crud
*/
export declare type CRUDSchema = CRUDCardsSchema | CRUDListSchema | CRUDTableSchema;
export interface CRUDProps extends RendererProps, Omit<CRUDCommonSchema, 'type' | 'className'> {
store: ICRUDStore;
pickerMode?: boolean;
OnSelectedItems?: (items: any[]) => void;
getTableInstance?: (tableInstance: any) => void;
}
export default class CRUD extends React.Component<CRUDProps, any> {
static propsList: Array<keyof CRUDProps>;
static defaultProps: {
toolbarInline: boolean;
headerToolbar: string[];
footerToolbar: string[];
primaryField: string;
syncLocation: boolean;
pageField: string;
perPageField: string;
hideQuickSaveBtn: boolean;
autoJumpToTopOnPagerChange: boolean;
silentPolling: boolean;
filterTogglable: boolean;
filterDefaultVisible: boolean;
loadDataOnce: boolean;
loadDataOnceFetchOnFilter: boolean;
autoFillHeight: boolean;
infinteLoad: any;
setBorder: boolean;
preSortAble: boolean;
mobileLayout: string;
};
control: any;
lastQuery: any;
timer: ReturnType<typeof setTimeout>;
mounted: boolean;
pageSwitchRef: React.RefObject<HTMLDivElement>;
dom: React.RefObject<any>;
filterForm: any;
advanceFilterForm: any;
tableStore: any;
tableInstance: any;
sort: boolean;
saveData: Map<string, any[]>;
flowModalProps: {
flowDetail: any;
ctx: any;
};
constructor(props: CRUDProps);
filterData: {};
componentDidMount(): void;
componentDidUpdate(prevProps: CRUDProps): void;
markSort: () => void;
componentWillUnmount(): void;
controlRef(control: any): void;
handleAction(e: React.UIEvent<any> | undefined, action: Action, ctx: any, throwErrors?: boolean, delegate?: IScopedContext, isItemAction?: boolean): any;
openImageEnlarge(data: Array<any>, baseURL: string, onImageEnlarge: any): void;
handleBulkAction(selectedItems: Array<any>, unSelectedItems: Array<any>, e: React.UIEvent<any>, action: Action): void;
handleItemAction(action: Action, ctx: any): void;
handleFilterInit(values: object, isChild?: boolean): void;
handleFilterReset(values: object): void;
lionPullRequest: (values: object, init?: boolean | undefined) => Promise<any>;
handleLoadMore: () => void;
handleFilterSubmit(values: object, jumpToFirstPage?: boolean, replaceLocation?: boolean, search?: boolean, isChild?: boolean): void;
handleFilterAdvanced(): void;
hideAdvancedFilter(): void;
handleFilterOptions(value: any): void;
handleSaveData(val: string, cont: any[]): void;
handleReset(): void;
handledelVisible(value: any, whole?: boolean, e?: React.MouseEvent<HTMLElement>): void;
handlefilters(): void;
handleBulkGo(selectedItems: Array<any>, unSelectedItems: Array<any>, e: React.MouseEvent<any>): void | Promise<false | void>;
showModal(): void;
handleDialogConfirm(values: object[], action: Action, ctx: any, components: Array<any>, tableInstance?: TableRenderer): Promise<any>;
handleDialogClose(confirmed?: boolean, formInstance?: any, tableInstance?: TableRenderer): void;
closeDialog(): void;
openFeedback(dialog: any, ctx: any): Promise<unknown>;
search(values?: any, silent?: boolean, clearSelection?: boolean, forceReload?: boolean, resolve?: (value: any) => void, reject?: (error: any) => void, isChild?: boolean, postData?: any): void;
silentSearch(values?: object, clearSelection?: boolean, forceReload?: boolean): void;
handleChangePage(page: number, perPage?: number): void;
handleSave(rows: Array<object> | object, diff: Array<object> | object, indexes: Array<string>, unModifiedItems?: Array<any>, rowsOrigin?: Array<object> | object, resetOnFailed?: boolean): void;
handleSaveOrder(moved: Array<object>, rows: Array<object>): void;
handleSelect(items: Array<any>, unSelectedItems: Array<any>): void;
handleChildPopOverOpen(popOver: any): void;
handleChildPopOverClose(popOver: any): void;
handleMutilSort(orderColumns: Map<string, any>, key: string | null, sort: 'asc' | 'desc' | null): void;
handleQuery(values: object, forceReload?: boolean): void;
reload(subpath?: string, query?: any): void;
receive(values: object): void;
reloadTarget(target: string, data: any): void;
closeTarget(target: string): void;
doAction(action: Action, data: object, throwErrors?: boolean): any;
unSelectItem(item: any, index: number): void;
clearSelection(): void;
hasBulkActionsToolbar(): any;
hasBulkActions(): number | false;
renderBulkActions(childProps: any, bulkActions?: Array<ActionSchema>): JSX.Element | null;
renderPagination(toolbar: SchemaNode): JSX.Element | null;
renderStatistics(): JSX.Element | null;
renderSwitchPerPage(childProps: any): JSX.Element | null;
renderLoadMore(): "" | JSX.Element;
renderFilterToggler(): JSX.Element | null;
renderExportCSV(toolbar: Schema): JSX.Element;
/**
* Jay
* 标签、文件打印
*/
renderPrint(schema?: any, isFilePrint?: boolean): JSX.Element;
private moreHandleTouch;
private handleTouchEnd;
renderMoreToolbar(children: Array<any>): JSX.Element;
renderToolbar(toolbar?: SchemaNode, index?: number, childProps?: any, toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode, isFooter?: boolean): {} | null;
renderHeaderToolbar(childProps: any, toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode): {} | null;
renderFooterToolbar(childProps: any, toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode, customToolbar?: any): {} | null;
renderSelection(): React.ReactNode;
renderFilter(isFilter?: boolean): JSX.Element | null;
getTableStore(store: any): void;
getTableInstance(table: any): void;
getFilterColumns(): any;
renderAdvancedModalFooter: React.ReactNode;
render(): JSX.Element;
}
export declare class CRUDRenderer extends CRUD {
static contextType: React.Context<IScopedContext>;
constructor(props: CRUDProps, context: IScopedContext);
componentWillUnmount(): void;
reload(subpath?: string, query?: any, ctx?: any): void;
receive(values: any, subPath?: string): void;
reloadTarget(target: string, data: any): void;
closeTarget(target: string): void;
}