表单设计器组件,通过可视化方式制作表单页面。

代码演示

基础用法

设计器默认高度是根据父元素高度 100% 渲染的,如果父级元素没有指定高度,可以为设计器指定具体高度

  1. <template>
  2. <fm-making-form
  3. style="height: 700px;"
  4. preview
  5. generate-code
  6. generate-json
  7. >
  8. </fm-making-form>
  9. </template>

自定义操作按钮

image.png

  1. <template>
  2. <fm-making-form
  3. style="height: 700px;"
  4. v-bind="actionButton"
  5. >
  6. <template #action>
  7. <!-- 自定义操作区域插槽 -->
  8. <el-button type="primary">
  9. <el-icon><Upload /></el-icon> 保存
  10. </el-button>
  11. </template>
  12. </fm-making-form>
  13. </template>
  14. <script setup>
  15. import { Upload } from '@element-plus/icons-vue'
  16. import { reactive } from 'vue'
  17. const actionButton = reactive({
  18. clearable: true,
  19. preview: true
  20. })
  21. </script>

设计器左侧字段配置

image.png

左侧中基础字段、高级字段、布局字段可以根据自己的需要分别进行配置。 可以在 字段说明 中查看字段的配置参数

  1. <template>
  2. <fm-making-form
  3. style="height: 500px;"
  4. :basic-fields="['input', 'textarea']"
  5. :advance-fields="['blank', 'fileupload']"
  6. :layout-fields="['grid']"
  7. >
  8. </fm-making-form>
  9. </template>

获取设计器配置

image.png

  1. <template>
  2. <fm-making-form
  3. style="height: 700px;"
  4. ref="makingFormRef"
  5. >
  6. <template #action>
  7. <el-button type="text" @click="handleJson">获取配置</el-button>
  8. </template>
  9. </fm-making-form>
  10. </template>
  11. <script setup>
  12. import { ref } from 'vue'
  13. import { ElMessageBox } from 'element-plus'
  14. const makingFormRef = ref()
  15. const handleJson = () => {
  16. const json = makingFormRef.value.getJSON()
  17. ElMessageBox.alert(json)
  18. }
  19. </script>

导入表单配置

将设计好的表单配置(json)导入到新的设计器中。

需要在设计器初始化完成后导入json,在 ready 事件中进行操作

  1. <template>
  2. <fm-making-form
  3. ref="makingform"
  4. style="height: 700px;"
  5. preview
  6. generate-code
  7. generate-json
  8. @ready="handleFormReady"
  9. >
  10. </fm-making-form>
  11. </template>
  12. <script setup>
  13. import { ref } from 'vue'
  14. const makingform = ref()
  15. const handleFormReady = () => {
  16. const newJson = { "list": [ { "type": "input", "icon": "icon-input", "options": { "width": "", "defaultValue": "", "required": false, "requiredMessage": "", "dataType": "", "dataTypeCheck": false, "dataTypeMessage": "", "pattern": "", "patternCheck": false, "patternMessage": "", "validatorCheck": false, "validator": "", "placeholder": "", "customClass": "", "disabled": false, "labelWidth": 100, "isLabelWidth": false, "hidden": false, "dataBind": true, "showPassword": false, "remoteFunc": "func_f7vuj1ic", "remoteOption": "option_f7vuj1ic" }, "events": { "onChange": "", "onFocus": "", "onBlur": "" }, "name": "Input", "key": "f7vuj1ic", "model": "input_f7vuj1ic", "rules": [] } ], "config": { "labelWidth": 100, "labelPosition": "right", "size": "default", "customClass": "", "ui": "element", "layout": "horizontal", "labelCol": 3, "width": "100%", "hideLabel": false, "hideErrorMessage": false, "eventScript": [ { "key": "mounted", "name": "mounted", "func": "" } ] } }
  17. makingform.value.setJSON(newJson)
  18. }
  19. </script>

初始化表单配置

  1. <template>
  2. <fm-making-form
  3. :global-config="globalConfig">
  4. </fm-making-form>
  5. </template>
  6. <script setup>
  7. const globalConfig = {
  8. // 为设计器配置默认样式表
  9. styleSheets: '.a .el-form-item__label{color: red;}',
  10. // 数据源配置
  11. dataSource: [
  12. {
  13. key: 'getoptions', // 指定的唯一值
  14. name: 'Get Options', // 数据源名称,唯一值
  15. url: 'https://tools-server.making.link/api/new/options', // 请求接口地址
  16. method: 'GET',
  17. auto: true, // 是否表单初始化时发送请求
  18. responseFunc: 'return res.data', // 数据处理函数内容
  19. headers: {}, // 数据请求头部,可选
  20. params: {}, // 数据请求参数,可选,(查询参数)
  21. }
  22. ]
  23. }
  24. </script>

