Skip to content

高级表单

组件概述

ConfigForm 是一个用于配置表单的 Vue 3 组件,支持动态表单生成、验证逻辑以及自定义样式。适用于需要快速构建复杂表单的场景。

组件路径 src/components/advanced/config-form/config-form.vue

主要功能:

  • 支持动态生成表单项。
  • 支持验证逻辑,支持自定义验证规则。
  • 支持自定义表单组件。
  • 支持自定义表单组件属性,支持自定义组件属性。
  • 支持自定义表单组件事件,支持自定义组件事件。
  • 支持自定义表单组件插槽,支持自定义组件插槽。

组件使用方式

以下是一个简单的示例,展示如何使用 ConfigForm 组件。

vue
<template>
  <div>
      <ConfigForm ref="formRef" v-model:model="model" :fields="formFields">
         <template #status="{ formModel, key }">
            <NSelect :options="options" v-model:value="formModel[key]" />
        </template>
      </ConfigForm>
  </div>
</template>

<script>
import ConfigForm from '@/components/advanced/config-form/config-form.vue';
import { useNaiveForm } from '@/hooks/common/form';

const options = ref([
  {
    label: '选项1',
    value: '1'
  },
  {
    label: '选项2',
    value: '2'
  }
]);

const model = ref({
  name: '',
  status: ''
});

const formFields = useConfigForm<any>(() => ({
  name: {
    key: 'name', 
    label: $t('page.manage.dept.name'),
    type: 'Input',
    required: true, 
    hide: false, 
    props: { 
      maxlength: 20, 
      'show-count': true, 
      placeholder: $t('common.pleaseEnter') + $t('page.manage.dept.name')
      'onUpdate:value': (value: string) => {
        console.log(value);
      }
    }
  },
  status: {
    key: 'status',
    label: $t('page.manage.dept.status'),
    type: 'Select',
    slot: 'status', 
    rules: [
      {
        required: true,
        message: $t('common.pleaseSelect') + $t('page.manage.dept.status'),
        trigger: 'change'
      }
    ],
  },
  roles: {
    key: 'roles',
    label: $t('page.manage.dept.roles'),
    type: 'Radio',
    options: [ 
      {
        label: 'admin',
        value: 'admin'
      },
      {
        label: 'editor',
        value: 'editor'
      }
    ]
  }
}));

const { formRef, validate, restoreValidation } = useNaiveForm();

async function validate() {
  await validate()
}

</script>

ConfigForm Props

属性名类型必填默认值描述
modelany表单参数对象
fieldsConfigFormType表单配置,动态生成表单项
spannumber12布局 与 grid传入 span 一致
labelPlacement'left'/'top'leftlabel 位置
labelWidthnumber/string0label 的宽度 不传入组件内部会自动判断给合理的宽度
requireMarkPlacement'left'/'right'/'right-hanging'right必填的 * 位置

其他属性和 NForm一致。

fields Props

属性名类型必填默认值描述
keystring表单字段 key
labelstring表单字段 label
typestring表单字段类型,对应组件类型 详见 src/components/advanced/config-form/component-map.ts
requiredbooleanfalse是否必填
hideboolean/functionfalse是否隐藏
propsobject组件属性
rulesarray表单字段验证规则
slotstring自定义插槽名称
optionsarray表单字段选项

方法

事件名参数描述
validate() => void表单校验事件
restoreValidation() => void表单信息和校验重置事件

注意

具体使用方式可以参考具体项目内的使用方法

Publish under the MIT license