fastlion-amis
Version:
一种MIS页面生成工具
177 lines (176 loc) • 6.37 kB
TypeScript
import React from 'react';
import { IScopedContext } from '../Scoped';
import { RendererProps } from '../factory';
import { IServiceStore } from '../store/service';
import { Action } from '../types';
import { BaseSchema, SchemaApi, SchemaClassName, SchemaExpression, SchemaName, SchemaReload } from '../Schema';
import { FormSchema } from './Form';
import { ActionSchema } from './Action';
export declare type WizardStepSchema = Omit<FormSchema, 'type'> & {
/**
* 当前步骤用来保存数据的 api。
*/
api?: SchemaApi;
asyncApi?: SchemaApi;
/**
* 当前步骤用来获取初始数据的 api
*/
initApi?: SchemaApi;
/**
* 是否可直接跳转到该步骤,一般编辑模式需要可直接跳转查看。
*/
jumpable?: boolean;
/**
* 通过 JS 表达式来配置当前步骤可否被直接跳转到。
*/
jumpableOn?: SchemaExpression;
/**
* Step 标题
*/
title?: string;
label?: string;
/**
* 每一步可以单独配置按钮。如果不配置wizard会自动生成。
*/
actions?: Array<ActionSchema>;
/**
* 保存完后,可以指定跳转地址,支持相对路径和组内绝对路径,同时可以通过 $xxx 使用变量
*/
redirect?: string;
reload?: SchemaReload;
/**
* 默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 `CRUD` 模型的 name 值。 如果 target 目标是一个 `Form` ,则目标 `Form` 会重新触发 `initApi` 和 `schemaApi`,api 可以拿到当前 form 数据。如果目标是一个 `CRUD` 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。
*/
target?: string;
};
/**
* 表单向导
* 文档:https://baidu.gitee.io/amis/docs/components/wizard
*/
export interface WizardSchema extends BaseSchema {
/**
* 指定为表单向导
*/
type: 'wizard';
/**
* 配置按钮 className
*/
actionClassName?: SchemaClassName;
/**
* 完成按钮的文字描述
*/
actionFinishLabel?: string;
/**
* 下一步按钮的文字描述
*/
actionNextLabel?: string;
/**
* 下一步并且保存按钮的文字描述
*/
actionNextSaveLabel?: string;
/**
* 上一步按钮的文字描述
*/
actionPrevLabel?: string;
/**
* Wizard 用来保存数据的 api。
* [详情](https://baidu.github.io/amis/docs/api#wizard)
*/
api?: SchemaApi;
/**
* 是否合并后再提交
*/
bulkSubmit?: boolean;
/**
* Wizard 用来获取初始数据的 api。
*/
initApi?: SchemaApi;
/**
* 展示模式
*
* @default vertical
*/
mode?: 'vertical' | 'horizontal';
name?: SchemaName;
/**
* 是否为只读模式。
*/
readOnly?: boolean;
/**
* 保存完后,可以指定跳转地址,支持相对路径和组内绝对路径,同时可以通过 $xxx 使用变量
*/
redirect?: string;
reload?: SchemaReload;
/**
* 默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 `CRUD` 模型的 name 值。 如果 target 目标是一个 `Form` ,则目标 `Form` 会重新触发 `initApi` 和 `schemaApi`,api 可以拿到当前 form 数据。如果目标是一个 `CRUD` 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。
*/
target?: string;
/**
* 是否将底部按钮固定在底部。
*/
affixFooter?: boolean | 'always';
steps: Array<WizardStepSchema>;
startStep?: string;
}
export interface WizardProps extends RendererProps, Omit<WizardSchema, 'className'> {
store: IServiceStore;
onFinished: (values: object, action: any) => any;
}
export interface WizardState {
currentStep: number;
completeStep: number;
}
export default class Wizard extends React.Component<WizardProps, WizardState> {
static defaultProps: Partial<WizardProps>;
static propsList: Array<string>;
dom: any;
form: any;
asyncCancel: () => void;
parentNode?: any;
unSensor: Function;
affixDom: React.RefObject<HTMLDivElement>;
footerDom: React.RefObject<HTMLDivElement>;
initalValues: {
[propName: string]: any;
};
state: {
currentStep: number;
completeStep: number;
};
componentDidMount(): void;
componentDidUpdate(prevProps: WizardProps): void;
componentWillUnmount(): void;
affixDetect(): void;
gotoStep(index: number): void;
formRef(ref: any): void;
submitToTarget(target: string, values: object): void;
reloadTarget(target: string, data: any): void;
reload(subPath?: string, query?: any, ctx?: any): void;
receive(values: object): void;
domRef(ref: any): void;
getPopOverContainer(): any;
checkSubmit(): void;
handleAction(e: React.UIEvent<any> | void, action: Action, data: object, throwErrors?: boolean, delegate?: IScopedContext): void | Promise<void>;
handleQuery(query: any): void;
openFeedback(dialog: any, ctx: any): Promise<unknown>;
handleChange(values: object): void;
handleInit(values: any): void;
handleReset(values: any): void;
handleSubmit(values: object, action: Action): boolean;
handleDialogConfirm(values: object[], action: Action, targets: Array<any>): void;
handleDialogClose(confirmed?: boolean): void;
renderSteps(): JSX.Element;
renderActions(): JSX.Element | null;
renderFooter(): JSX.Element | null;
renderWizard(): JSX.Element;
render(): JSX.Element;
}
export declare class WizardRenderer extends Wizard {
static contextType: React.Context<IScopedContext>;
constructor(props: WizardProps, context: IScopedContext);
componentWillUnmount(): void;
doAction(action: Action, data: object, throwErrors?: boolean): void | Promise<void>;
submitToTarget(target: string, values: object): void;
reloadTarget(target: string, data: any): void;
handleDialogConfirm(values: object[], action: Action, targets: Array<any>): void;
}