amis
Version:
一种MIS页面生成工具
198 lines (197 loc) • 6.97 kB
TypeScript
import React from 'react';
import { IScopedContext } from 'amis-core';
import { RendererProps } from 'amis-core';
import { IServiceStore } from 'amis-core';
import { ActionObject } from 'amis-core';
import { SpinnerExtraProps } from 'amis-ui';
import { BaseSchema, FormSchema, SchemaApi, SchemaClassName, SchemaExpression, SchemaName, SchemaReload } from '../Schema';
import { ActionSchema } from './Action';
import { StepSchema } from './Steps';
export type WizardStepSchema = Omit<FormSchema, 'type'> & StepSchema & {
/**
* 当前步骤用来保存数据的 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://aisuda.bce.baidu.com/amis/zh-CN/components/wizard
*/
export interface WizardSchema extends BaseSchema, SpinnerExtraProps {
/**
* 指定为表单向导
*/
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;
/**
* 步骤条区域css类
*/
stepsClassName?: string;
/**
* 表单区域css类
*/
bodyClassName?: string;
/**
* step + body区域css类
*/
stepClassName?: string;
/**
* 底部操作栏的css类
*/
footerClassName?: string;
/**
* 是否用panel包裹
*/
wrapWithPanel?: boolean;
}
export interface WizardProps extends RendererProps, Omit<WizardSchema, 'className'> {
store: IServiceStore;
onFinished: (values: object, action: any) => any;
}
export interface WizardState {
currentStep: number;
completeStep: number;
rawSteps: WizardStepSchema[];
}
export default class Wizard extends React.Component<WizardProps, WizardState> {
static defaultProps: Partial<WizardProps>;
static propsList: Array<string>;
dom: any;
form: any;
asyncCancel: () => void;
initalValues: {
[propName: string]: any;
};
state: WizardState;
componentDidMount(): void;
componentDidUpdate(prevProps: WizardProps): void;
componentWillUnmount(): void;
dispatchEvent(action: string, value?: object): Promise<boolean>;
handleFetchInitEvent(result: any): Promise<void>;
normalizeSteps(values: any): Promise<void>;
gotoStep(index: number): Promise<void>;
formRef(ref: any): void;
submitToTarget(target: string, values: object): void;
reloadTarget(target: string, data: any): void;
reload(subPath?: string, query?: any, ctx?: any, silent?: boolean, replace?: boolean): Promise<any>;
receive(values: object, subPath?: string, replace?: boolean): Promise<any>;
domRef(ref: any): void;
getPopOverContainer(): any;
checkSubmit(): void;
handleAction(e: React.UIEvent<any> | void, action: ActionObject, data: object, throwErrors?: boolean, delegate?: IScopedContext): any;
handleQuery(query: any): any;
openFeedback(dialog: any, ctx: any): Promise<unknown>;
handleChange(values: object): Promise<void>;
handleInit(values: any): void;
handleReset(values: any): void;
finalSubmit(values?: object, action?: ActionObject): Promise<void>;
handleSubmit(values: object, action: ActionObject): boolean;
handleDialogConfirm(values: object[], action: ActionObject, targets: Array<any>): void;
handleDialogClose(confirmed?: boolean): void;
handleJumpStep(index: number, step: any): void;
renderSteps(): React.JSX.Element;
renderActions(): React.JSX.Element | null;
renderFooter(): React.JSX.Element | null;
renderWizard(): React.JSX.Element;
render(): React.JSX.Element;
}
export declare class WizardRenderer extends Wizard {
static contextType: React.Context<IScopedContext>;
constructor(props: WizardProps, context: IScopedContext);
componentWillUnmount(): void;
doAction(action: ActionObject, data: object, throwErrors?: boolean): any;
submitToTarget(target: string, values: object): void;
reloadTarget(target: string, data: any): void;
handleDialogConfirm(values: object[], action: ActionObject, targets: Array<any>): void;
setData(values: object, replace?: boolean): void;
getData(): any;
}