<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条数据,如果出错会返回错误的数据和原因,但是正确的数据会保存",
|
"4.如果属性为参照,在参照配置中设置多个属性时,优先使用name属性的值,否则填写第一个属性的值。",
|
],
|
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("只允许上传xlsx、xls格式的文件");
|
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.resetTable()
|
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>
|