Skip to content

CommonForm 表单组件

CommonForm 是一个基于配置生成的动态表单组件,适合查询、录入、编辑和审批等场景。你只需要维护字段配置,就可以快速生成统一风格的表单。

主要特性:

  • 通过配置驱动表单结构生成
  • 内置常见字段类型,覆盖大多数业务表单需求
  • 支持 Element Plus 校验规则
  • 支持具名插槽自定义字段渲染
  • 通过 ref 暴露 FormInstance 方法和 formData

基础用法

基础示例展示了查询/录入场景最常见的字段组合,适合作为业务表单的起点。

联系人
客户等级
跟进日期
跟进状态
关注渠道
订阅提醒
开启
展开代码
复制代码

表单校验

支持在字段配置中直接声明规则,适合登录、注册、编辑等需要完整校验的场景。

适合注册或账号管理场景,示例展示了必填、长度校验和跨字段校验。

登录账号
登录密码
确认密码
展开代码
复制代码

布局方式

行内表单

适合查询栏、筛选器等字段较少的场景。

行内表单更适合查询条件较少的列表页,能节省页面纵向空间。

关键词
线索来源
请选择线索来源
创建日期
跟进状态
展开代码
复制代码

标签位置

支持 leftrighttop 三种标签位置。

标签位置会直接影响表单阅读节奏,详情页和录入页常见用法如下。

项目名称
负责人邮箱
项目状态
请选择项目状态
展开代码
复制代码

自定义插槽

使用字段 prop 作为插槽名,按需覆盖单个字段的渲染方式。

当内置组件不满足需求时,可以按字段名提供插槽,自定义任意表单项内容。

客户名称
备注信息
自定义备注输入框
服务评分
4
展开代码
复制代码

动态表单

可以根据当前字段值动态追加或移除表单项。

根据已填写的字段动态增减表单项,适合企业/个人切换、复杂审批单等场景。

主体类型
联系人
展开代码
复制代码

树选择与上传

适合组织架构、分类树、附件和图片等后台表单高频场景。

`tree-select` 适合部门、分类、区域等树形数据;`upload` 适合附件、图片和导入文件场景。

归属部门
附件资料

示例中的上传组件使用 `auto-upload=false`,仅展示文件选择与列表管理。

展开代码
复制代码

自定义组件

除了内置类型,也可以直接传入任意 Vue 组件作为表单控件。

除了内置字段类型,你也可以把任意 Vue 组件直接作为表单控件接入。

模板名称
库存预警值
服务评分
4
主题色
展开代码
复制代码

暴露方法

通过 ref 可以访问内部 FormInstance 方法,并读取当前表单数据。

通过 `ref` 可以直接调用内部表单实例方法,适合复杂页面中的联动控制。

负责人
邮箱地址
展开代码
复制代码

API

Props

参数说明类型默认值
form表单项配置数组CommonFormItemArray<T>[]
loading提交按钮 loading 状态,支持 v-model:loadingbooleanfalse
inline是否使用行内表单布局booleantrue

除以上字段外,组件还支持大部分 Element Plus ElForm 原生属性,例如 label-widthlabel-positionsizedisabled 等。

表单项配置

参数说明类型
is字段组件类型,支持内置标识或自定义组件string | Component
label字段标签string
prop字段名string | keyof T
props透传给字段组件的属性object
initialValue字段初始值any
formItem透传给 ElFormItem 的额外配置Partial<FormItemProps>

内置字段类型

  • input
  • input-number
  • select
  • date-picker
  • time-picker
  • cascader
  • tree-select
  • radio
  • check-box
  • switch
  • upload

Slots

插槽名与字段 prop 一致。

参数说明
props当前字段的 props 配置
value当前字段值
updateValue更新字段值的方法

Exposes

名称说明
formData当前响应式表单数据
validate校验整个表单
validateField校验指定字段
resetFields重置表单
clearValidate清除校验结果
scrollToField滚动到指定字段

TypeScript 类型

ts
import type {
  CommonFormProps,
  CommonFormItemArray,
  CommonFormExpose,
} from '@yetuzi/vue3-query-components'
ts
interface CommonFormProps<T> {
  form?: CommonFormItemArray<T>
}

interface CommonFormExpose<T> extends FormInstance {
  formData: Reactive<CommonFormData<T>>
}

参考

MIT Licensed