From 053ba6029e3c97a4ce8de972bc287a0411890ea0 Mon Sep 17 00:00:00 2001
From: fujunling <2984387807@qq.com>
Date: 星期五, 26 五月 2023 00:08:32 +0800
Subject: [PATCH] 动态表单
---
Source/UBCS-WEB/src/components/FormTemplate/index.vue | 841 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
Source/UBCS-WEB/src/api/common.js | 2
Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue | 17
Source/UBCS-WEB/src/main.js | 3
4 files changed, 827 insertions(+), 36 deletions(-)
diff --git a/Source/UBCS-WEB/src/api/common.js b/Source/UBCS-WEB/src/api/common.js
index e221159..de9b26e 100644
--- a/Source/UBCS-WEB/src/api/common.js
+++ b/Source/UBCS-WEB/src/api/common.js
@@ -14,7 +14,7 @@
export const getFormTemplate = (params) => {
return request({
- url: '/ubcs-code/ubcs-code/mdmEngineController/getFormDefineByTemplateOid',
+ url: 'api/ubcs-code/ubcs-code/mdmEngineController/getFormDefineByTemplateOid',
method: 'get',
params
})
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
index 10b6e40..3f10469 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -1,42 +1,819 @@
<template>
- <div>
- </div>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ v-dialogDrag
+ top="0vh"
+ title="鎻愮ず"
+ class="avue-dialog avue-dialog--top"
+ :width="dialogOptions.width"
+ append-to-body
+ >
+ <avue-form :option="option" v-loading="loading" ref="form">
+ <template :slot="item.prop + 'Label'" v-for="item in option.column"">
+ <div>
+ <span>{{ item.label }}</span>
+ <el-tooltip
+ v-if="item.keyAttr"
+ class="item"
+ effect="dark"
+ content="鍏抽敭灞炴��"
+ placement="top-start"
+ >
+ <i class="el-icon-star-on key_attr_icon"></i>
+ </el-tooltip>
+ </div>
+ </template>
+ </avue-form>
+ <div class="avue-dialog__footer">
+ <el-button @click="close()">鍙� 娑�</el-button>
+ <el-button @click="close()" type="primary">纭� 瀹�</el-button>
+ </div>
+ </el-dialog>
</template>
<script>
- import { getFormTemplate } from '../../api/common';
- export default {
- name: 'FormTemplate',
- props: {
- visible: {
- type: Boolean,
- default: false
+import { getFormTemplate } from "../../api/common";
+export default {
+ name: "FormTemplate",
+ props: {
+ visible: {
+ type: Boolean,
+ default: false,
+ },
+ },
+ data() {
+ return {
+ loading: false,
+ dialogOptions: {
+ width: "60%",
+ },
+ option: {
+ emptyBtn: false,
+ submitBtn: false,
+ labelWidth: "120",
+ column: [],
+ },
+ templateData: {},
+ columnType: {
+ text: "input",
+ combox: "select",
+ truefalse: "switch",
+ number: "number",
+ datetime: "datetime",
+ },
+ testItems: [
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "id",
+ hidden: true,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "浠e彿",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: "wupin${lcstatus}",
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "lcstatus",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鐘舵��",
+ tooltips: "",
+ type: "combox",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "oldcode",
+ hidden: false,
+ keyAttr: false,
+ prefix: "el-icon-search",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "鏂囨湰鍚庣紑娴嬭瘯",
+ text: "鍓嶅悗缂�",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "materialname",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: true,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "姝e垯鏍¢獙",
+ tooltips: "璇疯緭鍏ユ暟瀛�",
+ type: "text",
+ unique: false,
+ verify: "/[0-9]/",
+ },
+ {
+ comboxKey: "materialclassify_data",
+ customClass: null,
+ data: [
+ {
+ attributes: {},
+ key: "model_type",
+ value: "妯″瀷",
+ },
+ {
+ attributes: {},
+ key: "part_type",
+ value: "闆朵欢",
+ },
+ ],
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "materialclassify",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鐗╂枡鍒嗙被",
+ tooltips: "",
+ type: "combox",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "firstfl",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鏁板瓧杈撳叆妗�",
+ tooltips: "",
+ type: "number",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "yyyy-MM-dd HH:mm:ss",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "secondfl",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鏃堕棿閫夋嫨鍣�",
+ tooltips: "",
+ type: "datetime",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "thrifl",
+ hidden: false,
+ keyAttr: true,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鍏抽敭灞炴��",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "false",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "xiaoshouwl",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "閿�鍞墿鏂�",
+ tooltips: "",
+ type: "truefalse",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "tuhao",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鍥惧彿",
+ tooltips: "鎻愮ず",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "xinghaoguige",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "瑙勬牸鍨嬪彿锛圕APP锛�",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "jiliangdw",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: {
+ backPath: "",
+ displayTable: null,
+ height: null,
+ initSort: null,
+ loadType: "all",
+ mapFields: "",
+ method: "GET",
+ muti: false,
+ onlyLeaf: false,
+ paramForFormKey: "",
+ parentFieldName: null,
+ parentUsedField: null,
+ parentValue: null,
+ referContent: null,
+ referType: "appendix",
+ remoteSort: false,
+ tableConfig: {
+ cols: [
+ {
+ align: "left",
+ colspan: 1,
+ comboxKey: null,
+ data: [],
+ dateFormate: null,
+ edit: null,
+ editConfig: null,
+ event: null,
+ field: "id",
+ fieldType: "text",
+ fixed: null,
+ hidden: false,
+ minWidth: null,
+ optionButtons: null,
+ optionField: false,
+ optionJsMap: null,
+ queryField: null,
+ referConfig: null,
+ rowspan: 1,
+ showField: null,
+ sort: true,
+ sortField: "id",
+ style: null,
+ templet: null,
+ title: "缂栧彿",
+ unresize: false,
+ width: 150,
+ },
+ {
+ align: "left",
+ colspan: 1,
+ comboxKey: null,
+ data: [],
+ dateFormate: null,
+ edit: null,
+ editConfig: null,
+ event: null,
+ field: "name",
+ fieldType: "text",
+ fixed: null,
+ hidden: false,
+ minWidth: null,
+ optionButtons: null,
+ optionField: false,
+ optionJsMap: null,
+ queryField: null,
+ referConfig: null,
+ rowspan: 1,
+ showField: null,
+ sort: true,
+ sortField: "name",
+ style: null,
+ templet: null,
+ title: "鍚嶇О",
+ unresize: false,
+ width: 180,
+ },
+ ],
+ oid: null,
+ page: {
+ limit: 15,
+ page: 1,
+ },
+ queryColumns: [
+ {
+ align: "left",
+ colspan: 1,
+ comboxKey: null,
+ data: [],
+ dateFormate: null,
+ edit: null,
+ editConfig: null,
+ event: null,
+ field: "id",
+ fieldType: "text",
+ fixed: null,
+ hidden: false,
+ minWidth: null,
+ optionButtons: null,
+ optionField: false,
+ optionJsMap: null,
+ queryField: null,
+ referConfig: null,
+ rowspan: 1,
+ showField: null,
+ sort: true,
+ sortField: "id",
+ style: null,
+ templet: null,
+ title: "缂栧彿",
+ unresize: false,
+ width: 150,
+ },
+ {
+ align: "left",
+ colspan: 1,
+ comboxKey: null,
+ data: [],
+ dateFormate: null,
+ edit: null,
+ editConfig: null,
+ event: null,
+ field: "name",
+ fieldType: "text",
+ fixed: null,
+ hidden: false,
+ minWidth: null,
+ optionButtons: null,
+ optionField: false,
+ optionJsMap: null,
+ queryField: null,
+ referConfig: null,
+ rowspan: 1,
+ showField: null,
+ sort: true,
+ sortField: "name",
+ style: null,
+ templet: null,
+ title: "鍚嶇О",
+ unresize: false,
+ width: 180,
+ },
+ ],
+ },
+ textField: "name",
+ type: "default",
+ url: "",
+ useFormKey: "",
+ valueField: "oid",
+ where: {
+ materialname: "璁¢噺鍗曚綅",
+ },
+ },
+ required: false,
+ selectLibFlag: "",
+ showField: "jiliangdwname",
+ suffix: "",
+ text: "璁¢噺鍗曚綅",
+ tooltips: "",
+ type: "refer",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "chukufangshi",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鍑哄簱鏂瑰紡",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "beizhushuoming",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "澶囨敞璇存槑",
+ tooltips: "",
+ type: "text",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: null,
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "hesuanfenlei",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: {
+ backPath: "",
+ displayTable: null,
+ height: null,
+ initSort: null,
+ loadType: "all",
+ mapFields: "",
+ method: "GET",
+ muti: false,
+ onlyLeaf: false,
+ paramForFormKey: "",
+ parentFieldName: "PARENTCODECLASSIFYOID",
+ parentUsedField: "oid",
+ parentValue:
+ "\\IN(SELECT oid from PLATFORMBTM_CODECLASSIFY where id ='hesuanfenlei')",
+ referContent: null,
+ referType: "codeclassify",
+ remoteSort: false,
+ tableConfig: null,
+ textField: "name",
+ type: "tree",
+ url: "",
+ useFormKey: "",
+ valueField: "oid",
+ where: null,
+ },
+ required: false,
+ selectLibFlag: "",
+ showField: "hesuanfenleiname",
+ suffix: "",
+ text: "鏍哥畻鍒嗙被",
+ tooltips: "",
+ type: "refer",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: "Eummaterialtype",
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "1001",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "materialtype",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "鐗╂枡绫诲瀷",
+ tooltips: "",
+ type: "combox",
+ unique: false,
+ verify: "",
+ },
+ {
+ comboxKey: "myDataSecret",
+ customClass: null,
+ data: null,
+ dateFormate: "",
+ defaultValue: "",
+ displayExtension: null,
+ extendAttrMap: null,
+ extendAttrString: null,
+ field: "secretgrade",
+ hidden: false,
+ keyAttr: false,
+ prefix: "",
+ readOnly: false,
+ referConfig: null,
+ required: false,
+ selectLibFlag: "",
+ showField: null,
+ suffix: "",
+ text: "secretGrade",
+ tooltips: "",
+ type: "combox",
+ unique: false,
+ verify: "",
+ },
+ ],
+ };
+ },
+ created() {
+ this.preOrSufFixShow();
+ },
+ computed: {
+ dialogVisible: {
+ get() {
+ return this.visible;
+ },
+ set(val) {
+ this.$emit("update:visible", val);
},
},
- created() {
- this.getFormTemplate()
- },
- data() {
- return {
- load: false
- }
- },
- methods: {
- getFormTemplate() {
- this.load = true
- getFormTemplate({
- templateOid: '78B8C7C5-A042-0B96-FE6D-65421451782A',
- codeClassifyOid: '4524E801-6CC6-92E8-1AC3-2AB9604E8F96'
- }).then(res => {
- console.log(res);
- }).catch(err => {
- console.log(err);
+ },
+ methods: {
+ getFormTemplate() {
+ this.loading = true;
+ getFormTemplate({
+ templateOid: "78B8C7C5-A042-0B96-FE6D-65421451782A",
+ codeClassifyOid: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
+ page: 1,
+ limit: 30,
+ })
+ .then((res) => {
+ if (res.status === 200) {
+ this.templateData = res.data;
+ this.templateRender();
+ }
+ this.loading = false;
+ console.log(res.data);
})
+ .catch((err) => {
+ this.loading = false;
+ console.log(err);
+ });
+ },
+ templateRender() {
+ const items = this.testItems;
+ // const items = this.templateData.formDefineVO.items;
+ items.forEach((item) => {
+ // 闅愯棌琛ㄥ崟鍏冪礌
+ if (item.hide) {
+ return;
+ }
+ // if (item.field === 'id' || item.field === 'lcstatus') {
+ // item.readOnly = true
+ // }
+ // 璁剧疆琛ㄥ崟鏍¢獙鐨勮鍒欙紝鏂囨湰
+ let message = "璇烽�夋嫨";
+ let trigger = "change";
+ if (item.type === "text") {
+ message = "璇疯緭鍏�";
+ trigger = "blur";
+ } else if (item.type === "file") {
+ message = "璇蜂笂浼�";
+ }
+ let columnItem = {
+ label: item.text,
+ labelslot: true,
+ prop: item.field,
+ type: this.columnType[item.type],
+ dicData: this.getDictData(item.type, item.dicData),
+ disabled: item.readOnly,
+ prepend: this.preOrSufFixShow("text", item.prefix),
+ append: this.preOrSufFixShow("text", item.suffix),
+ prefixIcon: this.preOrSufFixShow("icon", item.prefix),
+ suffixIcon: this.preOrSufFixShow("icon", item.suffix),
+ valueFormat: item.dateFormate,
+ format: item.dateFormate,
+ keyAttr: item.keyAttr,
+ value: 1,
+ rules: [
+ {
+ required: item.required,
+ message: `璇�${message}${item.text}`,
+ trigger,
+ },
+ {
+ pattern: item.verify,
+ message: item.tooltips,
+ trigger,
+ },
+ ],
+ props: {
+ label: "value",
+ value: "key",
+ },
+ };
+ console.log(this.$refs.form, "form");
+ this.option.column.push(columnItem);
+ });
+ },
+ close() {
+ this.dialogVisible = false;
+ },
+ // 鍓嶅悗缂�
+ preOrSufFixShow(type, val) {
+ if (this.$utilFunc.isEmpty(val) && typeof val !== "string") return;
+ const isIcon = val.slice(0, 8) === "el-icon-";
+ if ((type === "text" && !isIcon) || (type === "icon" && isIcon)) {
+ return val;
}
- }
- }
+ },
+ // 鑾峰彇瀛楀吀鏁版嵁
+ getDictData(type, dicData) {
+ if (type === "truefalse") {
+ return [
+ {
+ value: "鍚�",
+ key: 0,
+ },
+ {
+ value: "鏄�",
+ key: 1,
+ },
+ ];
+ } else if (type === "combox") {
+ return dicData;
+ }
+ return [];
+ },
+ },
+ watch: {
+ visible(newV) {
+ if (newV) {
+ this.getFormTemplate();
+ }
+ },
+ },
+};
</script>
-<style lang='less' scoped>
-
-</style>
\ No newline at end of file
+<style lang="scss" scoped>
+.key_attr_icon {
+ font-size: 24px;
+ position: relative;
+ top: 2px;
+ color: red;
+}
+</style>
diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js
index df2be16..eed0da5 100644
--- a/Source/UBCS-WEB/src/main.js
+++ b/Source/UBCS-WEB/src/main.js
@@ -41,6 +41,9 @@
import referConfigFormDialog from "@/components/code-dialog-page/referConfigFormDialog"
import businessAdd from "@/views/modeling/BusinessAdd"
+// 灏嗗伐鍏峰嚱鏁版坊鍔犲埌鍏ㄥ眬
+import utilFunc from './util/func'
+Vue.prototype.$utilFunc = utilFunc
// 娉ㄥ唽鍏ㄥ眬crud椹卞姩
window.$crudCommon = crudCommon;
// 鍔犺浇Vue鎷撳睍
diff --git a/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue b/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
index 253facd..54823a7 100644
--- a/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
+++ b/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
@@ -1,11 +1,22 @@
<template>
- <div></div>
+ <div>
+ <el-button @click="visible = true">娴嬭瘯</el-button>
+ <FormTemplate :visible.sync="visible"></FormTemplate>
+ </div>
</template>
<script>
-
+import FormTemplate from '../../components/FormTemplate/index'
+export default {
+ name: 'FormTempalteTest',
+ components: { FormTemplate },
+ data() {
+ return {
+ visible: false
+ }
+ }
+}
</script>
-
<style lang='less' scoped>
</style>
\ No newline at end of file
--
Gitblit v1.9.3