Skip to content

witDesignForm 表单设计器

witDesignForm 是一个基于 Vue 3 和 Element Plus 构建的可视化表单设计器组件库,提供了表单设计和表单渲染两大核心功能。组件支持拖拽式表单设计、丰富的表单控件、布局设置、表单验证等功能,可用于快速构建各类复杂表单。

用法实例

表单设计器(DesignForm)

vue
<template>
  <div class="design-form-container">
    <DesignForm
      v-model="formConfig"
      :fields="customFields"
      @save="handleSave"
      @preview="handlePreview"
    />
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { DesignForm, basicFields } from './plugins/witDesignForm'

const formConfig = ref({
  fields: [],
  config: {
    labelWidth: 100,
    labelPosition: 'right'
  }
})

// 自定义字段
const customFields = ref([
  ...basicFields,
  // 可添加自定义字段
])

// 保存表单配置
const handleSave = (config) => {
  console.log('表单配置已保存:', config)
  // 保存到后端或本地存储
}

// 预览表单
const handlePreview = (config) => {
  console.log('预览表单:', config)
  // 打开预览窗口
}
</script>

<style scoped>
.design-form-container {
  width: 100%;
  height: 800px;
}
</style>

表单生成器(GenerateForm)

vue
<template>
  <div class="generate-form-container">
    <GenerateForm
      v-model="formData"
      :config="formConfig"
      :rules="formRules"
      @submit="handleSubmit"
    />
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { GenerateForm } from './plugins/witDesignForm'

// 从后端或本地存储获取的表单配置
const formConfig = ref({
  fields: [
    {
      type: 'input',
      label: '姓名',
      field: 'name',
      placeholder: '请输入姓名',
      required: true
    },
    {
      type: 'select',
      label: '性别',
      field: 'gender',
      options: [
        { label: '', value: 'male' },
        { label: '', value: 'female' }
      ]
    },
    {
      type: 'date-picker',
      label: '出生日期',
      field: 'birthday',
      valueFormat: 'YYYY-MM-DD'
    }
  ],
  config: {
    labelWidth: 120,
    labelPosition: 'left'
  }
})

// 表单数据
const formData = ref({
  name: '',
  gender: '',
  birthday: ''
})

// 表单验证规则
const formRules = ref({
  name: [
    { required: true, message: '请输入姓名', trigger: 'blur' }
  ]
})

// 提交表单
const handleSubmit = (data) => {
  console.log('表单提交:', data)
  // 处理表单提交逻辑
}
</script>

<style scoped>
.generate-form-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}
</style>

API

组件

组件名描述
DesignForm表单设计器组件,用于可视化设计表单
GenerateForm表单生成器组件,用于渲染设计好的表单

导出配置

配置名类型描述
basicFieldsArray基础表单字段配置列表
advanceFieldsArray高级表单字段配置列表
layoutFieldsArray布局字段配置列表

DesignForm 属性

属性名类型默认值描述
modelValueObject{ fields: [], config: {} }表单配置数据
fieldsArray[]可用的表单字段列表
defaultConfigObject{}默认表单配置
readOnlyBooleanfalse是否只读模式

DesignForm 事件

事件名描述参数
update:modelValue表单配置变化时触发最新的表单配置对象
save保存按钮点击时触发当前表单配置对象
preview预览按钮点击时触发当前表单配置对象
add-field添加字段时触发添加的字段配置
remove-field删除字段时触发删除的字段索引

GenerateForm 属性

属性名类型默认值描述
modelValueObject{}表单数据对象
configObject{}表单配置对象
rulesObject{}表单验证规则
disabledBooleanfalse是否禁用表单
loadingBooleanfalse是否加载中状态

GenerateForm 事件

事件名描述参数
update:modelValue表单数据变化时触发最新的表单数据对象
submit表单提交时触发当前表单数据对象
reset表单重置时触发-
validate表单验证时触发验证结果

字段类型

基础字段(basicFields)

字段类型描述
input单行文本输入框
textarea多行文本输入框
select下拉选择框
radio单选框
checkbox多选框
switch开关
slider滑块
number数字输入框

高级字段(advanceFields)

字段类型描述
date-picker日期选择器
datetime-picker日期时间选择器
time-picker时间选择器
upload文件上传
rate评分
color-picker颜色选择器
transfer穿梭框
cascader级联选择器

布局字段(layoutFields)

字段类型描述
row行布局
column列布局
divider分割线
space间距
card卡片

表单配置

表单配置项

配置项类型默认值描述
labelWidthNumber/String100标签宽度
labelPositionString'right'标签位置(left/right/top)
sizeString'default'表单尺寸(large/default/small)
hideRequiredAsteriskBooleanfalse是否隐藏必填字段的星号
showMessageBooleantrue是否显示验证消息
inlineBooleanfalse是否为行内表单

字段配置项

配置项类型默认值描述
typeString'input'字段类型
labelString''字段标签
fieldString''字段名
placeholderString''占位符
requiredBooleanfalse是否必填
disabledBooleanfalse是否禁用
readonlyBooleanfalse是否只读
defaultValueAnyundefined默认值
widthNumber/Stringundefined字段宽度
optionsArray[]选择器选项(select/radio/checkbox)
rulesArray[]字段验证规则

TIP

  1. witDesignForm 提供了可视化表单设计和表单渲染两大核心功能,可快速构建各类复杂表单。
  2. 支持丰富的字段类型,包括基础字段、高级字段和布局字段,满足各种表单需求。
  3. 表单配置采用 JSON 格式,便于存储和传输,支持动态加载和渲染。
  4. 集成了 Element Plus 组件库,提供一致的 UI 风格和良好的用户体验。
  5. 支持自定义字段扩展,可根据业务需求添加特定的表单控件。

湘ICP备2024070110号