UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

366 lines (365 loc) 13.6 kB
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; }