修复bug
This commit is contained in:
1 parent
1850ac640e
commit
892ba5886d
20 files changed
+1078
-178
No files matched your search
@@ -3,6 +3,14 @@ import { ref, computed } from 'vue'
|
||||
// import { getUserInfo } from '@/utils/auth'
|
||||
import { getMenus } from '@/api/menu';
|
||||
|
||||
// 是否属于「登录态失效」类错误。
|
||||
// request.js 已给鉴权错误打上 status=401,同时兼容历史文案与 axios 原始错误。
|
||||
const isAuthError = (err) =>
|
||||
err?.status === 401 ||
|
||||
err?.response?.status === 401 ||
|
||||
err?.isAuthError === true ||
|
||||
/token已过期|token无效|无效的token/.test(err?.message || '');
|
||||
|
||||
export const useMenuStore = defineStore('menu', () => {
|
||||
// 菜单数据
|
||||
const menus = ref([]);
|
||||
@@ -167,6 +175,18 @@ export const useMenuStore = defineStore('menu', () => {
|
||||
throw new Error(res.message || '获取菜单失败:响应格式错误');
|
||||
} catch (err) {
|
||||
error.value = err.message || '获取菜单失败';
|
||||
|
||||
// 鉴权失败(令牌过期/无效、会话被吊销):清掉缓存并继续抛出,
|
||||
// 由 request.js 静默续期或跳认证中心。
|
||||
// 不能回退到缓存:否则令牌过期时会用旧菜单把登录态问题掩盖掉,
|
||||
// 用户看到的是一份已经失效的权限菜单。
|
||||
if (isAuthError(err)) {
|
||||
clearCache();
|
||||
menus.value = [];
|
||||
console.warn('获取菜单失败(登录状态失效):', err.message);
|
||||
throw err;
|
||||
}
|
||||
|
||||
console.error('获取菜单失败:', err);
|
||||
console.error('错误详情:', {
|
||||
message: err.message,
|
||||
@@ -174,13 +194,6 @@ export const useMenuStore = defineStore('menu', () => {
|
||||
stack: err.stack
|
||||
});
|
||||
|
||||
// 如果是 token 无效错误,不使用缓存,直接抛出
|
||||
if (err.message === 'token无效' || err.response?.status === 401) {
|
||||
clearCache();
|
||||
menus.value = [];
|
||||
throw err;
|
||||
}
|
||||
|
||||
// 如果出错,尝试使用缓存数据
|
||||
const cachedMenus = loadFromCache();
|
||||
if (cachedMenus && cachedMenus.length > 0) {
|
||||
|
||||
Reference in new issue
Block a user