fastlion-amis
Version:
一种MIS页面生成工具
249 lines (232 loc) • 5.55 kB
text/typescript
import type { ActionSchema } from './renderers/Action';
import { SchemaApiObject } from './Schema';
export interface ApiObject extends SchemaApiObject {
config?: {
withCredentials?: boolean;
cancelExecutor?: (cancel: Function) => void;
};
body?: PlainObject;
query?: PlainObject;
adaptor?: (payload: object, response: fetcherResult, api: ApiObject) => any;
requestAdaptor?: (api: ApiObject) => ApiObject;
}
export type ApiString = string;
export type Api = ApiString | ApiObject;
export enum ResizeEvent {
DRAGCONTENTRESIZE = 'DRAGCONTENTRESIZE',
DIALOGRESIZEENDEVENT = 'dialogResizeEndEvent',
// 固定模式下初始化/调整宽度后的回调
STOP_RESIZE_AFTER_PIN = 'STOP_RESIZE_AFTER_PIN',
// 解除固定模式
RESET_MAIN_PAGE_WIDTH = 'RESET_MAIN_PAGE_WIDTH'
}
export interface fetcherResult {
data?: {
data: object | any;
status: number;
msg: string;
msgTimeout?: number;
errors?: {
[propName: string]: string;
};
type?: string;
[propName: string]: any; // 为了兼容其他返回格式
};
status: number;
headers: object;
config?: any;
}
export interface fetchOptions {
method?: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'jsonp';
successMessage?: string;
errorMessage?: string;
autoAppend?: boolean;
beforeSend?: (data: any) => any;
onSuccess?: (json: Payload) => any;
onFailed?: (json: Payload) => any;
silent?: boolean;
shouldHideLoaing?: boolean;//是否必须展示刷新
[propName: string]: any;
}
export interface Payload {
ok: boolean;
msg: string;
msgTimeout?: number;
data: any;
status: number;
errors?: {
[propName: string]: string;
};
headers?: any;
reqUrl?: string;
}
export interface Schema {
type: string;
detectField?: string;
visibleOn?: string;
hiddenOn?: string;
children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null;
definitions?: Definitions;
[propName: string]: any;
}
export interface Button {
type: 'submit' | 'button' | 'reset';
label?: string;
icon?: string;
size?: string;
disabled?: boolean;
className?: string;
}
export type SchemaNode = Schema | string | Array<Schema | string>;
export interface SchemaArray extends Array<SchemaNode> { }
export interface Definitions {
[propName: string]: SchemaNode;
}
export interface Action extends Button {
actionType?:
| 'submit'
| 'copy'
| 'reload'
| 'ajax'
| 'dialog'
| 'drawer'
| 'jump'
| 'link'
| 'url'
| 'email'
| 'close'
| 'confirm'
| 'add'
| 'remove'
| 'delete'
| 'edit'
| 'cancel'
| 'next'
| 'prev'
| 'reset'
| 'reset-and-submit'
| 'lion-child-view'
| 'batch-image-view'
| 'clear'
| 'clear-and-submit'
| 'label-design'
| 'export'
| 'loginAmazon'
| 'label-print'
| 'bill-print'
| 'form-print'
| 'report-print'
| 'bpm_detail'
| 'scale'
| 'advanced-filter'
| 'bpm_submit'
| 'flow_save_drat'
| 'offline-opt'
| 'batch-download'
| 'columns-toggler'
| 'register-finger'
;
api?: Api;
asyncApi?: Api;
payload?: any;
dialog?: SchemaNode;
to?: string;
target?: string;
link?: string;
url?: string;
cc?: string;
bcc?: string;
subject?: string;
body?: string;
mergeData?: boolean;
reload?: string;
messages?: {
success?: string;
failed?: string;
};
feedback?: any;
required?: Array<string>;
[propName: string]: any;
}
export interface Location {
pathname: string;
search: string;
state: any;
hash: string;
key?: string;
query?: any;
}
export interface PlainObject {
[propsName: string]: any;
}
export interface RendererData {
[propsName: string]: any;
__prev?: RendererDataAlias;
__super?: RendererData;
}
type RendererDataAlias = RendererData;
export type FunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends Function ? K : never;
}[keyof T];
export interface JSONSchema {
[propsName: string]: any;
}
// export type Omit<T, K extends keyof T & any> = Pick<T, Exclude<keyof T, K>>;
// export type Override<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
// export type ExtractProps<
// TComponentOrTProps
// > = TComponentOrTProps extends React.ComponentType<infer P> ? P : never;
/**
* 事件跟踪的定义
*/
export interface EventTrack {
/**
* 事件类型,目前有以下几种
*
* api: 所有 fetcher 前调用
* url: 打开外部链接,组件有可能是 action 也有可能是 link
* link: 打开内部链接
* dialog: action 的弹框
* drawer: action 的抽出式弹框
* copy: action 里的复制
* reload: action 里的 reload
* email: action 里的 email
* prev: action 里的 prev
* next: action 里的 next
* cancel: action 里的 cancel
* close: action 里的 close
* submit: 有可能是 action 里的 submit,也有可能是表单提交
* confirm: action 里的 confirm
* add: action 里的 add
* reset: action 里的 reset
* reset-and-submit: action 里的 reset-and-submit
* formItemChange: 表单项内容变化
* formError: 表单验证失败
* formSubmit: 表单成功提交,在表单验证成功之后才会触发,这个可能会和 api 重合
* tabChange: tab 切换
* netError: api 报错
*/
eventType:
| 'api'
| 'url'
| 'link'
| 'dialog'
| 'drawer'
| 'copy'
| 'reload'
| 'email'
| 'prev'
| 'next'
| 'cancel'
| 'close'
| 'submit'
| 'confirm'
| 'reset'
| 'reset-and-submit'
| 'formItemChange'
| 'tabChange';
/**
* 事件数据
*/
eventData: ActionSchema | Api;
}