From ded8d1fa55a11be6e5fd4226cadc1fd4bc250d68 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 20 六月 2023 20:44:48 +0800
Subject: [PATCH] MdmEngineServiceImpl修改

---
 Source/UBCS-WEB/src/components/FormTemplate/index.vue |  482 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 436 insertions(+), 46 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
index 23edc8f..a908408 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -1,6 +1,7 @@
 <template>
   <el-dialog
     :visible.sync="dialogVisible"
+    v-if="dialogVisible"
     v-dialogDrag
     top="0vh"
     :title="title"
@@ -13,16 +14,32 @@
       v-bind="$attrs"
       :visible="visible"
       :type="type"
-      v-if="dialogVisible"
+      :rowOid="rowOid"
+      :templateOid="templateOid"
       ref="FormTempalte"
-      @getFormTemplateEnd="getFormTemplate"
       @getFormData="getFormData"
     ></FormTempalte>
 
-    <div class="tab_box" v-if="type !== 'detail' && dialogVisible">
-      <el-tabs v-model="activeName" type="card">
-        <el-tab-pane label="鐮佸�肩敵璇�" name="codeApply" v-if="showCodeApply">
-          <CodeApply ref="CodeApply" v-bind="$attrs" @getCodeRuleOid="getCodeRuleOid"></CodeApply>
+    <div
+      class="tab_box"
+      v-if="
+        type !== 'detail' &&
+        dialogVisible &&
+        (showCodeApply || showResembleQuery) &&
+        type !== 'preview'
+      "
+    >
+      <el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
+        <el-tab-pane label="鐮佸�肩敵璇�" name="codeApply">
+          <FormTempalte
+            v-bind="$attrs"
+            :type="type"
+            :selfColumnType="selfColumnType"
+            :selfColumnConfig="selfColumnConfig"
+            ref="CodeApply"
+            @getFormData="getFormData"
+            @referConfigDataUpdate="referConfigDataUpdate"
+          ></FormTempalte>
         </el-tab-pane>
         <el-tab-pane
           label="鐩镐技椤规煡璇�"
@@ -34,18 +51,22 @@
             ref="resembleQueryRef"
             :hasResemble="this.hasResemble"
             :column="this.resembleTableColumn"
+            :codeClassifyOid="codeClassifyOid"
             :form="this.form"
-            :codeRuleOid="codeRuleOid"
+            :templateOid="templateOid"
           ></ResembleQuery>
         </el-tab-pane>
       </el-tabs>
     </div>
     <div class="avue-dialog__footer" v-if="type !== 'detail'">
       <el-button @click="close()">鍙� 娑�</el-button>
-      <el-button @click="close()" type="primary" :loading="submitBtnLoading"
-        >纭� 瀹�</el-button
-      >
-      <el-button @click="resembleQuerySubmit" type="primary" v-if="hasResemble"
+      <el-button @click="submit()" type="primary" :loading="submitBtnLoading">{{
+        submitText
+      }}</el-button>
+      <el-button
+        @click="resembleQuerySubmit"
+        type="primary"
+        v-if="showResembleQuery"
         >鐩镐技鍍忔煡璇�</el-button
       >
     </div>
@@ -53,12 +74,12 @@
 </template>
 
 <script>
+import { getCodeRule, getFormTemplate } from "@/api/formTemplate.js";
 import FormTempalte from "./FormTempalte";
 import ResembleQuery from "./ResembleQuery";
-import CodeApply from "./CodeApply";
 export default {
   name: "FormTemplateDialog",
-  components: { ResembleQuery, FormTempalte, CodeApply },
+  components: { ResembleQuery, FormTempalte },
   props: {
     visible: {
       type: Boolean,
@@ -70,11 +91,24 @@
     },
     title: {
       type: String,
-      default: "琛ㄥ崟妯℃澘",
+      default: "缂栫爜鐢宠",
     },
     width: {
       type: String,
       default: "80%",
+    },
+    rowOid: "",
+    codeClassifyOid: {
+      type: String,
+      default: "",
+    },
+    templateOid: {
+      type: String,
+      default: "",
+    },
+    submitText: {
+      type: String,
+      default: "纭� 瀹�",
     },
   },
   data() {
@@ -84,9 +118,42 @@
       hasResemble: false,
       resembleTableColumn: [],
       secVOList: [],
-      activeName: "resembleQuery",
-      codeRuleOid: '',
-      form: {}
+      form: {},
+      activeName: "codeApply",
+      showCodeApply: true,
+      showResembleQuery: true,
+      selfColumnType: {
+        codefixedsec: "combox",
+        codeclassifysec: "refer",
+        codevariablesec: "text",
+        coderefersec: "refer",
+      },
+      selfColumnConfig: {
+        function: {
+          required: this.isRequired,
+          dicData: this.getOptionList,
+          type: this.getType,
+          referConfig: this.getReferConfig,
+          readOnly: this.getDisabled,
+        },
+        exchange: {
+          text: "name",
+          field: "oid",
+          prop: "oid",
+          showField: "name",
+          parentClassifySecOid: "parentClassifySecOid",
+          label: "name",
+          maxlength: "codeSecLength",
+          data: "fixedValueVOList",
+        },
+        directVoluation: {
+          search: true,
+          props: {
+            label: "id",
+            value: "id",
+          },
+        },
+      },
     };
   },
   created() {},
