UNPKG

element-plus-useform

Version:

element-plus useForm hook,使表单验证脱离组件实例

124 lines 7.68 kB
import { type RuleItem, type ValidateError, type ValidateFieldsError } from 'async-validator'; import { type ComputedGetter, type ComputedRef, type Ref, type WritableComputedRef } from 'vue'; export type Arrayable<T> = T | T[]; export type UseFormPropertyKey = string | number; export type UseFormItemPropertyKey = Arrayable<UseFormPropertyKey>; export interface UseFormModel { [K: UseFormPropertyKey]: any; } export type UseFormRuleItemTrigger = 'blur' | 'change'; export interface UseFormRuleItem extends RuleItem { trigger?: Arrayable<UseFormRuleItemTrigger>; } export type UseFormRules<T extends UseFormModel = UseFormModel> = { [K in keyof T]?: UseFormRuleItem | UseFormRuleItem[]; }; export interface UseFormOptions { /** * 开启 deep rule 监听 * @default false * @see https://github.com/yiminghe/async-validator?tab=readme-ov-file#deep-rules */ deepRule?: boolean; /** * 严格模式。false: 键不存在时不进行验证;true: 键不存在时仍然进行验证 * @default false */ strick?: boolean; /** * @default false */ validateOnRuleChange?: boolean; /** * 深度克隆函数 * @default structuredClone * @see https://developer.mozilla.org/zh-CN/docs/Web/API/structuredClone */ cloneDeep?: <T>(value: T) => T; } export type UseFormValidationResult = Promise<boolean>; export type UseFormValidateCallback = (isValid: boolean, invalidFields?: ValidateFieldsError) => Promise<void> | void; export interface UseFormValidateFailure { errors: ValidateError[] | null; fields: ValidateFieldsError; } export type UseFormValidateStatus = 'error' | 'validating' | 'success' | ''; export interface UseFormValidateInfo { /** * 必填项 */ required?: boolean; /** * 验证状态 */ validateStatus?: UseFormValidateStatus; /** * 错误信息 */ error?: string; } export type UseFormValidateInfos<T extends UseFormModel = UseFormModel> = { [key in keyof T]?: UseFormValidateInfo; } & { [key: UseFormPropertyKey]: UseFormValidateInfo; }; export interface UseFormResult<T extends UseFormModel, M extends T | Ref<T>, R extends UseFormRules<T> | Ref<UseFormRules<T>> | ComputedRef<UseFormRules<T>> | WritableComputedRef<UseFormRules<T>> | (() => UseFormRules<T>)> { model: M; rules: R extends ComputedGetter<any> ? ComputedRef<UseFormRules<T>> : R; initialModel: Ref<T>; validateInfos: UseFormValidateInfos<T>; /** * 对整个表单的内容进行验证。 接收一个回调函数,或返回 Promise。 * @see https://element-plus.org/zh-CN/component/form.html#form-exposes */ validate(callback?: UseFormValidateCallback): UseFormValidationResult; /** * 验证具体的某个字段。 * @see https://element-plus.org/zh-CN/component/form.html#form-exposes */ validateField(props?: Arrayable<UseFormItemPropertyKey>, callback?: UseFormValidateCallback): Promise<any>; /** * 重置表单数据(与 element-plus 不一致) * @param newModel 新的 model 数据,默认使用初始值 */ resetFields(newModel?: Partial<T>): void; /** * 清除验证信息 * @param props 需要被清除的验证信息的 key,支持点语法和数组语法。不传入时清除所有验证信息。 * @see https://element-plus.org/zh-CN/component/form.html#form-exposes */ clearValidate(props?: Arrayable<UseFormItemPropertyKey>): void; /** * 清除深度验证信息及相关监听 * @param props 需要被清除的深度验证信息的 key,支持点语法和数组语法。不传入时清除所有深度验证信息及相关监听。 * @param strick true: 取值路径仅最后一级 key 不存在时也会被清除;false: 取值路径仅最后一级 key 不存在时不会被清除 */ clearDeepInfos(props?: Arrayable<UseFormItemPropertyKey>, strick?: boolean): void; } interface GetResult { value: any; exist: boolean; diff: number; } export declare function toArray<T>(value?: T | T[], clone?: boolean): T[]; export declare function normalizeKey(key: Arrayable<UseFormPropertyKey>, nkc: Record<string | number, string>): string; export declare function get(obj: Record<string, any>, key: string): GetResult; export declare function isRequired(rule: UseFormRuleItem | UseFormRuleItem[]): boolean; export declare function isDeepRule(rule: UseFormRuleItem): boolean; export declare function useForm<T extends UseFormModel, M extends T = T, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends T = T, R extends WritableComputedRef<UseFormRules<T>> = WritableComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends T = T, R extends ComputedRef<UseFormRules<T>> = ComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends T = T, R extends ComputedGetter<UseFormRules<T>> = ComputedGetter<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends T = T, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends WritableComputedRef<UseFormRules<T>> = WritableComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends ComputedRef<UseFormRules<T>> = ComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends ComputedGetter<UseFormRules<T>> = ComputedGetter<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>; export declare function useForm<T extends UseFormModel, M extends T = T>(modelRef: M, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, M, Ref<UseFormRules<T>>>; export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>>(modelRef: M, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, M, Ref<UseFormRules<T>>>; export declare function useForm<T extends UseFormModel, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: null | undefined, rulesRef: R, options?: UseFormOptions): UseFormResult<T, Ref<T>, R>; export declare function useForm<T extends UseFormModel, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: null | undefined, rulesRef: R, options?: UseFormOptions): UseFormResult<T, Ref<T>, R>; export declare function useForm<T extends UseFormModel>(modelRef?: null, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, Ref<T>, Ref<UseFormRules<T>>>; export {}; //# sourceMappingURL=index.d.ts.map