jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
147 lines (146 loc) • 4.95 kB
TypeScript
import type { IServiceStore, RendererEvent, RendererProps } from 'jamis-core';
import type { ActionSchema, BaseSchemaScoped, FormSchema, SchemaApi, SchemaClassName, SchemaExpression, SchemaReload } from '../types';
/**
* 表单向导
*
*/
export interface WizardSchema extends BaseSchemaScoped {
/**
* 指定为表单向导
*/
type: 'wizard';
/**
* 元素`.cxd-Wizard-header`的样式类
* @deprecated 请使用`slots.className`
*/
headerClassName?: SchemaClassName;
/**
* 向导体`.cxd-Wizard-body`部分的样式类
* @deprecated 请使用`slots.className`
*/
bodyClassName?: SchemaClassName;
/**
* 内容区`.cxd-Wizard-content`元素的样式类
* @deprecated 请使用`slots.className`
*/
contentClassName?: SchemaClassName;
/**
* 引导页底元素`.cxd-Wizard-footer`的样式类
* @deprecated 请使用`slots.className`
*/
footerClassName?: SchemaClassName;
/**
* 操作按钮`.cxd-Wizard-btn`元素的样式类
* @deprecated 请使用`slots.className`
*/
actionClassName?: SchemaClassName;
/**
* 上一步按钮`.cxd-Wizard-prevBtn`的样式类
* @deprecated 请使用`slots.className`
*/
actionPrevClassName?: SchemaClassName;
/**
* 下一步按钮`.cxd-Wizard-nextBtn`的样式类
* @deprecated 请使用`slots.className`
*/
actionNextClassName?: 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;
initFetch?: boolean;
initFetchOn?: SchemaExpression;
/**
* 展示模式
*
* @default vertical
*/
mode?: 'vertical' | 'horizontal';
/**
* 是否为只读模式。
*/
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 WizardStepSchema extends Partial<FormSchema> {
/**
* 当前步骤用来保存数据的 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;
}
export interface WizardProps extends RendererProps, Omit<WizardSchema, 'type' | 'className' | 'data'> {
store: IServiceStore;
onFinished: (values: object, action: any) => any;
dispatchEvent: (event: IWizardEvent, data?: any) => Promise<RendererEvent>;
}
export type IWizardEvent = 'inited' | 'change' | 'stepChange' | 'stepSubmitSucc' | 'stepSubmitFail' | 'finished' | 'submitSucc' | 'submitFail';