UNPKG

@zenweb/form

Version:

Zenweb Form module

104 lines (103 loc) 2.68 kB
import { MessageCodeResolver } from '@zenweb/messagecode'; import { ErrorMessages, FormData, FormLayout, FormResult, FormFields, FieldsResult, GetFieldType } from './types.js'; export interface Form { /** * 总体数据验证清理 * - 在所有字段验证通过后调用 * - 如果验证不通过需要抛出异常可以使用 `this.fail('code')` * - 使用 `this.data` 访问或改变数据 */ clean?(): void | Promise<void>; } export declare class Form<T extends FormData = FormData> { protected messageCodeResolver: MessageCodeResolver; /** * 初始化完成的字段 */ protected _fields: FormFields; /** * 布局结果 */ private _layout?; /** * 字段结果 */ private _fieldsResult?; /** * 表单数据 */ protected _data?: T; /** * 表单校验错误信息 */ errors: { [field: string]: any; }; /** * 是否有校验错误 */ get hasErrors(): boolean; /** * 已格式化错误消息 */ private _errorMessages?; /** * 重置表单 * - 清除已处理数据 * - 清除已处理字段 * - 清除已处理布局 * - 清除错误消息 */ reset(): void; /** * 取得表单提交结果 */ get data(): Partial<T> | null | undefined; /** * 设置表单提交结果或初始值 */ set data(data: Partial<T> | null | undefined); /** * 输出字段 */ get fields(): FieldsResult; /** * 表单布局,如果不设置或者缺少字段,则自动按顺序追加到结尾 */ get layout(): FormLayout[]; /** * 输出表单给前端 */ toJSON(): FormResult; /** * 验证输入数据 * @param input 输入数据 * @returns 是否有错误 */ validate(input: any): Promise<boolean>; /** * 检查输入数据,如果有误直接抛出异常 */ assert(input: any): Promise<void>; /** * 验证失败 - 抛出异常 */ fail(code: string, params?: any): void; /** * 错误消息 * - 当发生错误时 key 对应字段名称 */ get errorMessages(): ErrorMessages; } export declare abstract class FormBase extends Form { /** * 安装初始化 */ abstract setup(): {} | Promise<{}>; get data(): { [K in keyof Awaited<ReturnType<this['setup']>>]: GetFieldType<Awaited<ReturnType<this['setup']>>[K]>; }; set data(data: Partial<{ [K in keyof Awaited<ReturnType<this['setup']>>]: GetFieldType<Awaited<ReturnType<this['setup']>>[K]>; }> | null | undefined); }