修复bug

This commit is contained in:
hero920103 committed 2026-10-19 17:34:11 +08:00
1 parent 1850ac640e
commit 892ba5886d
20 files changed
+1078 -178

No files matched your search

+20 -7
View File
@@ -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) {