管理端用户切换角色
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2024-12-30 13:30:10 +08:00
parent 75f3b37c05
commit a78d848424
1 changed files with 107 additions and 16 deletions

View File

@ -14,13 +14,13 @@
<div class="right-menu">
<div class="navbar-flex-wrapper">
<template v-if="device!=='mobile'">
<template v-if="device !== 'mobile'">
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</template>
<!-- <div class="avatar-container">
<img src="@/assets/avatar.png" class="user-avatar">
</div> -->
<div style="margin-left:20px;">
<div style="margin-left: 20px">
<el-dropdown class="dropdown-container" trigger="click">
<span class="el-dropdown-link">
{{ `${name} (${userTypeShortName})` }}
@ -30,10 +30,20 @@
</span>
<el-dropdown-menu slot="dropdown" class="user-dropdown">
<el-dropdown-item v-if="!isReviewer">
<span style="display:block;" @click="editInfo">{{$t('system:navbar:button:Profile')}}</span>
<span style="display: block" @click="editInfo">{{
$t('system:navbar:button:Profile')
}}</span>
</el-dropdown-item>
<!-- 切换角色 -->
<el-dropdown-item divided v-if="hasRole">
<span style="display: block" @click="openToggleRole">{{
$t('system:navbar:button:toggleRole')
}}</span>
</el-dropdown-item>
<el-dropdown-item divided>
<span style="display:block;" @click="logout">{{$t('system:navbar:button:Log Out')}}</span>
<span style="display: block" @click="logout">{{
$t('system:navbar:button:Log Out')
}}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@ -41,38 +51,119 @@
<TopLang></TopLang>
</div>
</div>
<toggleRole
v-if="toggleRoleVisible"
:visible.sync="toggleRoleVisible"
:loading="toggleRoleLoading"
@save="loginByRole"
/>
</div>
</template>
<script>
import {mapGetters, mapMutations} from 'vuex'
import { mapGetters, mapMutations } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import TopLang from './topLang'
import toggleRole from '@/components/toggleRole'
import { resetRouter } from '@/router'
export default {
components: {
Breadcrumb,
Hamburger,
Screenfull,
TopLang
TopLang,
toggleRole,
},
data() {
return {
isReviewer: false,
userTypeShortName: zzSessionStorage.getItem('userTypeShortName')
toggleRoleVisible: false,
toggleRoleLoading: false,
}
},
computed: {
...mapGetters(['sidebar', 'name', 'device'])
...mapGetters(['sidebar', 'name', 'device', 'userTypeShortName']),
roles() {
return this.$store.state.user.roles
},
hasRole() {
return this.roles && this.roles.length > 1
},
},
created() {
// this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
openToggleRole() {
this.$store.dispatch('user/getUserInfo').then((res) => {
this.toggleRoleVisible = true
})
},
loginByRole(userRoleId) {
if (this.$store.state.user.userId === userRoleId) {
this.toggleRoleVisible = false
this.toggleRoleLoading = false
return false
}
this.toggleRoleLoading = true
this.$store
.dispatch('user/loginByRole', { userRoleId })
.then((res) => {
if (res) {
this.$store
.dispatch('permission/generateRoutes')
.then(async (res) => {
if (res && res.length > 0) {
resetRouter()
await this.$store.dispatch('global/getNoticeList')
this.$router.addRoutes(res)
this.toggleRoleLoading = false
if (this.loginType === 'DevOps') {
this.$router.replace({ path: res[0].path })
return
}
if (this.hasPermi(['role:radmin'])) {
this.$router.replace({ path: res[0].path })
return
}
if (
this.hasPermi([
'role:air',
'role:rpm',
'role:rcrc',
'role:rir',
])
) {
history.replaceState(null, null, '/trials/trials-list')
history.go(0)
} else {
history.replaceState(null, null, '/trials/trials-workbench')
history.go(0)
}
this.toggleRoleVisible = false
this.toggleRoleLoading = false
this.$EventBus.$emit('reload')
} else {
//
this.toggleRoleLoading = false
this.$message.warning(this.$t('login:message:login2'))
}
})
.catch((err) => {
console.log(err)
this.toggleRoleLoading = false
})
} else {
this.toggleRoleLoading = false
}
})
.catch(() => {
this.toggleRoleLoading = false
})
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
@ -91,16 +182,16 @@ export default {
editInfo() {
this.$router.push({ name: 'BaiscInfo' })
},
}
},
}
</script>
<style lang="scss" scoped>
.navbar-flex-wrapper{
.navbar-flex-wrapper {
display: flex;
flex-direction: row;
justify-content: space-between;
}
}
.navbar {
height: 50px;
overflow: hidden;