VForm3低代码初体验

使用背景

  1. 集团需求,希望可以动态设计表单,收集所需信息,报表填写,定时上交
  2. 那如果我手动写表单,哪还有摸鱼时间

技术栈

vue3 + elementUI-plus

展示

test_demo.gif

安装使用

方式一

npm i vform3-builds

方式二

  1. 拉取官方源码 https://gitee.com/vdpadmin/variant-form3-vite

  2. 运行官方源码,打包 lib,会在 dist 文件中分别生成四个文件

    designer.style.css
    designer.umd.js
    render.style.css
    render.umd.js
    

    引入到项目放在 /lib/vform

  3. main.js 中引入上述四个文件,使用方式参考下方文档

注意:VForm 3依赖Element Plus,需要先安装Element Plus

使用 VFormDesigner 组件

它是表单设计器,就是拖拽设计的部分,设计完成,生成特定的 json 数据结构,页面才可以用另一个组件加载出来,体验一下就知道了

在 main.js 中引入

import ElementPlus from 'element-plus'  //引入element-plus库
import VForm3 from 'vform3-builds'  //引入VForm3库

import 'element-plus/dist/index.css'  //引入element-plus样式
import 'vform3-builds/dist/designer.style.css'  //引入VForm3样式

const app = createApp(App)
app.use(ElementPlus)  //全局注册element-plus
app.use(VForm3)  //全局注册VForm3(同时注册了v-form-designe、v-form-render等组件)

/* 注意:如果你的项目中有使用axios,请用下面一行代码将全局axios复位为你的axios!! */
window.axios = axios
app.mount('#app')

在 vue 模板中使用

<template>
  <v-form-designer></v-form-designer>
</template>

<script setup>
</script>

<style lang="scss">
body {
  margin: 0;  /* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */
}

</style>

使用 VFormRender 组件

它是表单渲染的,利用上面设计器组件生成的 json 数据结构,渲染出表单内容

重要提示:如果你在项目中已按照上一节文档注册了VFormDesigner组件,则不再需要注册VFormRender组件。仅当在项目中独立使用VFormRender组件(即项目中不含表单设计器)时才需要注册。

在 main.js 中引入

import { createApp } from 'vue'
import App from './App.vue'
import axios from 'axios'  //如果需要axios,请引入

import ElementPlus from 'element-plus'  //引入element-plus库
import VFormRender from 'vform3-builds/dist/render.umd.js'  //引入VFormRender组件

import 'element-plus/dist/index.css'  //引入element-plus样式
import 'vform3-builds/dist/render.style.css'  //引入VFormRender样式

const app = createApp(App)
app.use(ElementPlus)  //全局注册element-plus
app.use(VFormRender)  //全局注册VFormRender等组件
/* 注意:如果你的项目中有使用axios,请用下面一行代码将全局axios复位为你的axios!! */
window.axios = axios
app.mount('#app')

在 vue 模板中使用

<template>
  <div>
    <v-form-render :form-json="formJson" :form-data="formData" :option-data="optionData" ref="vFormRef">
    </v-form-render>
    <el-button type="primary" @click="submitForm">Submit</el-button>
  </div>
</template>

<script setup>
  import { ref, reactive } from 'vue'
  import { ElMessage } from 'element-plus'

  /* 注意:formJson是指表单设计器导出的json,此处演示的formJson只是一个空白表单json!! */
  const formJson = reactive({"widgetList":[],"formConfig":{"modelName":"formData","refName":"vForm","rulesName":"rules","labelWidth":80,"labelPosition":"left","size":"","labelAlign":"label-left-align","cssCode":"","customClass":"","functions":"","layoutType":"PC","jsonVersion":3,"onFormCreated":"","onFormMounted":"","onFormDataChange":"","onFormValidate":""}})
  const formData = reactive({})
  const optionData = reactive({})
  const vFormRef = ref(null)

  // 显示弹框
function show(row) {
  showDialog.value = true
  reportName.value = row.reportName

  http('detail', { formDataId: row.formDataId }).then((res) => {
    // 根据 JSON 结构,渲染出页面表单
    vFormRef.value.setFormJson(res.formConfigDto)
    // 根据数据渲染出页面填入的值,填过
    nextTick(() => {
        vFormRef.value.setFormData(res.formDataDto)
        nextTick(() => {
            // 填过的数据展示给人的时候,禁用表单,不能更改
          vFormRef.value.disableForm()
        })
      })
  })
}
</script>

官方

https://www.yuque.com/visualdev/vform3/using-render

如有不懂可以下方留言,或者查看官方文档

高级例子后面用到会继续补写文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容