基于antd的动态表单

819 阅读1分钟

基于antd的动态表单

增加代码可读性便于维护
建议实现简单的表单效果 例如:两行左右布局 效果

image.png 根据数据来源for循环出表单内容

 <a-form
      :model="form"
      :rules="formRules"
      :label-col="labelCol"
      :wrapper-col="wrapperCol"
    >
      <a-form-item
        v-for="(item,index) in relationForm"
        :key="index"
        :name="item.name"
        :label="item.label"
      >
      <template v-if="item.type === 'select'">
        <Select
          v-bind="item.bind || {}"
          :customType="'type'"
          style="width: 412px"
          v-model:value="form[item.key]"
        />
      </template>
      <template v-else-if="item.type === 'input'">
        <a-input
          v-model:value="form[item.key]"
          style="width: 412px"
          v-bind="item.bind || {}"
        />
      </template>
      </a-form-item>
    </a-form>

驱动数据
bind 里面可以引用组件使用的参数

const form = ref([])

const relationForm = ref([
  {
    type: 'select',
    label: '类型',
    value: '',
    bind: {
      placeholder: '请选择类型'
    },
    key: 'typeName',
    name: 'typeName'
  },
  {
    type: 'input',
    label: '名称',
    value: '',
    bind: {
      placeholder: '请输入名称'
    },
    key: 'name',
    name: 'name'
  },
  {
    type: 'input',
    label: '版本',
    value: '',
    bind: {
      placeholder: '请输入版本'
    },
    key: 'version',
    name: 'version'
  }
])

const formRules = reactive({
  name: [
    { required: true, message: '名称不能为空', trigger: 'blur' }
  ],
  version: [
    { required: true, message: '版本不能为空', trigger: 'blur' }
  ]
})