From bafe23a43ca4b8e58a68d570e5dc21137cfdc1e6 Mon Sep 17 00:00:00 2001 From: juzi <819872918@qq.com> Date: Wed, 15 Jul 2026 09:07:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B2=A1=E6=9C=89=E5=88=86?= =?UTF-8?q?=E9=85=8D=E8=8F=9C=E5=8D=95=E7=9A=84=E6=8B=A6=E6=88=AA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/permission.js | 22 +++++++++++++++++----- src/store/modules/permission.js | 2 +- src/views/login.vue | 9 ++++++++- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/permission.js b/src/permission.js index ae41dce2..511e839d 100644 --- a/src/permission.js +++ b/src/permission.js @@ -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 权限生成可访问的路由表 diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 260d838d..42f97a99 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -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) => { diff --git a/src/views/login.vue b/src/views/login.vue index d299a4ed..0eceb156 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -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;