增加没有分配菜单的拦截功能

This commit is contained in:
2026-07-15 09:07:12 +08:00
parent 4edaca03cf
commit bafe23a43c
3 changed files with 26 additions and 7 deletions

View File

@@ -3,7 +3,7 @@ import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getAccessToken } from '@/utils/auth'
import { getAccessToken, removeToken } from '@/utils/auth'
import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false })
@@ -64,13 +64,25 @@ router.beforeEach((to, from, next) => {
} else {
if (store.getters.roles.length === 0) {
isRelogin.show = true
// 获取字典数据 add by 芋艿
store.dispatch('dict/loadDictDatas')
// 获取部门权限
store.dispatch('GetLevel')
// 判断当前用户是否已拉取完 user_info 信息
store.dispatch('GetInfo').then(userInfo => {
isRelogin.show = false
// 菜单为空时,清理登录信息、取消跳转,不调用后续接口
if (!userInfo.menus || userInfo.menus.length === 0) {
store.dispatch('LogOut').then(() => {
Message.error('当前用户没有菜单权限,请联系管理员添加')
next({ path: '/login', query: { menu_error: Date.now() }, replace: true })
}).catch(() => {
removeToken()
Message.error('当前用户没有菜单权限,请联系管理员添加')
next({ path: '/login', query: { menu_error: Date.now() }, replace: true })
})
return
}
// 获取字典数据 add by 芋艿
store.dispatch('dict/loadDictDatas')
// 获取部门权限
store.dispatch('GetLevel')
// 触发 GenerateRoutes 事件时,将 menus 菜单树传递进去
store.dispatch('GenerateRoutes', userInfo.menus).then(accessRoutes => {
// 根据 roles 权限生成可访问的路由表

View File

@@ -11,7 +11,7 @@ const permission = {
addRoutes: [],
sidebarRouters: [], // 左侧边菜单的路由,被 Sidebar/index.vue 使用
topbarRouters: [], // 顶部菜单的路由,被 TopNav/index.vue 使用
defaultPath: '/', // 登录后默认跳转路径(由菜单 jumpFlag===1 决定)
defaultPath: '/'
},
mutations: {
SET_DEFAULT_PATH: (state, path) => {

View File

@@ -246,6 +246,11 @@ export default {
: undefined;
this.getCookie();
},
watch: {
'$route.query.menu_error'() {
this.loading = false;
},
},
destroyed() {
document.body.style['min-height'] = 'unset';
},
@@ -293,7 +298,9 @@ export default {
)
.then(() => {
console.log(this.redirect, this.$route.query.redirect, 'this.redirect');
this.$router.push({ path: this.redirect || '/' }).catch(() => { });
this.$router.push({ path: this.redirect || '/' }).catch(() => {
this.loading = false;
});
})
.catch(() => {
this.loading = false;