1.0.5 • Published 10 months ago
ef-design v1.0.5
formDesign npm包
一个基于element plus+vue3的的可拖拽表单组件
1. 安装
npm i ef-design
yarn add ef-design
pnpm add ef-design
2. 使用
2.1 手动全引入
#在vue3项目中的main.ts文件中手动引入
import efDesign from 'ef-design';
#加载样式
import "ef-design/dist/design.css";
const app = createApp(App);
app.use(efDesign);
#加载element plus,否则dom节点无法正常渲染
app.use(ElementPlus);
app.mount("#app");
2.2. 在Vue 3.x模板中使用表单设计器组件
<template>
<div class="layout-tab-box">
<form-design ref="formDesignRef" :form-data-selected="formDataSelected" :form-data-all="formJson"></form-design>
<el-button type="primary" @click=" <el-button type="primary" @click="submitForm">Submit</el-button>
">Submit</el-button>
</div>
<script setup>
const formDesignRef = ref(null)
const sourceData = {"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":""}}
const formDataSelected = reactive(parentTemplate); //所有模版数据
const formDataAll = reactive(sourceData.widgetList) // 已选项
const submitForm = () => {
let tempData = formDesignRef.value.getFormJson();
console.log('template data:', tempData);
}
</script>
<style lang="scss" scoped>
.layout-tab-box{
height: calc(100vh - 225px);
}
</style>
2.3. 在Vue 3.x模板中使用表单渲染器组件
<template>
<div>
<form-render :form-json="formJson" :form-data="formData" :option-data="optionData" ref="vFormRef">
</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'
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":""}})
const formData = reactive({})
const optionData = reactive({})
const formRef = ref(null)
const submitForm = () => {
formRef.value.getFormData().then(formData => {
// Form Validation OK
alert( JSON.stringify(formData) )
}).catch(error => {
// Form Validation failed
ElMessage.error(error)
})
}
</script>
2.4 资源链接
vForm3:https://www.vform666.com/
二次开发:https://www.ganweicloud.com/docs/6.1.0/pages/d3e6d9/#%E8%A1%A8%E5%8D%95%E7%BB%84%E4%BB%B6
3. 注意事项
可能有样式问题,建议在外层包一层div,再覆盖样式