@@ -99,49 +166,372 @@
         this.$emit("update:visible", val);
       },
     },
-    showCodeApply() {
-      if (this.type === "add") {
-        if (this.hasResemble && this.secVOList.length === 0) {
-          return false;
-        }
-      } else {
-        if (this.hasResemble) {
-          return false;
-        }
-      }
-      return true;
-    },
-    showResembleQuery() {
-      return this.hasResemble;
-    },
   },
   methods: {
     openDialog() {
-      this.$nextTick(() => {
-        this.$refs.FormTempalte.init()
-        this.$refs.CodeApply.getCodeRule()
-      })
+      this.getFormTemplate();
+      if (this.type === "add") {
+        this.getCodeRule();
+      }
     },
     close() {
       this.dialogVisible = false;
     },
-    getCodeRuleOid(data) {
-      this.codeRuleOid = data.oid
-      this.secVOList = data.secVOList
+    // 鎺ュ彛鑾峰彇琛ㄥ崟鏁版嵁
+    getFormTemplate() {
+      getFormTemplate({
+        templateOid: this.templateOid,
+        codeClassifyOid: this.codeClassifyOid,
+      })
+        .then((res) => {
+          if (res.status === 200) {
+            this.hasResemble =
+              res.data.resembleTableVO &&
+              res.data.resembleTableVO.cols &&
+              res.data.resembleTableVO.cols.length > 0;
+            this.resembleTableColumn = res.data.resembleTableVO.cols || [];
+            if (this.hasResemble) {
+              this.activeName = "resembleQuery";
+              this.showResembleQuery = true;
+            }
+            this.$refs.FormTempalte.templateRender(res.data.formDefineVO.items);
+          }
+        })
+        .catch((err) => {
+          this.loading = false;
+          console.log(err);
+        });
     },
-    getFormTemplate(data) {
-      this.hasResemble =
-        data.resembleTableVO &&
-        data.resembleTableVO.cols &&
-        data.resembleTableVO.cols.length > 0;
-      this.resembleTableColumn = data.resembleTableVO.cols || [];
+    // 鑾峰彇鐮佸�肩敵璇锋暟鎹�
+    getCodeRule() {
+      getCodeRule({ codeClassifyOid: this.codeClassifyOid }).then((res) => {
+        if (res.data && res.data.code === 200) {
+          const typeList = [
+            "codefixedsec",
+            "codeclassifysec",
+            "codevariablesec",
+            "coderefersec",
+          ];
+
+          this.secVOList = [
+            {
+              btmname: "codebasicsec",
+              checkInBy: "",
+              checkInTime: null,
+              checkOutBy: "",
+              checkOutTime: null,
+              codeDateFormatStr: "",
+              codeFillFlag: "",
+              codeFillLength: "",
+              codeFillLimit: 0,
+              codeFillSeparator: "",
+              codeFillType: "",
+              codeFillTypeText: "",
+              codeGetValueType: "",
+              codeGetValueTypeText: "",
+              codeLevelType: "",
+              codeLevelTypeText: "",
+              codeLevelValue: 0,
+              codeSecLength: "10",
+              codeSecLengthType: "code_sec_length_variable",
+              codeSecLengthTypeText: "",
+              componentCodeFlag: "false",
+              copyFromVersion: "",
+              createTime: "2023-06-06 14:10:27.000",
+              creator: "1",
+              customCodeSerialClass: "",
+              data: null,
+              description: "",
+              displayFlag: "false",
+              filterSql: "",
+              firstR: "1",
+              firstV: "1",
+              fixedValueVOList: null,
+              getValueClass: "",
+              id: "0001",
+              lastModifier: "1",
+              lastModifyTime: "2023-06-06 14:10:27.000",
+              lastR: "1",
+              lastV: "1",
+              lcStatus: "Exist",
+              lcStatusText: "瀛樺湪",
+              lctid: "defaultLC",
+              matchClassifyValueFlag: "false",
+              name: "鍒嗙被鐮佹鐖�",
+              nameOid: "C2998D32-E89E-6D41-0782-88E97E9EC65B",
+              nullableFlag: "false",
+              oid: "1668926002119708672",
+              orderNum: 1,
+              owner: "1",
+              parentClassifySecOid: "",
+              parentClassifySecText: "",
+              pkCodeRule: "B4766355-E4E1-490A-833B-D5AB73E9B877",
+              referAttributeId: "",
+              referAttributeName: "",
+              referBtmId: "",
+              referBtmName: "",
+              referCodeClassifyOid: "",
+              referCodeClassifyOidName: "",
+              referConfig: "",
+              referValueInfo: "",
+              revisionOid: "F0049108-6AAE-EAAD-BC76-E6714C2B8F2A",
+              revisionRule: "",
+              revisionSeq: 1,
+              revisionValue: "",
+              secretGrade: null,
+              secretGradeText: "",
+              sectype: "codeclassifysec",
+              sectypeText: "鍒嗙被鐮佹",
+              serialDependFlag: "false",
+              serialDependOrder: 0,
+              serialStart: "",
+              serialStep: 0,
+              ts: "2023-06-06 14:10:27.716",
+              valueCutLength: 0,
+              valueCutType: "",
+              valueCutTypeText: "",
+              versionRule: "0",
+              versionSeq: 1,
+              versionValue: "1",
+            },
+            {
+              btmname: "codebasicsec",
+              checkInBy: "",
+              checkInTime: null,
+              checkOutBy: "",
+              checkOutTime: null,
+              codeDateFormatStr: "",
+              codeFillFlag: "",
+              codeFillLength: "",
+              codeFillLimit: 0,
+              codeFillSeparator: "",
+              codeFillType: "",
+              codeFillTypeText: "",
+              codeGetValueType: "",
+              codeGetValueTypeText: "",
+              codeLevelType: "",
+              codeLevelTypeText: "",
+              codeLevelValue: 0,
+              codeSecLength: "10",
+              codeSecLengthType: "code_sec_length_variable",
+              codeSecLengthTypeText: "",
+              componentCodeFlag: "false",
+              copyFromVersion: "",
+              createTime: "2023-06-06 14:10:50.000",
+              creator: "1",
+              customCodeSerialClass: "",
+              data: null,
+              description: "",
+              displayFlag: "false",
+              filterSql: "",
+              firstR: "1",
+              firstV: "1",
+              fixedValueVOList: null,
+              getValueClass: "",
+              id: "000101",
+              lastModifier: "1",
+              lastModifyTime: "2023-06-06 14:10:50.000",
+              lastR: "1",
+              lastV: "1",
+              lcStatus: "Exist",
+              lcStatusText: "瀛樺湪",
+              lctid: "defaultLC",
+              matchClassifyValueFlag: "false",
+              name: "鍒嗙被鐮佹瀛�",
+              nameOid: "1FDB20E3-9F68-A5B0-D097-2142EA054F9B",
+              nullableFlag: "false",
+              oid: "00AD9FE0-A31D-7962-10DF-DC6115EF80A5",
+              orderNum: 2,
+              owner: "1",
+              parentClassifySecOid: "1668926002119708672",
+              parentClassifySecText: "鍒嗙被鐮佹",
+              pkCodeRule: "B4766355-E4E1-490A-833B-D5AB73E9B877",
+              referAttributeId: "",
+              referAttributeName: "",
+              referBtmId: "",
+              referBtmName: "",
+              referCodeClassifyOid: "",
+              referCodeClassifyOidName: "",
+              referConfig: "",
+              referValueInfo: "",
+              revisionOid: "95183EF9-C9AD-2941-1C99-9E9024330D40",
+              revisionRule: "",
+              revisionSeq: 1,
+              revisionValue: "",
+              secretGrade: null,
+              secretGradeText: "",
+              sectype: "codeclassifysec",
+              sectypeText: "鍒嗙被鐮佹",
+              serialDependFlag: "false",
+              serialDependOrder: 0,
+              serialStart: "",
+              serialStep: 0,
+              ts: "2023-06-06 14:10:50.084",
+              valueCutLength: 0,
+              valueCutType: "",
+              valueCutTypeText: "",
+              versionRule: "0",
+              versionSeq: 1,
+              versionValue: "1",
+            },
+          ];
+          // this.secVOList = (res.data.data.secVOList || []).filter((item) =>
+          //   typeList.includes(item)
+          // );
+          this.$nextTick(() => {
+            if (this.secVOList.length > 0 && this.type === "add") {
+              this.showCodeApply = true;
+              this.activeName = "codeApply";
+              this.$refs.CodeApply.templateRender(this.secVOList);
+            } else {
+              this.showCodeApply = false;
+            }
+          });
+        }
+      });
     },
     getFormData(form) {
-      this.form = form
+      this.form = form;
+    },
+    // 鍙傜収缁勪欢鏁版嵁鍙樻洿
+    referConfigDataUpdate(data) {
+      const { field } = data;
+      this.secVOList = this.secVOList.map((item) => {
+        if (item.parentClassifySecOid === field) {
+          this.$refs.CodeApply.form[item.oid] = undefined;
+          this.$refs.CodeApply.form[item.name] = undefined;
+        }
+      });
+      this.$refs.CodeApply.templateRender();
     },
     resembleQuerySubmit() {
+      this.activeName = "resembleQuery";
       this.$refs.resembleQueryRef.resembleQuery(this.form);
     },
+    handleClick() {
+      if (this.activeName === "resembleQuery") {
+        this.resembleQuerySubmit();
+      }
+    },
+    async submit() {
+      // 杩涜琛ㄥ崟鏍¢獙
+      const formValidate = await this.$refs.FormTempalte.validate();
+      if (!formValidate) return;
+      let codeValidate = true;
+      // 杩涜鐮佸�肩敵璇锋牎楠�
+      if (this.showCodeApply) {
+        codeValidate = await this.$refs.codeApply.validate();
+        if (!codeValidate) return;
+      }
+      // 杩涜鐩镐技椤规煡璇�
+      const resembleQueryList = await this.$refs.resembleQueryRef.resembleQuery(
+        this.form
+      );
+      if (resembleQueryList.length === 0) {
+        this.$emit("submit", this.form);
+      } else {
+        this.$confirm(
+          `璇ョ墿鏂欏凡鏈�${resembleQueryList.length}鏉$浉浼兼暟鎹紝鏄惁缁х画淇濆瓨锛焋,
+          "闇�瑕佹偍纭",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning",
+          }
+        )
+          .then(() => {
+            this.$emit("submit", this.form);
+          })
+          .catch(() => {});
+      }
+    },
+    getType(item) {
+      return this.selfColumnType[item.sectype];
+    },
+    getReferConfig(item) {
+      let params = {};
+      if (item.sectype == "codeclassifysec") {
+        params = {
+          isMuti: false,
+          type: "grid",
+          tableConfig: {
+            limit: -1,
+            cols: [
+              {
+                field: "id",
+                title: "鑻辨枃鍚嶇О",
+                sort: true,
+                width: 150,
+              },
+              {
+                field: "name",
+                title: "涓枃鍚嶇О",
+                sort: true,
+                width: 150,
+              },
+              {
+                field: "description",
+                title: "鎻忚堪",
+                width: 250,
+              },
+            ],
+            queryColumns: [
+              {
+                field: "id",
+                title: "鑻辨枃鍚嶇О",
+              },
+              {
+                field: "name",
+                title: "涓枃鍚嶇О",
+              },
+            ],
+          },
+          url: "api/ubcs-code/ubcs-code/mdmEngineController/listCodeClassifyValueBySecOid",
+          extraParams: {
+            classifySecOid: item.oid,
+            parentClassifyValueOid: "",
+          },
+        };
+      }
+      return item.referConfig || params;
+    },
+    getDisabled(item) {
+      if (item.sectype === "codeclassifysec") {
+        if (item.parentClassifySecOid) {
+          if (!this.form[item.parentClassifySecOid]) {
+            return true;
+          } else {
+            return false;
+          }
+        }
+      }
+    },
+    isRequired(item) {
+      return item.nullableFlag != "true";
+    },
+    getOptionList(item) {
+      if (
+        Array.isArray(item.fixedValueVOList) &&
+        item.fixedValueVOList.length > 0
+      ) {
+        const configAttr = {
+          key: "id",
+          value: "id",
+        };
+        const optionList = item.fixedValueVOList.map((item) => {
+          for (const key in configAttr) {
+            if (Object.hasOwnProperty.call(configAttr, key)) {
+              const element = configAttr[key];
+              item[key] = item[element];
+            }
+          }
+          return item;
+        });
+        return optionList;
+      } else {
+        return [];
+      }
+    },
   },
 };
 </script>

--
Gitblit v1.9.3