Skip to content

概述

更新: 7/29/2025 字数: 0 字 时长: 0 分钟

常见的表单组件封装。

配置字段

fragmentKey

组件映射字段。

fragmentKey描述
renderInput输入框
renderInputNumber可计数的输入框
renderTextarea文本域
renderSelect下拉选择器
renderMonthPicker月份选择器
renderDatePicker日期选择器
renderRangePicker日期范围选择器
renderCheckbox多选框
renderRadio单选框
renderSwitchswith切换器
renderCascader级联选择器
renderUpload文件上传

key

双向绑定中的对应字段,配置了 key 可以不用再配置 name 属性。

originProps

对表单项 a-form-item的一些属性配置,比如 label、name等。

elProps

ant-design-vue表单组件的props配置,比如a-inupt中传递 placeholderallowClear

所有组件 elProps 默认配置如下。

ts
{
  allowClear: true,
  style: { width: '100%' },
  placeholder: '请输入',
};

renderRangePicker, renderDatePicker时间类型的组件,增加了如下默认配置。

ts
{
  allowClear: true,
  style: { width: '100%' },
  valueFormat: 'YYYY-MM-DD',
  format: 'YYYY-MM-DD',
  placeholder: undefined
}

/** 当配置了showTime:true属性时,设置了如下默认配置: */
{
  allowClear: true,
  style: { width: '100%' },
  valueFormat: 'YYYY-MM-DD HH:mm:ss',
  format: 'YYYY-MM-DD HH:mm:ss',
  placeholder: undefined
}

renderMonthPicker选择月份组,增加了如下默认配置。

ts
{
  allowClear: true,
  style: { width: '100%' },
  valueFormat: 'YYYY-MM',
  format: 'YYYY-MM',
  placeholder: '请选择'
}

options

配置下拉选项。

setOption

设置下拉选项,通过异步发请求去获取,返回值会被设置为 option

display

是否显示此表单,返回布尔值。

everyTimeLoad

是否每次点击都请求url,用于下拉和级联等组件去实时更新下拉选项。

mountedLoad

在组件挂载阶段自动请求一次 setOption方法。

colProps

Col栅格配置。如:

ts
colProps: {
  // span:12
  xs: 24,
  sm: 24,
  md: 24,
  lg: 16,
  xl: 12,
  xxl: 12,
}

uploadConfig

RUpload配置项。

rangePickerConfig

RRangePicker配置项。带tab时间控件的renderRangePicker组件,默认占两个搜索项的宽度。

changeHandler

组件的内部change事件向外扩散,如selectcascader

除了组件库导出的参数外,还额外导出了一个setCurrentValue,用于设置当前的值;cascader还多导出了一个options。
如果是动态表单,changeHandler 则会额外传入 setForm 函数,方便动态改变 form 值。

ts
changeHandler: ({ value, options, setCurrentValue, selectedOptions }) => {
  //...
},

动态场景

r-from 支持动态表单主要用于动态下拉,动态显示等。

动态下拉

后者的下拉依赖于前者的选项值,此时可以使用 setOption 来动态设置,此函数调用时会传入 2 个参数。第一个是 form 表单的值,第二个是依赖值,根据表单的某一项值来动态返回 option 即可。

由于每次后者选项每次都是应该是最新的,需设置 everyTimeLoad: true

ts
const optionData = await setOption(props.form!, props.config.deps?.map(d => unref(d)) || []);

动态显示

有时候一些搜索表单是有权限的,通过 display 来控制表单的显隐。此函数调用时会传入两个参数,可以根据参数去动态决定,同时也可以通过依赖注入的方式,在第二个参数获取依赖值来判断。

注意⚠️,在注入依赖时必须注入 Ref 对象,否则会失去响应式。

ts
const bool = ref(false)
// ✅
const deps = { select: [ bool ]}
// 🙅‍♂️
const deps = { select: [ bool.value ]}

调用函数

ts
!item.display || (isFunction(item.display) && item.display!(formData.value, deps?.map(d => unref(d)) || []))

示例

动态表单

表单验证

通过 formRef 来进行表单验证。

基本使用

Input 配置生成示例。

带请求的下拉

时间筛选

分组选择

级联

上传文件

具体配置参考 Upload 文档

API

Props

属性描述类型默认值
value (v-model)表单对象Record<string, any>
form-group表单配置FormGroupItem[]
originPropsform-item 标签属性FormProps
rowProps行配置RowProps
grid是否栅格布局Booleantrue
gridConfig栅格配置GridConfig
formDependencies动态表单依赖项Record<string,any[]>{}
buttonColProps按钮的 Col 栅格配置ColPropsspan:24
unfold“更多筛选”按钮展开的数量number