用Props传JSON配置驱动表单动态渲染,统一管理结构、校验、交互;支持动态组件、字段级显隐禁用、配置即文档,运营可后台编辑免发版。
用 Props 传配置,让表单“长”出来——这是前端提效的关键一招。核心不是写一堆 v-if,而是把表单结构、校验规则、默认值、交互逻辑都收口到一个 JSON 配置里,组件只负责“读懂”并渲染它。
每个字段配置至少包含:key(唯一标识)、label(显示名)、type(输入类型)、props(透传给底层组件的属性)、rules(校验规则)。比如:
<el-input>,props 可带 placeholder、maxlength
<el-select>,props 带 options 数组和 value-key
format、value-format,支持范围选择或单选v-for + component :is
不写 N 个 v-if 分支,而是统一用动态组件:
formConfig 数组,用 <component :is="getComponentType(item.type)" v-bind="item.props" v-model="formData[item.key]"></component>
getComponentType 是个映射函数,返回 "el-input"、"el-date-picker" 等字符串表单校验不手写 this.$refs.form.validate(),而是基于配置自动组装:
rules 合并进 el-form 的 :rules 对象,key 为字段 key
validate,通过后触发 @submit 事件,传入 formData 和原始配置项,后端能直接按 key 映射字段disabled: true 或 hidden: true,组件内统一响应运营或产品同学可在管理后台编辑 JSON 配置(或可视化表单生成器),发布后前端实时拉取,无需发版:
hidden: true
env: ["prod", "beta"],组件根据环境过滤渲染