import { AllowedComponentProps, VNodeProps } from '../common' /** * 表单布局类型 */ declare type FormLayout = 'horizontal' | 'vertical' | 'inline' /** * 表单大小 */ declare type FormSize = 'small' | 'medium' | 'large' /** * 标签对齐方式 */ declare type LabelAlign = 'left' | 'right' | 'top' /** * 表单数据模型 */ declare type FormModel = Record /** * 表单错误信息 */ declare type FormErrors = Record /** * 验证规则接口 */ declare interface FormRule { /** 是否必填 */ required?: boolean /** 验证消息 */ message?: string /** 触发器 */ trigger?: 'change' | 'blur' | ['change', 'blur'] /** 正则表达式验证 */ pattern?: RegExp /** 自定义验证函数 */ validator?: (value: any, rule: FormRule) => boolean | string | Promise /** 最小长度 */ min?: number /** 最大长度 */ max?: number /** 最小值 */ minValue?: number /** 最大值 */ maxValue?: number /** 验证类型 */ type?: 'email' | 'url' | 'phone' | 'idcard' | 'number' | 'integer' | 'float' /** 自定义错误消息模板 */ messageTemplate?: string /** 是否允许空白 */ whitespace?: boolean } /** * 表单验证结果 */ declare interface ValidateResult { valid: boolean errors: FormErrors fields: Record } /** * 表单配置接口 */ declare interface FormProps { /** 表单数据模型 */ modelValue?: FormModel /** 表单布局 */ layout?: FormLayout /** 表单大小 */ size?: FormSize /** 标签宽度 */ labelWidth?: string | number /** 标签对齐方式 */ labelAlign?: LabelAlign /** 是否显示冒号 */ colon?: boolean /** 是否禁用表单 */ disabled?: boolean /** 是否只读 */ readonly?: boolean /** 是否显示验证状态图标 */ showValidateStatus?: boolean /** 是否隐藏必填标记 */ hideRequiredMark?: boolean /** 是否在输入时实时验证 */ validateOnChange?: boolean /** 是否在失去焦点时验证 */ validateOnBlur?: boolean /** 是否在提交时验证 */ validateOnSubmit?: boolean /** 滚动到第一个错误项 */ scrollToFirstError?: boolean /** 自定义样式 */ customStyle?: Record } /** * 表单事件接口 */ declare interface FormEmits { (e: 'update:modelValue', values: FormModel): void (e: 'submit', values: FormModel): void (e: 'validate', result: ValidateResult): void (e: 'error', errors: FormErrors): void (e: 'change', values: FormModel): void (e: 'reset'): void } /** * 表单上下文接口 */ declare interface FormContext { model: FormModel rules: Record errors: FormErrors layout: FormLayout size: FormSize labelWidth?: string | number labelAlign: LabelAlign colon: boolean disabled: boolean readonly: boolean showValidateStatus: boolean hideRequiredMark: boolean validateOnChange: boolean validateOnBlur: boolean addField: (prop: string, field: any) => void removeField: (prop: string) => void validateField: (prop: string) => Promise resetField: (prop: string) => void clearValidate: (prop?: string) => void } declare interface _Form { new(): { $props: AllowedComponentProps & VNodeProps & FormProps $emit: FormEmits } } export declare const Form: _Form export default Form export type { FormLayout, FormSize, LabelAlign, FormModel, FormErrors, FormRule, ValidateResult, FormProps, FormEmits, FormContext }