From ce567eb11cd0cdbd826214c355d1a8caff175dca Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 15 十一月 2023 14:25:22 +0800 Subject: [PATCH] bug列表:181(修复新增,修改,删除接口,新增时没设置默认值,导致在建分类时无法查询到,关键属性查重规则)183(历史数据导入模板下载,过滤掉模板中配置的默认属性) --- Source/UBCS-WEB/src/components/BatchImport/index.vue | 564 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 334 insertions(+), 230 deletions(-) diff --git a/Source/UBCS-WEB/src/components/BatchImport/index.vue b/Source/UBCS-WEB/src/components/BatchImport/index.vue index 3c65d7a..0f7ca74 100644 --- a/Source/UBCS-WEB/src/components/BatchImport/index.vue +++ b/Source/UBCS-WEB/src/components/BatchImport/index.vue @@ -1,230 +1,334 @@ -<template> - <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"> - <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" - :on-change="uploadChange" - :data="{ - codeClassifyOid: this.codeClassifyOid, - classifyAttr: this.classifyAttr, - }" - > - <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="dialogVisible = false">鍏抽棴</el-button> - </template> - <ShowImportData - :visible.sync="showVisible" - v-if="dialogVisible" - :leftTree="leftTree" - :redisOid="redisOid" - ></ShowImportData> - </el-dialog> -</template> - -<script> -import ShowImportData from "./ShowImportData.vue"; -import { - downloadHistoryImportTemplate, - downloadErrorFile, - getHistoryLeftTree -} from "../../api/batchImport/index"; -import { getToken } from "@/util/auth"; -export default { - name: "BatchImport", - components: { ShowImportData }, - props: { - visible: { - type: Boolean, - default: false, - }, - accept: { - type: String, - default: ".xlsx, .xls", - }, - codeClassifyOid: { - type: String, - default: "", - }, - type: { - type: String, - default: "", - }, - }, - data() { - return { - classifyAttr: "id", - uploadParams: {}, - downloadLoading: false, - showVisible: false, - leftTree: [], - redisOid:'', - pageLoading: null - }; - }, - computed: { - uploadHeaders() { - return { - "Blade-Auth": "bearer " + getToken(), - }; - }, - dialogVisible: { - get() { - return this.visible; - }, - set(val) { - this.$emit("update:visible", val); - }, - }, - }, - methods: { - getDataByType() { - 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.鍒嗙被鐨勮矾寰勯渶瑕佺敤#鍒嗛殧銆備粠褰撳墠閫夋嫨鍒嗙被鑺傜偣鐨勪笅绾у紑濮嬪~鍐欙紝鐩村埌鏈�鏈熬鑺傜偣锛屽 浜у搧#涓绘満浜у搧#涓绘満浜у搧", - ]; - } - }, - beforeUpload(file) { - const fileType = file.name.split(".").pop(); - if (fileType !== "xlsx" && fileType !== "xls") { - // 涓婁紶鏍煎紡涓嶇鍚堣姹傦紝鎻愮ず閿欒淇℃伅骞跺彇娑堜笂浼� - this.$message.error("鍙厑璁镐笂浼爔lsx銆亁ls鏍煎紡鐨勬枃浠�"); - return false; - } - return true; - }, - // 涓嬭浇瀵煎叆妯℃澘 - downloadTemplateFun() { - this.downloadLoading = true; - downloadHistoryImportTemplate({ - codeClassifyOid: this.codeClassifyOid, - }) - .then((res) => { - this.$utilFunc.downloadFileByBlob(res.data, "鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls"); - this.downloadLoading = false; - }) - .catch(() => { - this.downloadLoading = false; - }); - }, - onSuccess(res) { - let fileName = res.data.filePath.split('/').pop() - if (res.data.fileOid) { - 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 - getHistoryLeftTree(res.data.redisUuid).then(res => { - this.leftTree = res.obj.map(item => { - return { - ...item.codeClassifyTemplateVO, - cloNamesList: item.cloNamesList - } - }) - this.showVisible = true - }) - } - }, - uploadChange(file) { - if (file.status === 'ready') { - this.pageLoading = this.$loading({ - lock: true, - text: '鏂囦欢涓婁紶涓�', - spinner: 'el-icon-loading', - background: 'rgba(0, 0, 0, 0.7)' - }); - } - if (file.status === 'success' || file.status === 'error') { - this.pageLoading.close() - } - } - }, - watch: { - visible: { - immediate: true, - handler() { - this.getDataByType(); - }, - }, - }, -}; -</script> - -<style lang="scss" scoped> -ul { - color: rgb(188, 188, 188); - margin: 20px 0 0 0; - padding: 0; - padding-left: 30px; - list-style: none; - li { - margin-bottom: 5px; - font-size: 12px; - } -} -.radio_box { - padding-left: 30px; - margin: 20px 0 25px 0; - display: flex; - align-items: center; - span { - margin-right: 20px; - } -} -.upload { - padding-left: 30px; - margin-top: 30px; -} -</style> +<template> + <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 + v-loading="!showCodeApply" + 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-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" + :resetTable="resetTable" + ></ShowImportData> + </el-dialog> +</template> + +<script> +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: "BatchImport", + mixins: [codeApply], + components: { ShowImportData, FormTemplate }, + props: { + visible: { + type: Boolean, + default: false, + }, + accept: { + type: String, + default: ".xlsx, .xls", + }, + codeClassifyOid: { + type: String, + default: "", + }, + type: { + type: String, + default: "", + }, + resetTable: Function + }, + 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() { + 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 { + classifyAttr: "id", + downloadLoading: false, + showVisible: false, + leftTree: [], + redisOid: "", + pageLoading: null, + showCodeApply: true, + currentTypeObj: { + historyImport: { + title: "鍘嗗彶鏁版嵁瀵煎叆", + tipList: [ + "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」", + "2.浼佷笟缂栫爜锛岄泦鍥㈢爜鍜岀姸鎬侀兘闇�瑕佸鍏�", + "3.姣忔浠呰兘鏈�澶氬鍏�5000鏉℃暟鎹�(鍙�氳繃nacos杩涜閰嶇疆锛屾帹鑽�5000/娆″鍏�)锛屽鏋滃嚭閿欎細杩斿洖閿欒鐨勬暟鎹拰鍘熷洜锛屼絾鏄纭暟鎹彲浠ョ户缁繚瀛�", + "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 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) { + this.pageLoading.close(); + //console.log('onError') + }, + uploadChange(file) { + if (file.status === "success" || file.status === "error") { + this.pageLoading.close(); + //console.log('uploadChange') + } + }, + }, + watch: {}, +}; +</script> + +<style lang="scss" scoped> +ul { + color: rgb(188, 188, 188); + margin: 20px 0 20px 0; + padding: 0; + padding-left: 30px; + list-style: none; + li { + margin-bottom: 5px; + font-size: 12px; + } +} +.radio_box { + padding-left: 30px; + margin: 0px 0 25px 0; + display: flex; + align-items: center; + span { + margin-right: 20px; + } +} +.upload { + padding-left: 30px; + margin-top: 30px; +} +/deep/ .no-print { + display: none !important; +} +</style> -- Gitblit v1.9.3