vue-apps/com.actionsoft.apps.coe.pal/views/repository/RepositoryImport.vue
shangxiaoran@qq.com 9d8f9f0e92 初始化应用
2022-06-28 01:29:37 +08:00

437 lines
18 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-container>
<div v-if="category!='org'" key="dialog2" class="repository-import">
<el-dialog
title="导入模型"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal=false
:before-close="handleClose">
<div style="height: 250px;" v-loading="loading" element-loading-text="请稍等">
<div style="text-align: center;padding-top: 10px;">
<awsui-button style="width: 130px;" class="button-general-color" type="primary" @click="openFileSelect('file')">本地文件上传</awsui-button>
</div>
<div class="text-second-color" style="font-size: 12px;margin-top: 10px;margin-left: 15px;">请上传export文件支持多个文件同时导入</div>
<div style="height: 180px;margin: 10px 10px;overflow:auto;">
<PALUpload ref="palUpload" style="width: 100%;"
class="upload-demo"
appId="com.actionsoft.apps.coe.pal"
repositoryName="tmp"
groupValue="_import"
fileValue="Normal"
:multiple=true
:on-preview="handlePreview"
:on-success="handleSuccess"
:on-remove="handleRemove"
:on-error="handleError"
:before-remove="beforeRemove"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-progress="handleProgress"
accept=".export"
:file-list="fileList">
<div style="display: none;">
<awsui-button name="selectFileButton" style="width: 130px;" class="button-general-color" type="primary">本地文件上传</awsui-button>
</div>
</PALUpload>
</div>
</div>
<span slot="footer" class="dialog-footer">
<awsui-button class="button-general-color" :disabled="buttonDisabled" type="primary" @click="importSave">确定</awsui-button>
<awsui-button @click="cancel">取消</awsui-button>
</span>
</el-dialog>
</div>
<div v-else="category=='org'" key="dialog1" class="repository-import">
<el-dialog
title="导入组织模型"
:visible.sync="dialogVisible"
:close-on-click-modal=false
width="500px"
:before-close="handleClose">
<div v-show="step1" id="step1" style="height: 250px;text-align: center;" v-loading="loading" element-loading-text="请稍等">
<div style="position: relative;top:35%;">
<div style="margin-bottom: 25px;">
<awsui-button style="width: 130px;" class="button-general-color" type="primary" @click="openFileSelect('file')">直接导入</awsui-button>
</div>
<div>
<awsui-button style="width: 130px;" class="button-general-color-reverse" @click="openFileSelect('excel')">模板导入</awsui-button>
</div>
</div>
</div>
<div v-show="step2" id="step2" style="height: 250px;" v-loading="loading" element-loading-text="请稍等">
<div style="text-align: center;padding-top: 10px;">
<awsui-button style="width: 130px;" :class="{'button-general-color': type == 'file', 'button-general-color-reverse': type == 'excel'}" :type="type == 'file' ? 'primary' : ''" @click="openFileSelect('file')">直接导入</awsui-button>
<awsui-button style="width: 130px;" :class="{'button-general-color': type == 'excel', 'button-general-color-reverse': type == 'file'}" :type="type == 'excel' ? 'primary' : ''" @click="openFileSelect('excel')">模板导入</awsui-button>
</div>
<div v-if="type == 'file'">
<div class="text-second-color" style="font-size: 12px;margin-top: 10px;margin-left: 15px;">请点击"直接导入"按钮上传export文件支持多个文件同时导入</div>
<div style="height: 180px;margin: 10px 10px;overflow:auto;">
<PALUpload ref="palUpload" style="width: 100%;"
class="upload-demo"
appId="com.actionsoft.apps.coe.pal"
repositoryName="tmp"
groupValue="_import"
fileValue="Normal"
:multiple=true
:on-preview="handlePreview"
:on-success="handleSuccess"
:on-remove="handleRemove"
:on-error="handleError"
:before-remove="beforeRemove"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-progress="handleProgress"
accept=".export"
:file-list="fileList">
<div style="display: none;">
<awsui-button name="selectFileButton" style="width: 130px;" class="button-general-color" type="primary">本地文件上传</awsui-button>
</div>
</PALUpload>
</div>
</div>
<div v-if="type == 'excel'">
<div style="height: 200px;margin: 25px 10px 10px;overflow:auto;">
<div style="width: 438px;height: 80px;border: 1px solid #F2F2F2;">
<div style="float: left;height: 100%;width: 80px;display: inline-block;background-color: #F5F7FA;text-align: center;line-height: 85px;vertical-align: middle;">
<i style="font-size: 40px;" class="iconfont text-second-color">&#xe61d;</i>
</div>
<div style="float: left;height: 100%;">
<div style="display: inline-block;height: 100%;margin-left: 15px;margin-top: 9px;">
<p class="text-general-color">填写导入组织信息</p>
<p class="text-second-color" style="font-size: 12px;padding-top: 4px;padding-bottom: 4px;">请按照说明格式正确填写Excel文件</p>
<p style="font-size: 12px;cursor: pointer;" class="text-linker-color" @click="downloadOrgTemplate()">下载模板</p>
</div>
</div>
</div>
<div style="height: 20px;"></div>
<div style="width: 438px;height: 80px;border: 1px solid #F2F2F2;">
<div style="float: left;height: 100%;width: 80px;display: inline-block;background-color: #F5F7FA;text-align: center;line-height: 85px;vertical-align: middle;">
<i style="font-size: 40px;" class="iconfont text-second-color">&#xe612;</i>
</div>
<div style="float: left;height: 100%;">
<div style="display: inline-block;height: 100%;margin-left: 15px;margin-top: 9px;">
<p class="text-general-color">上传填好的组织信息文件</p>
<p class="text-second-color" style="font-size: 12px;padding-top: 4px;padding-bottom: 4px;">文件后缀必须为xls或xlsx即Excel格式</p>
<p v-if="!isOrgUploaded" style="font-size: 12px;cursor: pointer;" class="text-linker-color" @click="uploadOrgExcel">上传文件</p>
<p v-else style="font-size: 12px;cursor: pointer;" class="text-linker-color"><label style="display: inline-block;max-width: 300px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">{{orgUploadFileName}}</label>&nbsp;<i class="iconfont text-important-color" style="font-size: 12px;position: relative;top: -3px;" @click="removeOrgUpload">&#xe626;</i></p>
</div>
</div>
</div>
</div>
<PALUpload ref="orgUpload" style="width: 100%;"
class="upload-demo"
appId="com.actionsoft.apps.coe.pal"
repositoryName="tmp"
groupValue="_import"
fileValue="Normal"
:limit="1"
:show-file-list=false
:on-success="handleOrgUploadSuccess"
accept=".xls,.xlsx"
:file-list="orgFileList">
<div style="display: none;">
<awsui-button name="selectOrgFileButton" style="width: 130px;" class="button-general-color" type="primary">Excel文件上传</awsui-button>
</div>
</PALUpload>
</div>
</div>
<span slot="footer" class="dialog-footer">
<awsui-button class="button-general-color" :disabled="buttonDisabled" type="primary" @click="importSave">确定</awsui-button>
<awsui-button @click="cancel">取消</awsui-button>
</span>
</el-dialog>
</div>
</el-container>
</template>
<script>
import PALUpload from "@/components/common/upload/index.vue";
import awsuiAxios from "../../awsuiAxios";
export default {
name: "RepositoryImport",
components: {PALUpload},
data() {
return {
dialogVisible: false,
buttonDisabled: false,
category: '',
obj: null,
fileList: [],
step1: true,
step2: false,
type: 'file',
orgFileList: [],
isOrgUploaded: false,
orgUploadFileName: '',
parentId: '',
loading: false
}
},
inject: ['getIsHighSecurity','setSecurityVisible','securityFileList','setSecurityType'],
computed:{
isHighSecurity(){
return this.getIsHighSecurity();
},
},
methods: {
clearParam() {
this.category = '';
this.obj = null;
this.fileList = [];
this.orgFileList = [];
this.buttonDisabled = false;
this.dialogVisible = false;
this.step1 = true;
this.step2 = false;
this.type = '';
this.isOrgUploaded = false;
this.orgUploadFileName = '';
this.parentId = '';
this.loading = false;
if (this.$refs.palUpload) {
this.$refs.palUpload.clearFiles();
}
if (this.$refs.orgUpload) {
this.$refs.orgUpload.clearFiles();
}
},
openImportRepositoryDlg(obj, category, parentId) {
const that = this;
that.category = category;
that.obj = obj;
that.parentId = parentId;
setTimeout(() => {
that.dialogVisible = true;
that.$nextTick(() => {
if (that.category != 'org') {
that.openFileSelect('file');
}
});
}, 300);
},
cancel() {
this.clearParam();
},
importSave() {
const that = this;
const wsId = that.$store.getters.getWsIdFn;
const teamId = that.$store.getters.getTeamIdFn;
let fileName = '';
if (that.type == 'file') {
if (that.fileList.length == 0) {
that.$message({message: '请上传需要导入的文件',type: 'warning'});
return;
}
const fileList = [];
for (let i = 0; i < that.fileList.length; i++) {
fileList.push(that.fileList[i].name);
}
that.buttonDisabled = true;
that.loading = true;
const data = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal_pl_import',
fileList: JSON.stringify(fileList),
wsId: wsId,
teamId: teamId,
plCategory: that.category,
parentId: that.parentId
}
};
// 查询数据
awsuiAxios.post(data).then(function (ro) {
if(ro.result == 'ok') {
//三员管理,密级标定
if(that.isHighSecurity){
let securityBindList = ro.data.data.securityBindList;
if(undefined !=securityBindList && securityBindList.length>0){
for(let i=0;i<securityBindList.length;i++){
let securityBind = securityBindList[i];
that.securityFileList.push(securityBind);
}
that.setSecurityType("import")
that.setSecurityVisible(true);
}
}else{
that.$message({
message: '导入成功',
type: 'success'
});
}
// 刷新节点重新打开
that.obj.refreshNode();
that.obj.openRepositoryList(that.parentId);
that.cancel();
} else {
that.$message.error(ro.msg);
that.buttonDisabled = false;
that.loading = false;
}
}).catch(error=>{
console.log(error);
})
} else if (that.category == 'org' && that.type == 'excel') {// 组织Excel导入
if (that.orgFileList.length == 0) {
that.$message({message: '请上传需要导入的组织文件',type: 'warning'});
return;
}
fileName = that.orgFileList[0].name;// 组织文件
that.loading = true;
const data = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal_repository_import_org',
fileName: fileName,
wsId: wsId,
teamId: teamId,
parentId: that.parentId
}
};
// 查询数据
awsuiAxios.post(data).then(function (ro) {
if(ro.result == 'ok') {
//三员管理,密级标定
if(that.isHighSecurity){
let securityBindList = ro.data.securityBindList;
if(undefined !=securityBindList && securityBindList.length>0){
for(let i=0;i<securityBindList.length;i++){
let securityBind = securityBindList[i];
that.securityFileList.push(securityBind);
}
that.setSecurityType("import")
that.setSecurityVisible(true);
}
}else{
that.$message({
message: '导入成功',
type: 'success'
});
}
// 刷新节点重新打开
that.obj.refreshNode();
that.obj.openRepositoryList(that.parentId);
that.cancel();
} else {
that.$message.error(ro.msg);
that.buttonDisabled = false;
that.loading = false;
}
}).catch(error=>{
console.log(error);
})
}
},
handleClose(done) {
this.clearParam();
done();
},
handleRemove(file, fileList) {
this.fileList = fileList;
},
handlePreview(file) {
console.log(file);
},
handleExceed(files, fileList) {
},
handleError(err, file, fileList) {
},
beforeUpload(file) {
},
handleProgress(event, file, fileList) {
},
handleSuccess(response, file, fileList) {
const that = this;
that.fileList = [];
let hash = {};
for (let i = fileList.length-1; i >= 0; i--) {
let currFile = fileList[i];
if (!hash[currFile.name]) {
that.fileList.unshift(currFile);
hash[currFile.name] = true;
}
}
},
beforeRemove(file, fileList) {
if (file.status == 'success') {
// 删除之前,进行服务器文件删除
}
},
openFileSelect(type) {
this.type = type;
if (this.category != 'org') {
this.$nextTick(()=>{
document.getElementsByName("selectFileButton")[0].click();
});
} else {
if (type == 'file') {
this.step1 = false;
this.step2 = true;
this.$nextTick(()=>{
document.getElementsByName("selectFileButton")[0].click();
});
} else {
this.type = type;
this.step1 = false;
this.step2 = true;
}
}
},
downloadOrgTemplate() {// 下载组织模板
const that = this;
const data = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal_repository_import_org_template',
category: that.category
}
};
// 查询数据
awsuiAxios.post(data).then(function (ro) {
window.open(ro.url);
}).catch(error=>{
console.log(error);
})
},
uploadOrgExcel() {// 上传组织文件
if (this.$refs.orgUpload) {
this.$refs.orgUpload.clearFiles();
}
document.getElementsByName("selectOrgFileButton")[0].click();
},
handleOrgUploadSuccess(response, file, fileList) {
this.orgFileList = [];
this.orgFileList.push(file);
// 赋值
this.orgUploadFileName = file.name;
this.isOrgUploaded = true;
},
removeOrgUpload() {
this.isOrgUploaded = false;
this.orgFileList = [];
this.orgUploadFileName = '';
}
}
}
</script>
<style scoped>
.repository-import >>> .el-dialog__body {
padding: 10px 20px;
color: #606266;
font-size: 14px;
word-break: break-all;
}
.repository-import >>> .el-upload-list__item:first-child {
margin-top: 0px;
}
.repository-import >>> .el-upload {
display: none;
}
</style>