Skip to content

Schema

ProComponents 的核心是 Schema 配置:通过 valueTypefieldPropsvalueEnum 等字段描述表单项/列,而不用写大量模板。

valueType

valueType 决定渲染哪种 Element Plus 表单控件:

valueType对应组件
inputel-input
selectel-select
cascaderel-cascader
radio-groupel-radio-group
checkbox-groupel-checkbox-group
input-numberel-input-number
switchel-switch
time-selectel-time-select
time-pickerel-time-picker
date-pickerel-date-picker
uploadel-upload
rateel-rate
slot自定义 slot(slot 名为 prop
option操作列(EditableProTable)

也可通过 renderField / renderFormItem 完全自定义。

fieldProps.options

下拉、单选、多选等选项数据放在 fieldProps.options

ts
{
  label: '状态',
  prop: 'status',
  valueType: 'select',
  fieldProps: {
    placeholder: '请选择',
    options: [
      { label: '启用', value: '1' },
      { label: '禁用', value: '0' },
    ],
  },
}

也支持 Select 分组选项(项内含 options 数组)。

valueEnum

valueEnum 用于从枚举快速生成 options,支持 ObjectMap

ts
// Object
valueEnum: {
  open: '未解决',
  closed: '已解决',
}

// Map
valueEnum: new Map([
  ['open', '未解决'],
  ['closed', '已解决'],
])

等价于:

ts
[
  { label: '未解决', value: 'open' },
  { label: '已解决', value: 'closed' },
]

ProTable 中的 valueEnum

在 ProTable 里要区分两个场景:

场景配置
搜索表单下拉fieldProps.options
表格单元格展示valueEnum(把 '1' 显示成「待处理」)

optionLoader

异步加载选项,返回 Promise:

ts
{
  label: '区域',
  prop: 'region',
  valueType: 'select',
  optionLoader: () => fetchRegions().then(list => list),
}

初始值

配置说明
initialValues表单/搜索区整体初始值
initialValue单项初始值,优先级更高

自定义渲染

配置说明
renderLabel自定义 el-form-item 的 label
renderField自定义表单控件(值需写回 form
renderFormItem自定义整个 el-form-item
renderCell自定义表格单元格
renderCellHeader自定义表头

renderField / renderFormItem:若配置了 prop 会自动初始化;否则请在 initialValuesrecordCreatorProps.record 中补默认值。

与 Vue 2 版的差异

  • 包名:@rasmusxiong/element-plus-pro-components
  • 选项写在 fieldProps.options(不再使用顶层 options
  • 事件/属性命名采用 Vue 3 + Element Plus 风格(如 labelPositionmodelValue