设计器初始化时会自动解析配置的样式表,取出一级类名,在 自定义Class 中进行配置。

表单字段默认配置

可以通过 field-config 对设计器中字段的默认属性进行配置。

  1. <template>
  2. <fm-making-form
  3. :field-config="fieldConfig"
  4. ></fm-making-form>
  5. </template>
  6. <script setup>
  7. const fieldConfig = [
  8. {
  9. type: 'fileupload',
  10. options: {
  11. // 对上传组件地址进行配置
  12. domain: 'https://tcdn.form.making.link/',
  13. action: 'https://tools-server.making.link/api/transfer',
  14. }
  15. },
  16. {
  17. type: 'select',
  18. options: {
  19. // 对下拉框组件配置静态选项数据
  20. options: [
  21. {value: '1111'},
  22. {value: '2222'},
  23. {value: '3333'}
  24. ]
  25. }
  26. }
  27. ]
  28. </script>

更多字段可配置属性可以参考 字段可配置项

字段标识下拉选择绑定

有时候我们在设计表单时,数据字段标识已经指定好,这时候可以通过field-models传入到设计器中,在设计的时候即可通过选择进行字段绑定。
image.png

  1. <template>
  2. <fm-making-form
  3. :field-models="fieldModels"
  4. ></fm-making-form>
  5. </template>
  6. <script setup>
  7. const fieldModels = [
  8. {
  9. fieldId: 'userId'
  10. },
  11. {
  12. fieldId: 'userName',
  13. fieldLabel: '用户名'
  14. }
  15. ]
  16. </script>

API

属性

属性 说明 类型 默认值
preview 预览按钮展示 boolean false
generate-json 生成json操作按钮展示 boolean false
generate-code 生成代码操作按钮展示 boolean false
clearable 清空操作按钮展示 boolean false
upload 导入json操作按钮展示 boolean false
basic-fields 左侧基础字段配置 array -
advance-fields 左侧高级字段配置 array -
layout-fields 左侧布局字段配置 array -
cutom-fields 自定义字段配置 array -
global-config 表单初始化全局配置,配置项参考 Global Config Options object -
field-config 表单字段默认配置项,配置项参考 字段可配置项
name 设计器名称
cache 是否将json缓存到浏览器,可通过配置name属性进行差异化存储 boolean false
json-templates 模板库配置;
{
title: ‘中文模板名称’,
enTitle: ‘英文模板名称’,
json: ‘模板json’,
url: ‘模板预览缩略图’
}
array
init-from-template 初始化时是否开启从模板库选择 boolean false
field-models 字段标识配置,为设计器字段标识提供下拉绑定。
{
fieldId: 绑定字段标识,
fieldLabel: 显示名称
}
array []

插槽

名称 说明
action 设计器头部操作按钮自定义区域

方法

方法名 说明 参数
getJSON 获取设计器配置的 json 数据 () => json object
getHtml 获取设计器生成的代码 (type: html | vue ,
ui: element | antd
) => string
setJSON 设置设计器配置的json数据 (value: string | object)
clear 清空设计器操作 () => void
handleUndo 撤销 () => void
handleRedo 重做 () => void
setSelect 设置设计器目前选中的组件 (field: 字段标识)

事件

事件名 说明 回调参数
ready 设计器初始化完成 -

Global Config Options

参数 说明 类型 默认值
ui 表单设计器使用ui库 element | antd element
width 表单宽度 string 100%
customClass 自定义样式表类名 string
styleSheets 查看 初始化表单配置 string
dataSource 查看 初始化表单配置 array
platform 设备 pc | pad | mobile

字段说明

基础字段

input 单行文本
textarea 多行文本
number 计数器
radio 单选框组
checkbox 多选框组
time 时间选择器
date 日期选择器
rate 评分
color 颜色选择器
select 下拉选择框
switch 开关
slider 滑块
text 文字
html HTML
button 按钮
link 文字链接
cascader 级联选择器
steps 步骤条
treeselect 树选择
transfer 穿梭框

高级字段

blank 自定义区域/插槽
component 自定义组件
fileupload 文件
imgupload 图片
editor 编辑器
table 子表单

布局字段

grid 栅格布局
report 表格布局
tabs 标签页
divider 分割线
inline 行内布局