import { VNode } from 'vue'; import { ElementEnum } from '@/enum'; declare type RenderTarget = 'create' | 'update' | 'filter' | 'query'; declare type METHOD = 'get' | 'GET' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'options' | 'OPTIONS' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'purge' | 'PURGE' | 'link' | 'LINK' | 'unlink' | 'UNLINK'; declare type RuleType = 'string' | 'number' | 'boolean' | 'array' | 'date' | 'url' | 'email'; interface RuleItemOptions { type: RuleType; required?: boolean; message?: string; trigger?: 'blur' | 'change'; min?: number; max?: number; validator?: (rule: any, value: any, callback: (error?: string | Error) => void) => void; } interface RulesOptions { [key: string]: RuleItemOptions | RuleItemOptions[]; } interface AliasMapping { create?: string; update?: string; filter?: string; query?: string; } interface FilterOptions { tactics?: string | 'eq' | 'like' | 'gt' | 'le' | 'ge' | 'between'; placeholder?: string; } interface BaseAdapter { handleProcess(...args: any): any; } interface GroupOptions { filter?: number; edit?: number; } interface VisibleOptions { create?: boolean; update?: boolean; filter?: boolean; query?: boolean; } declare type DefaultValue = 'array' | 'string' | 'object' | 'boolean' | 'number'; interface DicOptions { url?: string; label?: string; value?: string; data?: Array; } interface DicDomain { key: string; options: string | DicOptions; } declare type RenderFun = (h: any, row: any, dict?: DicOptions) => VNode; declare type DefaultRenderEnum = ElementEnum.INPUT | ElementEnum.SELECT | ElementEnum.RADIO | ElementEnum.CHECKBOX | ElementEnum.DATE | ElementEnum.DATE_TIME | ElementEnum.TEXTAREA; declare type DefaultRenderString = 'input' | 'select' | 'radio' | 'checkbox' | 'date' | 'datetime' | 'textarea'; interface RenderOptions { create?: DefaultRenderString | DefaultRenderEnum | RenderFun; update?: DefaultRenderString | DefaultRenderEnum | RenderFun; filter?: DefaultRenderString | DefaultRenderEnum | RenderFun; query?: RenderFun; } interface RestTemplate { text: string; field?: string; group?: GroupOptions; alias?: AliasMapping; filter?: FilterOptions; column?: any; rules: RuleItemOptions[]; visible?: VisibleOptions; renderer?: RenderOptions; defaultValue?: DefaultValue; } interface ApiOption { method: METHOD; uri: string; } interface ApiDomain { create?: ApiOption; update?: ApiOption; delete?: ApiOption; query: ApiOption; } interface Lang { create?: string; operation?: string; filter?: string; resetFilter?: string; update?: string; delete?: string; } /** * 项目内可选的功能 */ interface Features { /** * 分页功能 * @default true */ page?: boolean; /** * 是否开启创建功能 * @default true */ create?: boolean; /** * 更新功能 * @default true */ update?: boolean; /** * 删除功能 * @default true */ delete?: boolean; } interface Adapters { http?: BaseAdapter; response?: BaseAdapter; page?: BaseAdapter; } interface TemplateConfiguration { templates: RestTemplate[]; baseURL?: string; api: string | ApiDomain; dic?: DicDomain[]; lang?: Lang; features?: Features; table?: any; adapters?: Adapters; operation?: any; } interface NodeRenderer { render(h: any, node: VNode, ...args: any): VNode; } interface PaginationRenderer { render(h: any, page: any, row: any, currentFun: any): VNode; } interface DialogRenderer { render(h: any, title: string, node: VNode, visible: boolean, fn: any): VNode; } interface AtomButton { render(h: any, title: string, fun: any, options?: any): VNode; } interface ButtonRenderer { primary: AtomButton; danger: AtomButton; info: AtomButton; warn: AtomButton; default: AtomButton; text: AtomButton; } interface TableRenderer { render(h: any, data: any[], node: VNode, load?: boolean, options?: any): VNode; } interface TableColumnRenderer { render(h: any, label: string, slots: any, options?: any): VNode; } interface AtomRenderer { render(h: any, ...args: any): VNode; } interface FormRenderer { render(h: any, node: VNode, model: any, rules: RulesOptions): VNode; } interface FormItemRenderer { render(h: any, node: VNode, label?: string, prop?: string): VNode; } interface MessageBoxRenderer { render(options: any, callback: any, error: any): any; } declare type MessageFun = (message: string) => void; interface MessageRenderer { success: MessageFun; error: MessageFun; info: MessageFun; warning: MessageFun; } /** * 渲染器接口 */ interface Renderer { row: NodeRenderer; col: NodeRenderer; button: ButtonRenderer; dialog: DialogRenderer; table: TableRenderer; tableColumn: TableColumnRenderer; input: AtomRenderer; pagination: PaginationRenderer; form: FormRenderer; formItem: FormItemRenderer; date?: AtomRenderer; datetime?: AtomRenderer; select?: AtomRenderer; textarea: AtomRenderer; radio?: AtomRenderer; checkbox?: AtomRenderer; messagebox: MessageBoxRenderer; message: MessageRenderer; } /** * 内容提供者 * 用于提供全局的默认参数 */ interface Provider { lang?: Lang; features?: Features; adapters?: Adapters; } interface Pagination { current: string; size: string; pages?: number[]; } interface Response { data: any; success: boolean; origin: any; msg: string; total?: number; } export { RenderTarget, METHOD, RenderFun, DefaultRenderEnum, DefaultRenderString, RenderOptions, RuleType, RuleItemOptions, RulesOptions, AliasMapping, FilterOptions, BaseAdapter, GroupOptions, VisibleOptions, DefaultValue, RestTemplate, ApiOption, ApiDomain, Lang, Features, DicOptions, DicDomain, TemplateConfiguration, NodeRenderer, PaginationRenderer, DialogRenderer, AtomButton, ButtonRenderer, TableRenderer, TableColumnRenderer, AtomRenderer, FormRenderer, FormItemRenderer, Renderer, Provider, Adapters, Pagination, MessageBoxRenderer, MessageFun, MessageRenderer, Response };