Skip to content

表单组件

提示

默认组件支持所有 el-from 的表单组件,另可自行扩展 v3-form 支持的组件

默认组件

el-form 的所有表单组件已支持

对应关系如下

input -> el-input
select -> v3-select // 自定义组件
selectv2 -> el-select-v2
date -> el-date-picker
radio -> v3-radio-group // 自定义组件
checkbox -> el-checkbox
checkbox-group -> v3-checkbox-group // 自定义组件
cascader -> el-cascader
textarea -> el-input // 默认 type: 'textarea'
number -> el-input-number
uploadImg -> v3-upload-img // 自定义组件
uploadFile -> v3-upload-file //自定义尚未完善

前面名称就是表单 json 数组中 tag 的属性值

js
const formItems = [
  {
    tag: "select",
    attrs: {
      //支持表单组件的所有属性 此处支持v3-select以及el-selete的所有属性
    },
  },
  // 其余相同
];

可扩展组件

现有组件无法满足需求时,可自行扩展组件,组件放在 src/components/v3-form-item 下面。以 v3-select 自定义组件为例

INFO

const value = defineModel() 此 value 为表单值 与 form 表单的值进行绑定
subProps 中可设置 label 对应的字段,value 对应的字段,disabled 对应的字段

vue
// src/components/v3-form-item/v3-select
<template>
  <el-select v-bind="$attrs" v-model="value">
    <el-option
      v-for="option in $attrs.options"
      :key="`${option[subProps.value]}${option[subProps.label]}`"
      :label="option[subProps.label]"
      :value="option[subProps.value]"
      :disabled="option[subProps.disabled] || false"
    />
  </el-select>
</template>

<script setup name="v3-select">
defineProps({
  subProps: {
    type: Object,
    default: () => ({
      label: "label",
      value: "value",
      disabled: "",
    }),
  },
});

const value = defineModel();
</script>

编写好组件进行配置,让 v3-form 进行识别

js
// src/components/v3-form-item/map-form-item.js

//获取组件
export function formItemComponents() {
  const components = {
    ...
    'v3-select': defineAsyncComponent(() => import('./v3-select.vue'))
  }
  return components
}

// 配置组件映射
const componentMap = {
  ...

  'select': {
    component: 'v3-select',
    attrs: {
      //此处可设置默认属性
      placeholder: '请选择',
      clearable: true,
      filterable: true
    }
  }
}