From 5ef4fa687896d8d3e061a38b0e009e64b018cb79 Mon Sep 17 00:00:00 2001 From: fujunling <2984387807@qq.com> Date: 星期三, 05 七月 2023 18:15:36 +0800 Subject: [PATCH] 批量带入 --- Source/UBCS-WEB/src/components/BatchImport/index.vue | 329 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 237 insertions(+), 92 deletions(-) diff --git a/Source/UBCS-WEB/src/components/BatchImport/index.vue b/Source/UBCS-WEB/src/components/BatchImport/index.vue index a5bacf6..a1ebae2 100644 --- a/Source/UBCS-WEB/src/components/BatchImport/index.vue +++ b/Source/UBCS-WEB/src/components/BatchImport/index.vue @@ -1,51 +1,85 @@ <template> - <div> - <el-dialog :title="title" :visible="visible" append-to-body> - <Divider text="瀵煎叆鎻愮ず" left="30px"></Divider> - <ul> - <li v-for="(item, index) in tipList" :key="index"> - {{ item }} - </li> - </ul> - <div class="radio_box"> - <span>鍒嗙被鐨勮矾寰勪娇鐢ㄧ殑灞炴��:</span> - <el-radio-group v-model="classifyAttr"> - <el-radio label="id">鍒嗙被缂栧彿</el-radio> - <el-radio label="name">鍒嗙被鍚嶇О</el-radio> - </el-radio-group> - </div> - <Divider text="excel鏂囦欢锛岄�夋嫨鏂囦欢鍚庝細鑷姩涓婁紶" left="30px"></Divider> - <el-upload - class="upload" - :accept="accept" - :action="action" - :before-upload="beforeUpload" - :on-exceed="handleExceed" - :headers="uploadHeaders" - :on-success="onSuccess" - :show-file-list="false" - :data="{ - codeClassifyOid: this.codeClassifyOid, - classifyAttr: this.classifyAttr, - }" + <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 tipList" :key="index"> + {{ item }} + </li> + </ul> + <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 + class="upload" + :accept="accept" + :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" - :loading="downloadLoading" - >涓嬭浇瀵煎叆妯℃澘</el-button - > - <el-button size="small" @click="visible = false">鍏抽棴</el-button> - </template> - </el-dialog> - <ShowImportData :visible="showVisible" v-if="showVisible"></ShowImportData> - </div> + </el-upload> + <template #footer> + <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> @@ -53,11 +87,17 @@ 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: "BatchImport", - components: { ShowImportData }, + mixins: [codeApply], + components: { ShowImportData, FormTemplate }, props: { visible: { type: Boolean, @@ -69,20 +109,12 @@ }, codeClassifyOid: { type: String, - default: "535FC9B6-FE27-241F-5FCA-ED4DC17CF95B", + default: "", }, type: { type: String, default: "", }, - }, - data() { - return { - classifyAttr: "id", - uploadParams: {}, - downloadLoading: false, - showVisible: false, - }; }, computed: { uploadHeaders() { @@ -90,72 +122,182 @@ "Blade-Auth": "bearer " + getToken(), }; }, - }, - methods: { - getDataByType() { + 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.title = "鍘嗗彶鏁版嵁瀵煎叆"; - this.tipList = [ - "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」", - "2.浼佷笟缂栫爜锛岄泦鍥㈢爜鍜岀姸鎬侀兘闇�瑕佸鍏�", - "3.姣忔浠呰兘鏈�澶氬鍏�10000鏉℃暟鎹紝濡傛灉鍑洪敊浼氳繑鍥為敊璇殑鏁版嵁鍜屽師鍥狅紝浣嗘槸姝g‘鐨勬暟鎹細淇濆瓨", - "4.鍒嗙被鐨勮矾寰勯渶瑕佺敤#鍒嗛殧銆備粎濉啓褰撳墠閫夌殑鍒嗙被鏍戜笂鐨勪笅绾у垎绫荤殑璺緞锛屽鏋滃綋鍓嶅垎绫诲凡缁忔槸鍙跺瓙鑺傜偣锛屽垯涓嶅~鍐�", - ]; - this.action = - "/api/ubcs-code/mdmEngineController/batchImportHistoryData"; - } else if (this.type === "codeApply") { - this.title = "鎵归噺缂栫爜鐢宠"; - this.tipList = [ - "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」", - "2.鍒嗙被鐨勮矾寰勯渶瑕佺敤#鍒嗛殧銆備粠褰撳墠閫夋嫨鍒嗙被鑺傜偣鐨勪笅绾у紑濮嬪~鍐欙紝鐩村埌鏈�鏈熬鑺傜偣锛屽 浜у搧#涓绘満浜у搧#涓绘満浜у搧", - ]; + 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.id], + }; + }); + return { + codeClassifyOid: this.codeClassifyOid, + secDTOList: JSON.stringify(this.secDTOList), + ...this.codeApplyForm, + }; + } else if (this.type === "batchApplyCode") { + return { + codeClassifyOid: this.codeClassifyOid, + classifyAttr: this.classifyAttr, + }; } }, - beforeUpload(file) { + }, + data() { + return { + 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: [], + }; + }, + methods: { + async beforeUpload(file) { const fileType = file.name.split(".").pop(); if (fileType !== "xlsx" && fileType !== "xls") { // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� this.$message.error("鍙厑璁镐笂浼爔lsx銆亁ls鏍煎紡鐨勬枃浠�"); - return false; + 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; - downloadHistoryImportTemplate({ - codeClassifyOid: "535FC9B6-FE27-241F-5FCA-ED4DC17CF95B", + this.downloadTemplateApi({ + codeClassifyOid: this.codeClassifyOid, }) .then((res) => { + this.$utilFunc.downloadFileByBlob(res.data, this.title + "妯℃澘.xls"); this.downloadLoading = false; - console.log(res); }) .catch(() => { this.downloadLoading = false; }); }, onSuccess(res) { - if (res.code === 400) { - this.$message.error(`${res.msg}锛岃涓嬭浇閿欒淇℃伅杩涜鏌ョ湅锛乣); + if (Object.keys(res.data).length === 0) { + this.$message.success(this.title + "瀵煎叆鎴愬姛锛�"); + this.dialogVisible = false; + return; } - downloadErrorFile({ uuid: res.data.fileOid }); + 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) => { + return { + ...item.codeClassifyTemplateVO, + cloNamesList: item.cloNamesList, + }; + }); + 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: { - visible: { - immediate: true, - handler() { - this.getDataByType(); - }, - }, - }, + 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; @@ -166,7 +308,7 @@ } .radio_box { padding-left: 30px; - margin: 20px 0 25px 0; + margin: 0px 0 25px 0; display: flex; align-items: center; span { @@ -177,4 +319,7 @@ padding-left: 30px; margin-top: 30px; } +/deep/ .no-print { + display: none !important; +} </style> -- Gitblit v1.9.3