VForm3低代碼初體驗

使用背景

  1. 集團(tuán)需求,希望可以動態(tài)設(shè)計表單影兽,收集所需信息蹂空,報表填寫,定時上交
  2. 那如果我手動寫表單第焰,哪還有摸魚時間

技術(shù)棧

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 組件

它是表單設(shè)計器,就是拖拽設(shè)計的部分湘纵,設(shè)計完成脂崔,生成特定的 json 數(shù)據(jù)結(jié)構(gòu),頁面才可以用另一個組件加載出來梧喷,體驗一下就知道了

在 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復(fù)位為你的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;  /* 如果頁面出現(xiàn)垂直滾動條屁擅,則加入此行CSS以消除之 */
}

</style>

使用 VFormRender 組件

它是表單渲染的,利用上面設(shè)計器組件生成的 json 數(shù)據(jù)結(jié)構(gòu)秤朗,渲染出表單內(nèi)容

重要提示:如果你在項目中已按照上一節(jié)文檔注冊了VFormDesigner組件煤蹭,則不再需要注冊VFormRender組件。僅當(dāng)在項目中獨立使用VFormRender組件(即項目中不含表單設(shè)計器)時才需要注冊取视。

在 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復(fù)位為你的axiosW魈贰稽物! */
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是指表單設(shè)計器導(dǎo)出的json,此處演示的formJson只是一個空白表單jsonU矍贰贝或! */
  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) => {
    // 根據(jù) JSON 結(jié)構(gòu),渲染出頁面表單
    vFormRef.value.setFormJson(res.formConfigDto)
    // 根據(jù)數(shù)據(jù)渲染出頁面填入的值锐秦,填過
    nextTick(() => {
        vFormRef.value.setFormData(res.formDataDto)
        nextTick(() => {
            // 填過的數(shù)據(jù)展示給人的時候咪奖,禁用表單,不能更改
          vFormRef.value.disableForm()
        })
      })
  })
}
</script>

官方

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

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

高級例子后面用到會繼續(xù)補(bǔ)寫文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羊赵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扇谣,更是在濱河造成了極大的恐慌昧捷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐寨,死亡現(xiàn)場離奇詭異靡挥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸯绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門跋破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓶蝴,你說我怎么就攤上這事幔烛。” “怎么了囊蓝?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵饿悬,是天一觀的道長。 經(jīng)常有香客問我聚霜,道長狡恬,這世上最難降的妖魔是什么珠叔? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮弟劲,結(jié)果婚禮上祷安,老公的妹妹穿的比我還像新娘。我一直安慰自己兔乞,他們只是感情好汇鞭,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庸追,像睡著了一般霍骄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淡溯,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天读整,我揣著相機(jī)與錄音,去河邊找鬼咱娶。 笑死米间,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膘侮。 我是一名探鬼主播屈糊,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琼了!你這毒婦竟也來了另玖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤表伦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后慷丽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹦哼,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年要糊,在試婚紗的時候發(fā)現(xiàn)自己被綠了纲熏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锄俄,死狀恐怖局劲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奶赠,我是刑警寧澤鱼填,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站毅戈,受9級特大地震影響苹丸,放射性物質(zhì)發(fā)生泄漏愤惰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一赘理、第九天 我趴在偏房一處隱蔽的房頂上張望宦言。 院中可真熱鬧,春花似錦商模、人聲如沸奠旺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽响疚。三九已至,卻和暖如春嫂沉,著一層夾襖步出監(jiān)牢的瞬間稽寒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工趟章, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留杏糙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓蚓土,卻偏偏與公主長得像宏侍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜀漆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容