221 lines
6.7 KiB

<template>
<a-modal
:title="title"
:width="450"
:visible="visible"
:closable="false"
:maskClosable="false">
<template slot="footer">
<a-button type="primary" @click="selectOk">确认</a-button>
</template>
<a-form>
<a-form-item v-if="isMultiTenant" :labelCol="{span:4}" :wrapperCol="{span:20}" style="margin-bottom:10px" :validate-status="validate_status1">
<a-tooltip placement="topLeft" >
<template slot="title">
<span>您有多个租户,请选择登录租户</span>
</template>
<a-avatar style="backgroundColor:#87d068" icon="gold" />
</a-tooltip>
<a-select @change="handleTenantChange" :class="{'valid-error':validate_status1=='error'}" placeholder="请选择登录租户" style="margin-left:10px;width: 80%">
<a-icon slot="suffixIcon" type="gold" />
<a-select-option v-for="d in tenantList" :key="d.id" :value="d.id">
{{ d.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item v-if="isMultiDepart" :labelCol="{span:4}" :wrapperCol="{span:20}" style="margin-bottom:10px" :validate-status="validate_status2">
<a-tooltip placement="topLeft" >
<template slot="title">
<span>您有多个部门,请选择登录部门</span>
</template>
<a-avatar style="backgroundColor:rgb(104, 208, 203);" icon="gold" />
</a-tooltip>
<a-select @change="handleDepartChange" :class="{'valid-error':validate_status2=='error'}" placeholder="请选择登录部门" style="margin-left:10px;width: 80%">
<a-icon slot="suffixIcon" type="gold" />
<a-select-option v-for="d in departList" :key="d.id" :value="d.orgCode">
{{ d.departName }}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
</template>
<script>
import Vue from 'vue'
import { getAction,putAction } from '@/api/manage'
import { USER_INFO,PARENT_ID,PUWWC_Id,IS_PROJECT } from "@/store/mutation-types"
import store from './Login'
export default {
name: 'LoginSelectTenant',
data(){
return {
visible: false,
isMultiDepart:false,
departList:[],
isMultiTenant:false,
tenantList:[],
username:'',
orgCode:'',
tenant_id:'',
validate_status1: "",
validate_status2: "",
}
},
computed:{
title(){
if(this.isMultiDepart && this.isMultiTenant){
return '请选择租户和部门'
}else if(this.isMultiDepart && !this.isMultiTenant){
return '请选择部门'
}else if(!this.isMultiDepart && this.isMultiTenant){
return '请选择租户'
}
}
},
methods:{
clear(){
this.departList = []
this.tenantList = []
this.visible=false
this.validate_status1=''
this.validate_status2=''
},
bizDepart(loginResult){
let multi_depart = loginResult.multi_depart
//0:无部门 1:一个部门 2:多个部门
if(multi_depart==0){
this.$notification.warn({
message: '提示',
description: `您尚未归属部门,请确认账号信息`,
duration:3
});
this.isMultiDepart = false
}else if(multi_depart==2){
this.visible=true
this.isMultiDepart = true
this.departList = loginResult.departs
}else {
this.isMultiDepart = false
}
},
bizTenant(ids){
if(!ids || ids.length==0){
this.isMultiTenant = false
} else if(ids.indexOf(',')<0){
this.tenant_id = ids;
this.isMultiTenant = false
}else{
this.visible = true
this.isMultiTenant = true
getAction('/sys/tenant/queryList', {ids: ids}).then(res=>{
this.tenantList = res.result
})
}
},
show(loginResult){
this.clear();
this.bizDepart(loginResult);
let user = Vue.ls.get(USER_INFO)
this.username = user.username
let ids = user.relTenantIds
this.bizTenant(ids);
if(this.visible===false){
this.$store.dispatch('saveTenant', this.tenant_id);
this.$emit('success')
}
},
requestFailed (err) {
this.$notification[ 'error' ]({
message: '登录失败',
description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试",
duration: 4,
});
this.loginBtn = false;
},
departResolve(){
return new Promise((resolve, reject)=>{
if(this.isMultiDepart===false){
resolve();
}else{
let obj = {
orgCode:this.orgCode,
username:this.username
}
putAction("/sys/selectDepart",obj).then(res=>{
if(res.success){
console.log(res.result,"切换部门")
const userInfo = res.result.userInfo;
const isProject=res.result.isProject;
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000);
this.$store.commit('SET_INFO', userInfo);
const parentId=res.result.parentId;
sessionStorage.setItem(PARENT_ID,parentId);
if (isProject){
sessionStorage.setItem(IS_PROJECT,JSON.stringify(isProject));
}
if (res.result.puwwcId){
console.log(res.result.puwwcId)
const puwwcId=res.result.puwwcId;
sessionStorage.setItem('PUWWC_Id',puwwcId);
}
resolve();
}else{
this.requestFailed(res)
this.$store.dispatch('Logout');
reject();
}
})
}
})
},
selectOk(){
if(this.isMultiTenant && !this.tenant_id){
this.validate_status1='error'
return false
}
if(this.isMultiDepart && !this.orgCode){
this.validate_status2='error'
return false
}
this.departResolve().then(()=>{
this.$store.dispatch('saveTenant', this.tenant_id);
if(this.isMultiTenant){
this.$emit('success')
}else{
this.$emit('success')
}
}).catch(()=>{
console.log('登录选择出问题')
})
},
handleTenantChange(e){
this.validate_status1 = ''
this.tenant_id = e
},
handleDepartChange(e){
this.validate_status2 = ''
this.orgCode = e
}
}
}
</script>
<style scoped>
</style>