本期推荐的是一款高效的Vue低代码表单,完全可视化设计,支持一键生成源码——Variant Form。
VForm是一款基于Vue 2、Vue 3的低代码表单,支持Element UI、iView两种UI库(即将支持Ant Design Vue),定位为前端开发人员提供快速搭建表单、实现表单交互和数据收集的功能。
VForm由表单设计器VFormDesigner和表单渲染器VFormRender两部分构成,VFormDesigner通过拖拽组件方式生成JSON格式的表单对象,VFormRender负责将表单JSON渲染为Vue组件。
应用场景:前端代码自动生成、工作流表单设计、业务管理后台表单编辑、通用CRUD新建/编辑表单、数据采集(报名表、申请表、健康日报等等)、问卷调查、低代码开发平台、动态表单定制、移动表单设计。
功能特性
- 拖拽式可视化表单设计,所见即所得
- 丰富的表单组件支持,包含20多种表单基础组件和高级组件
- 支持多种布局容器,包含栅格、表格、页签、子表单
- 暴露组件交互事件,可处理复杂的交互逻辑
- 提供丰富的组件API方法
- 内置axios库,方便跟后端接口集成、交互
- 提供丰富的组件属性设置
- 支持自定义CSS样式设置
- 字段组件支持自定义校验逻辑
- 支持多语言国际化,内置中英文两种语言
- 支持PC/H5两种表单设计模式
- 表单设计支持撤销、重做历史功能
- 良好的开放性,支持扩展组件API方法
- 支持Chrome、FireFox、Safari、Edge等流行浏览器,兼容IE 11浏览器
- 支持浏览器缓存功能,自动保存表单最新状态,无须担心工作成果丢失
- 可导出Vue组件或HTML源码,方便在历史项目中集成
- 一键生成SFC单文件组件代码,支持Vue2、Vue3两个版本
- 栅格容器支持PC/Pad/H5多终端响应式布局
- 内置表单模板功能,常见表单模板化、一键生成
- 支持组件层次结构树视图查看
功能截图
- 拖拽组件
- 预览
- 导入JSON
- 导出JSON
- 导出代码
- 生成SFC
安装VForm
- 方法一
VForm依赖Element UI,需要先安装Element UI。
使用npm:
//安装element-ui
npm i element-ui
//安装VForm
npm i vform-builds
或者使用yarn:
//安装element-ui
yarn add element-ui
//安装VForm
yarn add vform-builds
- 方法二
CDN引入,适合直接在HTML中使用组件。
1. git克隆VFormBuilds:
https://gitee.com/vdpadmin/VFormBuilds
2. 把 dist 目录下6个文件上传到Web服务器或CDN
3. 在HTML中引入js和css,如下所示:
a. 在HTML中使用表单设计器组件VFormDesigner
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>VForm Designer Demo</title>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<link rel="stylesheet" href="VFormDesigner.css?t=20210730"> <!-- 根据Web服务器或CDN路径修改 -->
</head>
<body>
<div id="app">
<v-form-designer ref="VFDesigner"></v-form-designer>
</div>
<script type="text/javascript">
if (!!window.ActiveXObject || "ActiveXObject" in window) { //IE load polyfill.js for Promise
var scriptEle = document.createElement("script");
scriptEle.type = "text/javascript";
scriptEle.src = "https://cdn.bootcss.com/babel-polyfill/6.23.0/polyfill.min.js"
document.body.appendChild(scriptEle)
}
</script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="VFormDesigner.umd.min.js?t=20210730"></script> <!-- 根据Web服务器或CDN路径修改 -->
<script>
new Vue({
el: '#app',
});
</script>
</body>
</html>
b.在HTML中使用表单渲染器组件VFormRender
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>VForm Demo</title>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<link rel="stylesheet" href="VFormRender.css?t=20210730"> <!-- 根据Web服务器或CDN路径修改 -->
<style type="text/css">
</style>
</head>
<body>
<div id="app">
<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>
<script type="text/javascript">
if (!!window.ActiveXObject || "ActiveXObject" in window) { //IE load polyfill.js for Promise
var scriptEle = document.createElement("script");
scriptEle.type = "text/javascript";
scriptEle.src = "https://cdn.bootcss.com/babel-polyfill/6.23.0/polyfill.min.js"
document.body.appendChild(scriptEle)
}
</script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="VFormRender.umd.min.js?t=20210730"></script> <!-- 根据Web服务器或CDN路径修改 -->
<script>
new Vue({
el: '#app',
data: {
formJson: {"widgetList":[],"formConfig":{"labelWidth":80,"labelPosition":"left","size":"","labelAlign":"label-left-align","cssCode":"","customClass":"","functions":"","layoutType":"PC","onFormCreated":"","onFormMounted":"","onFormDataChange":"","onFormValidate":""}},
formData: {},
optionData: {}
},
methods: {
submitForm: function() {
this.$refs.vFormRef.getFormData().then( function(formData) {
// Form Validation OK
alert( JSON.stringify(formData) )
}).catch( function(error) {
// Form Validation Failed
alert(error)
})
}
}
});
</script>
</body>
</html>
更多内容大家可自行前往阅读。