From 2024d0f570d9da956e792746992852749c06227c Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期二, 11 七月 2023 14:30:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/components/BatchImport/index.vue |  289 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 254 insertions(+), 35 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/BatchImport/index.vue b/Source/UBCS-WEB/src/components/BatchImport/index.vue
index cb6d21f..a0f6495 100644
--- a/Source/UBCS-WEB/src/components/BatchImport/index.vue
+++ b/Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -1,17 +1,44 @@
 <template>
-  <el-dialog :title="title" :visible="visible" append-to-body>
+  <el-dialog
+    v-if="dialogVisible"
+    :title="title"
+    :visible.sync="dialogVisible"
+    append-to-body
+    v-dialogDrag
+  >
     <Divider text="瀵煎叆鎻愮ず" left="30px"></Divider>
     <ul>
-      <li v-for="(item, index) in tipInfo" :key="index">
+      <li v-for="(item, index) in tipList" :key="index">
         {{ item }}
       </li>
     </ul>
-    <div class="radio_box">
+    <div
+      class="radio_box"
+      v-show="currentTypeObj[type]['upParams'] === 'classifyAttr'"
+    >
       <span>鍒嗙被鐨勮矾寰勪娇鐢ㄧ殑灞炴��:</span>
       <el-radio-group v-model="classifyAttr">
         <el-radio label="id">鍒嗙被缂栧彿</el-radio>
         <el-radio label="name">鍒嗙被鍚嶇О</el-radio>
       </el-radio-group>
+    </div>
+    <div
+      style="margin-top: 20px"
+      v-if="showCodeApply && currentTypeObj[type]['upParams'] === 'codeApply'"
+    >
+      <Divider
+        text="缂栫爜瑙勫垯鐨勭爜娈典俊鎭紝璇峰厛閫夋嫨鍚庡啀瀵煎叆"
+        left="30px"
+      ></Divider>
+      <FormTemplate
+        style="margin-top: 30px"
+        type="add"
+        :selfColumnType="selfColumnType"
+        :selfColumnConfig="selfColumnConfig"
+        ref="CodeApply"
+        @getFormData="getCodeApplyFormData"
+        @referConfigDataUpdate="referConfigDataUpdate"
+      ></FormTemplate>
     </div>
     <Divider text="excel鏂囦欢锛岄�夋嫨鏂囦欢鍚庝細鑷姩涓婁紶" left="30px"></Divider>
     <el-upload
@@ -20,74 +47,263 @@
       :action="action"
       :before-upload="beforeUpload"
       :on-exceed="handleExceed"
+      :headers="uploadHeaders"
+      :on-success="onSuccess"
+      :on-error="onError"
+      :show-file-list="false"
+      :on-change="uploadChange"
+      :data="upParams"
     >
-      <el-button size="small" type="primary"><i class="el-icon-upload"></i> 鐐瑰嚮涓婁紶</el-button>
+      <el-button size="small" type="primary"
+        ><i class="el-icon-upload"></i> 鐐瑰嚮涓婁紶</el-button
+      >
     </el-upload>
     <template #footer>
-      <el-button type="primary" size="small" @click="downloadTemplateFun">涓嬭浇瀵煎叆妯℃澘</el-button>
-      <el-button size="small">鍏抽棴</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        @click="downloadTemplateFun"
+        :loading="downloadLoading"
+        >涓嬭浇瀵煎叆妯℃澘</el-button
+      >
+      <el-button size="small" @click="dialogVisible = false">鍏抽棴</el-button>
     </template>
+    <ShowImportData
+      :visible.sync="showVisible"
+      v-if="showVisible"
+      :leftTree="leftTree"
+      :classifyAttr="classifyAttr"
+      :codeClassifyOid="codeClassifyOid"
+      :redisOid="redisOid"
+      :type="type"
+      :title="title"
+      :secDTOList="secDTOList"
+    ></ShowImportData>
   </el-dialog>
 </template>
 
 <script>
