204 lines
6.1 KiB
Vue
204 lines
6.1 KiB
Vue
<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-model>
|
|
<a-form-model-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-model-item>
|
|
|
|
|
|
<a-form-model-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-model-item>
|
|
|
|
</a-form-model>
|
|
</a-modal>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
import Vue from 'vue'
|
|
import { putAction } from '@/api/manage'
|
|
import { USER_INFO } from '@/store/mutation-types'
|
|
|
|
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.isMultiDepart = false
|
|
}else if(multi_depart==2){
|
|
this.visible=true
|
|
this.isMultiDepart = true
|
|
this.departList = loginResult.departs
|
|
}else {
|
|
this.isMultiDepart = false
|
|
}
|
|
},
|
|
bizTenantList(loginResult) {
|
|
let tenantList = loginResult.tenantList
|
|
if (Array.isArray(tenantList)) {
|
|
if (tenantList.length === 0) {
|
|
this.isMultiTenant = false
|
|
} else if (tenantList.length === 1) {
|
|
this.tenant_id = tenantList[0].id
|
|
this.isMultiTenant = false
|
|
} else {
|
|
this.visible = true
|
|
this.isMultiTenant = true
|
|
this.tenantList = tenantList
|
|
}
|
|
}
|
|
},
|
|
show(loginResult){
|
|
this.clear();
|
|
this.bizDepart(loginResult);
|
|
|
|
let user = Vue.ls.get(USER_INFO)
|
|
this.username = user.username
|
|
this.bizTenantList(loginResult);
|
|
|
|
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){
|
|
const userInfo = res.result.userInfo;
|
|
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000);
|
|
this.$store.commit('SET_INFO', userInfo);
|
|
//console.log("---切换组织机构---userInfo-------",store.getters.userInfo.orgCode);
|
|
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> |