Skip to content

Form 动态表单 ​

基于 Element Plus el-form 的列配置驱动表单,通过 fields 数组声明式定义表单字段,支持自动生成校验规则、栅格布局、远程数据等功能。

基础用法 ​

使用 fields 配置声明表单字段,v-model 双向绑定表单数据。

基础的 3 列栅格布局

姓名
手机号
所在地区
请选择地区
JSON
1
{...} // 3 items

fields 完整示例 ​

展示 fields 配置驱动表单的能力,覆盖所有常用字段类型:input、textarea、number、select、radio、checkbox、checkbox-btn、switch、cascader、date、daterange、datetime、datetimerange、time、timerange、transfer、upload,并演示 colSpan 栅格跨度控制。

fields 完整示例 — 涵盖所有字段类型

姓名
用户名
年龄
邮箱
个人简介
13 / 200
性别
爱好
角色
状态
城市
工作模式
技能标签
省市区
出生日期
在职时间段
-
上班打卡
下班打卡
上班时间
上班时间范围
所属部门
人员列表
技术部✓
产品部✓
设计部
市场部
运营部
人力资源部
已选中人员
清空
技术部
产品部
头像上传
支持 .jpg,.png,.gif 格式,最多 1 个文件
JSON
1
{...} // 21 items

提交与重置 ​

通过 ref 获取表单实例,调用 validate 校验和 reset 重置方法。默认操作区可通过 actions 插槽自定义。

自定义操作按钮

姓名
年龄
邮箱
JSON
1
{...} // 3 items

输入类型 ​

支持 input、textarea、number 等文本输入类型。

文本输入 / 文本域 / 数字输入

文本输入
0 / 50
多行文本
0 / 200
数字输入
JSON
1
{...} // 3 items

选择类组件 ​

支持 select、radio、radio-btn、checkbox、switch 等选择类组件。

单选下拉 / 多选下拉 / 单选框 / 多选框 / 开关

单选下拉
请选择
多选下拉
请选择
单选按钮
复选框组
开关
JSON
1
{...} // 5 items

日期时间 ​

支持 date、daterange、datetime、datetimerange、time、timerange 等日期时间类型。

日期 / 日期范围 / 日期时间 / 时间 / 时间范围

日期
日期范围
-
日期时间
日期时间范围
-
时间
时间范围
JSON
1
{...} // 6 items

级联选择 ​

cascader 类型支持多级联动,可通过 filterable 开启搜索功能。

级联选择器

城市选择
JSON
1
{...} // 1 items

远程数据 ​

通过 remote 配置异步加载选项数据,支持 GET/POST 请求及响应字段映射;dependsOn 可实现省市区多级联动。

远程数据 / 民族 / 性别 / 省市联动

自动校验 ​

通过 required: true 自动生成必填校验规则,rules 可添加自定义校验规则,两者自动合并。

required 自动校验 + rules 自定义校验

标题
类型
请选择类型
状态
JSON
1
{...} // 3 items

上传组件 ​

type: 'upload' 支持 headers、data、name、withCredentials 等 el-upload 原生参数透传,通过 responseMapper 提取上传后的文件 ID,通过 previewUrl 配置文件预览接口。

表单中使用 upload 组件

姓名
头像
支持 .jpg,.png,.gif 格式,最多 1 个文件
附件
支持 .jpg,.png,.pdf,.doc,.docx 格式,最多 5 个文件
JSON
1
{...} // 3 items

全局配置 ​

可通过 HxConfigProvider 在应用顶层统一配置 Form 组件的默认值:

vue
<HxConfigProvider :form="{ cols: 4, gap: 12 }">
  <!-- 全局生效 -->
</HxConfigProvider>

配置优先级:Props > ConfigProvider > 默认值,即 Props 传入的值会覆盖全局配置。

通过 ConfigProvider 全局配置 Form 布局

姓名
手机号
所在地区
请选择所在地区
状态
请选择状态
类型
JSON
1
{...} // 5 items

API ​

Props ​

参数说明类型默认值
v-model / modelValue表单数据对象Record<string, any>{}
fields表单字段配置数组FormField[]-
cols栅格列数number3
gap栅格间距(px)number16
minColWidth栅格最小列宽(px)number0
showAction是否显示操作按钮区域booleantrue
labelWidth表单级别 label 宽度string | number-
labelPosition表单级别 label 位置'left' | 'right' | 'top''right'