-import { downloadTemplate } from '../../api/batchImport/index'
+import ShowImportData from "./ShowImportData.vue";
+import {
+  downloadHistoryImportTemplate,
+  downloadErrorFile,
+  importDataShow,
+  downloadBatchImportApplyTemplate,
+  downloadBatchApplyCodeTemplate,
+} from "../../api/batchImport/index";
+import FormTemplate from "../FormTemplate/FormTemplate.vue";
+import { getToken } from "@/util/auth";
+import codeApply from "@/mixins/codeApply.js";
 export default {
-  name: "",
+  name: "BatchImport",
+  mixins: [codeApply],
+  components: { ShowImportData, FormTemplate },
   props: {
-    title: {
-      type: String,
-      default: "鎵归噺鐢宠缂栫爜",
-    },
-    tipInfo: {
-      type: Array,
-      default: () => [],
-    },
     visible: {
       type: Boolean,
       default: false,
     },
     accept: {
       type: String,
-      default: '.xlsx, .xls'
+      default: ".xlsx, .xls",
     },
     codeClassifyOid: {
       type: String,
-      default: ''
+      default: "",
     },
-    downloadTemplateFun: {
-      type: Function
-    }
+    type: {
+      type: String,
+      default: "",
+    },
+  },
+  computed: {
+    uploadHeaders() {
+      return {
+        "Blade-Auth": "bearer " + getToken(),
+      };
+    },
+    dialogVisible: {
+      get() {
+        return this.visible;
+      },
+      set(val) {
+        this.$emit("update:visible", val);
+      },
+    },
+    title() {
+      return this.currentTypeObj[this.type]["title"];
+    },
+    tipList() {
+      return this.currentTypeObj[this.type]["tipList"];
+    },
+    downloadTemplateApi() {
+      console.log(this.currentTypeObj[this.type], "this.type");
+      return this.currentTypeObj[this.type]["downloadTemplateFun"];
+    },
+    action() {
+      return this.currentTypeObj[this.type]["action"];
+    },
+    upParams() {
+      if (this.type === "historyImport" || this.type === "batchApplyCode") {
+        return {
+          codeClassifyOid: this.codeClassifyOid,
+          classifyAttr: this.classifyAttr,
+        };
+      } else if (this.type === "batchImportApply") {
+        // eslint-disable-next-line vue/no-side-effects-in-computed-properties
+        this.secDTOList = this.localSecVOList.map((item) => {
+          return {
+            secOid: item.oid,
+            secValue: this.codeApplyForm[item.oid],
+          };
+        });
+        return {
+          codeClassifyOid: this.codeClassifyOid,
+          secDTOList: JSON.stringify(this.secDTOList),
+          ...this.codeApplyForm,
+        };
+      }
+    },
   },
   data() {
     return {
-      classType: "classCode",
+      classifyAttr: "id",
+      downloadLoading: false,
+      showVisible: false,
+      leftTree: [],
+      redisOid: "",
+      pageLoading: null,
+      showCodeApply: false,
+      currentTypeObj: {
+        historyImport: {
+          title: "鍘嗗彶鏁版嵁瀵煎叆",
+          tipList: [
+            "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」",
+            "2.浼佷笟缂栫爜锛岄泦鍥㈢爜鍜岀姸鎬侀兘闇�瑕佸鍏�",
+            "3.姣忔浠呰兘鏈�澶氬鍏�10000鏉℃暟鎹紝濡傛灉鍑洪敊浼氳繑鍥為敊璇殑鏁版嵁鍜屽師鍥狅紝浣嗘槸姝g‘鐨勬暟鎹細淇濆瓨",
+            "4.鍒嗙被鐨勮矾寰勯渶瑕佺敤#鍒嗛殧銆備粎濉啓褰撳墠閫夌殑鍒嗙被鏍戜笂鐨勪笅绾у垎绫荤殑璺緞锛屽鏋滃綋鍓嶅垎绫诲凡缁忔槸鍙跺瓙鑺傜偣锛屽垯涓嶅~鍐�",
+          ],
+          action: "/api/ubcs-code/mdmEngineController/batchImportHistoryData",
+          downloadTemplateFun: downloadHistoryImportTemplate,
+          upParams: "classifyAttr",
+        },
+        batchImportApply: {
+          title: "鎵归噺鐢宠缂栫爜",
+          tipList: [
+            "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」",
+            "2.璇蜂竴瀹氬厛閫夋嫨/杈撳叆缂栫爜瑙勫垯鐨勭爜娈靛�煎悗鍐嶉�夋嫨excel鏂囦欢",
+            "3.姣忔浠呰兘鏈�澶氬鍏�10000鏉℃暟鎹紝濡傛灉鍑洪敊浼氳繑鍥為敊璇殑鏁版嵁鍜屽師鍥狅紝浣嗘槸姝g‘鐨勬暟鎹細淇濆瓨",
+            "4.濡傛灉灞炴�т负鍙傜収锛屽湪鍙傜収閰嶇疆涓缃涓睘鎬ф椂锛屼紭鍏堜娇鐢╪ame灞炴�х殑鍊硷紝鍚﹀垯濉啓绗竴涓睘鎬х殑鍊笺��",
+          ],
+          action: "/api/ubcs-code/mdmEngineController/batchImportCode",
+          downloadTemplateFun: downloadBatchImportApplyTemplate,
+          upParams: "codeApply",
+        },
+        batchApplyCode: {
+          title: "鎵归噺鐢宠缂栫爜",
+          tipList: [
+            "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」",
+            "2.鍒嗙被鐨勮矾寰勯渶瑕佺敤#鍒嗛殧銆備粠褰撳墠閫夋嫨鍒嗙被鑺傜偣鐨勪笅绾у紑濮嬪~鍐欙紝鐩村埌鏈�鏈熬鑺傜偣锛屽 浜у搧#涓绘満浜у搧#涓绘満浜у搧",
+          ],
+          action: "/api/ubcs-code/mdmEngineController/batchTopImportCode",
+          downloadTemplateFun: downloadBatchApplyCodeTemplate,
+          upParams: "classifyAttr",
+        },
+      },
+      secDTOList: [],
     };
   },
-  computed: {
-    action() {
-      console.log(process, 'process');
-      return '/api/ubcs-code/mdmEngineController/mdmEngineController/batchTopImportCode'
-    }
-  },
   methods: {
-    beforeUpload(file) {
-      const fileType = file.name.split('.').pop()
-      if (fileType !== 'xlsx' && fileType !== 'xls') {
+    async beforeUpload(file) {
+      const fileType = file.name.split(".").pop();
+      if (fileType !== "xlsx" && fileType !== "xls") {
         // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼�
-        this.$message.error('鍙厑璁镐笂浼爔lsx銆亁ls鏍煎紡鐨勬枃浠�');
-        return false;
+        this.$message.error("鍙厑璁镐笂浼爔lsx銆亁ls鏍煎紡鐨勬枃浠�");
+        return Promise.reject(false);
       }
+      if (this.type === "batchImportApply" && this.showCodeApply) {
+        const flag = await this.$refs.CodeApply.validate();
+        if (!flag) {
+          return Promise.reject(false);
+        }
+      }
+      this.pageLoading = this.$loading({
+        lock: true,
+        text: "鏂囦欢涓婁紶涓�",
+        spinner: "el-icon-loading",
+        background: "rgba(0, 0, 0, 0.7)",
+      });
       return true;
     },
+    // 涓嬭浇瀵煎叆妯℃澘
+    downloadTemplateFun() {
+      this.downloadLoading = true;
+      this.downloadTemplateApi({
+        codeClassifyOid: this.codeClassifyOid,
+      })
+        .then((res) => {
+          this.$utilFunc.downloadFileByBlob(res.data, this.title + "妯℃澘.xls");
+          this.downloadLoading = false;
+        })
+        .catch(() => {
+          this.downloadLoading = false;
+        });
+    },
+    onSuccess(res) {
+      if (Object.keys(res.data).length === 0) {
+        this.$message.success(this.title + "瀵煎叆鎴愬姛锛�");
+        this.dialogVisible = false;
+        return;
+      }
+      if (res.data.fileOid) {
+        const fileName = res.data.filePath.split("/").pop();
+        this.$message.error("璇蜂笅杞介敊璇俊鎭枃浠惰繘琛屾煡鐪嬶紒");
+        downloadErrorFile({ uuid: res.data.fileOid }).then((res2) => {
+          this.$utilFunc.downloadFileByBlob(res2.data, fileName);
+        });
+      }
+      if (res.data.redisUuid) {
+        this.redisOid = res.data.redisUuid;
+        importDataShow(res.data.redisUuid).then((res2) => {
+          this.leftTree = res2.data.data.map((item) => {
+            if (this.type === 'batchApplyCode') {
+              return {
+                cloNamesList: item.cloNamesList,
+                oid: item.codeTemplateOid,
+                codeClassifyOid: item.codeClassifyOid,
+                codeRuleOid: item.codeRuleOid,
+                name: item.codeRuleVO.name
+              }
+            } else {
+              return {
+              ...item.codeClassifyTemplateVO,
+              cloNamesList: item.cloNamesList,
+              codeClassifyOid: item.codeClassifyTemplateVO.codeclassifyoid
+            };
+            }
+          });
+          this.showVisible = true;
+        });
+      }
+    },
+    onError(err) {
+      console.log(err, "err");
+      this.pageLoading.close();
+    },
+    uploadChange(file) {
+      if (file.status === "success" || file.status === "error") {
+        this.pageLoading.close();
+      }
+    },
   },
+  watch: {},
 };
 </script>
 
 <style lang="scss" scoped>
 ul {
   color: rgb(188, 188, 188);
-  margin: 20px 0 0 0;
+  margin: 20px 0 20px 0;
   padding: 0;
   padding-left: 30px;
   list-style: none;
@@ -98,7 +314,7 @@
 }
 .radio_box {
   padding-left: 30px;
-  margin: 20px 0 25px 0;
+  margin: 0px 0 25px 0;
   display: flex;
   align-items: center;
   span {
@@ -109,4 +325,7 @@
   padding-left: 30px;
   margin-top: 30px;
 }
+/deep/ .no-print {
+  display: none !important;
+}
 </style>

--
Gitblit v1.9.3