UNPKG

@cdzhxx/customform_build

Version:

Custom Form Designer

71 lines (57 loc) 1.87 kB
# 基于vue3.2的自定义表单组件 #### 1. 引入并全局注册组件 ```js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' //引入element-plus库 import 'element-plus/dist/index.css' //引入element-plus样式 import CustomForm from '@cdzhxx/custom_form' import '@cdzhxx/custom_form/dist/designer.style.css' const app = createApp(App) app.use(ElementPlus) //全局注册element-plus app.use(CustomForm) app.mount('#app') ``` <br/> #### 2. 在Vue 3.x模板中使用表单设计器组件 ```html <template> <CustomFormDesigner ref="vfdRef"></CustomFormDesigner> </template> <script setup> const vfdRef = ref(null) </script> <style lang="scss"> body { margin: 0; /* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */ } </style> ``` <br/> #### 3. 在Vue 3.x模板中使用表单渲染器组件 ```html <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' 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 vFormRef = ref(null) const submitForm = () => { vFormRef.value.getFormData().then(formData => { // Form Validation OK alert( JSON.stringify(formData) ) }).catch(error => { // Form Validation failed ElMessage.error(error) }) } </script> ```