FormField 类型 ​

通用属性 ​

属性说明类型
prop字段名string
label标签文本string
type字段类型FieldType
defaultValue默认值any
colSpan栅格列跨度number
placeholder占位文本string
clearable是否可清空boolean
disabled是否禁用boolean
hidden是否隐藏boolean
required是否必填(自动生成校验)boolean
labelWidth字段级别 label 宽度(优先级高于表单级别)string | number
labelPosition字段级别 label 位置'left' | 'right' | 'top'

文本输入类(input / textarea) ​

属性说明类型
maxlength最大输入长度number
showWordLimit是否显示字数统计boolean
rows文本域行数(textarea)number
prefixIcon输入框前缀图标类名string
suffixIcon输入框后缀图标类名string
autocomplete自动补全string

数字输入类(number) ​

属性说明类型
min最小值number
max最大值number
step步进值number
precision精度(小数位数)number
stepStrictly是否强制输入值为 step 的倍数boolean

选择类组件(select) ​

属性说明类型
options选项数据OptionItem[] | GroupOptionItem[]
remote远程数据配置RemoteConfig
multiple是否多选boolean
filterable是否可搜索boolean
collapseTags多选时是否折叠 Tagboolean
collapseTagsTooltip多选时是否展示 Tag 的 tooltipboolean
modelValueType值类型:'string' 逗号拼接,'array' 数组'string' | 'array'

单选/多选类(radio / checkbox) ​

属性说明类型
options选项数据OptionItem[]
remote远程数据配置RemoteConfig
variant按钮形态:radio-btn / checkbox-btn'radio' | 'radio-btn' / 'checkbox' | 'checkbox-btn'
modelValueType值类型'string' | 'array'

日期时间类(date / daterange / datetime / datetimerange / time / timerange) ​

属性说明类型
valueFormat值格式化字符串string
format显示格式化字符串string
disableFutureTime是否禁用未来时间(datetime)boolean
disabledDate禁用日期函数(date: Date) => boolean
disabledTime禁用时间函数(time / timerange)() => { hours?: number[]; minutes?: number[]; seconds?: number[] }

上传类(upload) ​

属性说明类型
action上传地址string
accept接受的文件类型string
limit最大上传数量number
headers请求头Record<string, string>
data附带的表单数据Record<string, string | Blob>
name上传的文件字段名string
withCredentials携带 cookieboolean
listType列表展示类型'text' | 'picture' | 'picture-card' | 'file-preview'
autoUpload是否自动上传boolean
valueMapper上传文件值映射函数(file: any) => any
responseMapper上传响应值映射函数(response: any, file: any) => any
previewUrl文件预览接口地址string
deleteUrl文件删除接口地址string
showDownload是否显示下载按钮boolean
fileRender自定义上传文件列表项渲染(file: any, actions: { remove }) => VNode
filePreviewRender自定义上传文件预览渲染(file: any, actions: { remove }) => VNode

其他属性 ​

属性说明类型
cascaderProps级联选择面板配置(cascader)CascaderPanelProps
rules自定义校验规则any[]
componentProps透传给底层组件的属性Record<string, any>
formItemProps透传给 el-form-item 的属性Record<string, any>
onChange值变更回调(value: any, formData: Record<string, any>) => void
richEditorParams富文本编辑器配置(richeditor)RichEditorParams
render自定义渲染函数(type='render')(formData, field) => VNode

FieldType 可选值 ​

input | textarea | number | select | radio | radio-btn | checkbox |
checkbox-btn | switch | cascader | datetime | datetimerange | date |
daterange | time | timerange | upload | richeditor | slot | render

FormExpose ​

通过 ref 获取的方法:

方法说明返回值
validate校验表单,可传入回调函数Promise<boolean>
reset重置表单void
getFormData获取表单数据Record<string, any>
setFormData设置表单数据(用于回填)(data: Partial<Record<string, any>>) => void
getElFormRef获取 el-form 实例any

Slots ​

插槽名说明作用域变量
default默认插槽,渲染自定义表单项-
[prop]渲染指定字段的表单项{ formData, field }
action-buttons操作按钮区域(showAction=false 时不显示){ formData, validate, reset }
search查询按钮区域(位于操作按钮左侧){ formData, validate, reset }

Released under the MIT License.