Skip to content

FastForm 配置驱动表单

通过一份 schema 配置描述表单结构,自动渲染对应控件、栅格布局与校验规则,免去手写大量 c-form-item 的重复劳动。底层基于 c-form / c-form-item 实现。

基础用法

传入 model(数据对象)与 schema(表单结构)即可。控件的值会自动双向写回 model,无需为每个字段手写 v-model

全部控件类型

下面演示了 schema 支持的全部内置控件。select / radio / checkbox / cascader 通过 options 提供选项,treeselect 通过 props.data 提供树数据。

表单校验

设置 required: true 会自动追加一条必填规则;更复杂的规则通过 rules 配置,结构与 c-form-itemrules 一致。通过组件实例的 validate() 方法触发校验,返回 Promise<boolean>

栅格布局

通过表单级 span(默认 24,即整行)与每项的 span 控制列宽(取值 1-24),配合 gutter 设置列间距,可轻松实现多列表单。单项的 span 会覆盖表单级默认值。

联动控制

disabledhidden 支持函数式写法,入参为当前 model,可据此实现表单项之间的联动显隐 / 禁用。下例中“会员编号”仅在开启 VIP 时显示,“门店”仅在渠道为线下时可填。

自定义插槽

当内置控件无法满足需求时,将 type 设为 slot,并通过 slot 指定插槽名(默认取 field)。插槽作用域提供 itemmodelvalue,可在其中渲染任意自定义内容。

内置操作区

设置 show-actions 显示内置的提交 / 重置按钮。点击提交会先校验,通过后触发 submit 事件并携带表单数据;点击重置会清空字段、恢复默认值并触发 reset 事件。按钮文案可通过 submit-text / reset-text 自定义,show-reset 可隐藏重置按钮。

实例方法

通过 ref 获取组件实例,调用暴露的方法进行校验、重置、清空校验或读取数据。

控件类型映射

type 支持以下取值,分别渲染不同的底层组件:

type渲染组件选项来源说明
inputc-input文本输入框
textareac-input多行文本
passwordc-input密码框(带显隐切换)
numberc-input数字输入框
selectc-selectoptions下拉选择
radioc-radio-groupoptions单选组
checkboxc-checkbox-groupoptions多选组
switchc-switch开关
datec-date-picker日期选择
daterangec-date-range-picker日期范围
cascaderc-cascaderoptions级联选择
treeselectc-tree-selectprops.data树形选择
ratec-rate评分
colorc-color-picker颜色选择
slot自定义插槽

控件的专属属性通过表单项的 props 透传,原生事件通过 on 透传:

ts
{
  field: "tel",
  type: "input",
  label: "电话",
  props: { clearable: true, maxlength: 11 },   // 透传给 c-input 的 props
  on: { blur: () => console.log("失焦") },      // 透传给 c-input 的事件
}

API

Props

属性说明类型默认值
model表单数据对象Record<string, any>{}
schema表单结构配置FastFormItem[][]
label-width标签宽度string | number'100px'
label-position标签位置'left' | 'right' | 'top''right'
size控件尺寸'large' | 'default' | 'small''default'
disabled是否整体禁用booleanfalse
gutter栅格列间距number0
span默认每项占据的栅格列数number24
show-actions是否显示内置操作区booleanfalse
show-reset是否显示重置按钮booleantrue
submit-text提交按钮文案string'提交'
reset-text重置按钮文案string'重置'

FastFormItem 配置项

字段说明类型
field字段名,对应 model 中的 keystring
type控件类型FastFormItemType
label标签文本string
placeholder占位提示string
defaultValue默认值(model 中无该字段时写入)any
required快捷必填(自动追加一条 required 规则)boolean
rules校验规则,透传给 FormItemFormRule | FormRule[]
options选项数据(select/radio/checkbox/cascader)FastFormOption[]
props透传给底层控件的 propsRecord<string, any>
on透传给底层控件的事件Record<string, Function>
span栅格列宽(1-24)number
labelWidth单独设置标签宽度string | number
slottype 为 slot 时的插槽名(默认取 field)string
disabled是否禁用,支持函数式联动boolean | ((model) => boolean)
hidden是否隐藏,支持函数式联动boolean | ((model) => boolean)

FastFormOption

字段说明类型
label选项文本string
value选项值string | number | boolean
disabled是否禁用boolean

Events

事件名说明回调参数
change任意字段变更(field: string, value: any, model: object)
submit校验通过后提交(model: object)
validate-error校验失败(errors: any[])
reset重置

实例方法(Expose)

方法说明签名
validate校验整个表单() => Promise<boolean>
validateField校验单个字段(field: string) => Promise<boolean>
clearValidate清空校验状态(fields?: string | string[]) => void
resetFields重置字段并恢复默认值() => void
getModel获取当前表单数据() => Record<string, any>
formRef底层 CForm 实例Ref

Slots

插槽名说明作用域参数
自定义插槽名type: 'slot' 的表单项 slot 字段指定{ item, model, value }