From 2976130876609dfa895a7e6a310bf31c12c2307e Mon Sep 17 00:00:00 2001
From: LiuHao <liuhaoai545@gmail>
Date: 星期三, 19 四月 2023 21:04:42 +0800
Subject: [PATCH] add form build
---
src/components/BuildCode/render.vue | 62 ++++++++++++++++++++
src/types/vform3-builds.d.ts | 4 +
package.json | 1
src/components/BuildCode/index.vue | 66 ++++++++++++++++++++++
4 files changed, 133 insertions(+), 0 deletions(-)
diff --git a/package.json b/package.json
index 8f64123..03aa1bf 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"@vueuse/core": "9.5.0",
"animate.css": "4.1.1",
"await-to-js": "^3.0.0",
+ "vform3-builds": "3.0.8",
"axios": "^1.3.4",
"echarts": "5.4.0",
"element-plus": "2.2.27",
diff --git a/src/components/BuildCode/index.vue b/src/components/BuildCode/index.vue
new file mode 100644
index 0000000..9315732
--- /dev/null
+++ b/src/components/BuildCode/index.vue
@@ -0,0 +1,66 @@
+<!-- 浠g爜鏋勫缓 -->
+<script setup lang="ts">
+
+import { ComponentInternalInstance } from "vue";
+
+const props = defineProps({
+ showBtn: {
+ type: Boolean,
+ default: false
+ },
+ formJson: {
+ type: Object,
+ default: undefined
+ }
+})
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const buildRef = ref();
+const emits = defineEmits(['reJson', 'saveDesign']);
+
+
+
+//鑾峰彇琛ㄥ崟json
+const getJson = () => {
+ const formJson = JSON.stringify(buildRef.value.getFormJson())
+ const fieldJson = JSON.stringify(buildRef.value.getFieldWidgets())
+ let data = {
+ formJson, fieldJson
+ }
+ emits("saveDesign", data)
+}
+
+onMounted(() => {
+ if (props.formJson) {
+ buildRef.value.setFormJson(props.formJson)
+ }
+})
+</script>
+
+<template>
+ <div>
+ <v-form-designer
+ class="build"
+ ref="buildRef"
+ :designer-config="{ importJsonButton: true, exportJsonButton: true, exportCodeButton: true, generateSFCButton: true, formTemplates: true }"
+ >
+ <template #customToolButtons v-if="showBtn">
+ <el-button link type="primary" icon="Select" @click="getJson">淇濆瓨</el-button>
+ </template>
+ </v-form-designer>
+ </div>
+</template>
+
+<style lang="scss">
+.build {
+ margin: 0 !important;
+ overflow-y: auto !important;
+
+ & header.main-header {
+ display: none;
+ }
+
+ & .right-toolbar-con {
+ text-align: right !important;
+ }
+}
+</style>
diff --git a/src/components/BuildCode/render.vue b/src/components/BuildCode/render.vue
new file mode 100644
index 0000000..5693ed8
--- /dev/null
+++ b/src/components/BuildCode/render.vue
@@ -0,0 +1,62 @@
+<!-- 鍔ㄦ�佽〃鍗曟覆鏌� -->
+<script setup name="Render">
+
+const props = defineProps({
+ formJson: {
+ type: [String, Object],
+ default: {}
+ },
+ formData: {
+ type: [String, Object],
+ default: {}
+ },
+ isView: {
+ type: Boolean,
+ default: false
+ }
+})
+
+const vFormRef = ref(null)
+// 鑾峰彇琛ㄥ崟鏁版嵁-寮傛
+const getFormData = () => {
+ return vFormRef.value.getFormData()
+}
+
+/**
+ * 璁剧疆琛ㄥ崟鍐呭
+ * @param {琛ㄥ崟閰嶇疆} formConf
+ * formConfig锛歿 formTemplate锛氳〃鍗曟ā鏉匡紝formData锛氳〃鍗曟暟鎹紝hiddenField锛氶渶瑕侀殣钘忕殑瀛楁瀛楃涓查泦鍚堬紝disabledField锛氶渶瑕佺鐢ㄧ殑鑷瀛楃涓查泦鍚坿
+ */
+const initForm = (formConf) => {
+ const { formTemplate, formData, hiddenField, disabledField } = toRaw(formConf)
+ if (formTemplate) {
+ vFormRef.value.setFormJson(formTemplate)
+ if (formData) {
+ vFormRef.value.setFormData(formData)
+ }
+ if (disabledField && disabledField.length > 0) {
+ setTimeout(() => {
+ vFormRef.value.disableWidgets(disabledField)
+ }, 200)
+ }
+ if (hiddenField && hiddenField.length > 0) {
+ setTimeout(() => {
+ vFormRef.value.hideWidgets(hiddenField)
+ }, 200)
+ }
+ if (props.isView) {
+ console.log(props.isView)
+ setTimeout(() => {
+ vFormRef.value.disableForm()
+ }, 100)
+ }
+ }
+}
+defineExpose({ getFormData, initForm })
+</script>
+
+<template>
+ <div class="">
+ <v-form-render ref="vFormRef" :form-json="formJson" :form-data="formData" />
+ </div>
+</template>
diff --git a/src/types/vform3-builds.d.ts b/src/types/vform3-builds.d.ts
new file mode 100644
index 0000000..82573de
--- /dev/null
+++ b/src/types/vform3-builds.d.ts
@@ -0,0 +1,4 @@
+declare module 'vform3-builds' {
+ const content: any;
+ export = content;
+}
--
Gitblit v1.9.3