fix: align login and home routing with leaudit backend

This commit is contained in:
wren
2026-04-29 18:02:31 +08:00
parent 7dbeaac5f8
commit 3d3d8d6e6b
7 changed files with 636 additions and 724 deletions
+32 -2
View File
@@ -664,7 +664,7 @@ export async function getUserRoutesByRole(
// 注意:Authorization 头会由 axios 拦截器自动添加(从 localStorage 读取)
// 但为了确保使用正确的 token,这里仍然显式传递
const response = await apiRequest<BackendRoutesResponse>(
'/rbac/user/routes', // endpoint (第一个参数)
'/api/rbac/user/routes', // endpoint (第一个参数)
{
method: 'GET',
headers: {
@@ -678,6 +678,12 @@ export async function getUserRoutesByRole(
// 检查响应是否成功
if (response.error) {
console.error('❌ [User Routes] API 请求失败:', response.error);
if (response.status === 404) {
console.warn('⚠️ [User Routes] 后端路由权限接口未落地,回退到静态菜单');
return buildFallbackRoutes(roleKey);
}
// 🔑 如果是令牌过期错误,标记需要重定向到登录页
const isTokenExpired = response.error.includes('令牌已过期') ||
response.error.includes('令牌') ||
@@ -702,6 +708,10 @@ export async function getUserRoutesByRole(
// 检查响应数据
if (!response.data) {
console.error('❌ [User Routes] 后端未返回数据');
if (response.status === 404) {
console.warn('⚠️ [User Routes] 后端路由权限接口未落地,回退到静态菜单');
return buildFallbackRoutes(roleKey);
}
if (typeof window !== 'undefined') {
toastService.error("获取路由数据失败");
}
@@ -998,6 +1008,7 @@ export function mapUserRoleToRoleKey(userRole: string): string {
const roleMapping: Record<string, string> = {
'common': 'common',
'admin': 'admin',
'provincial_admin': 'admin',
'deptLeader': 'deptLeader',
'groupLeader': 'groupLeader',
// 添加常见的后端角色映射
@@ -1009,4 +1020,23 @@ export function mapUserRoleToRoleKey(userRole: string): string {
// 如果找不到映射,返回 userRole 本身(假设后端已经返回了正确的 role_key)
return roleMapping[userRole] || userRole || 'common';
}
}
/**
* 基于静态菜单数据构造后备结果。
*/
function buildFallbackRoutes(roleKey: string): {
success: boolean;
data: MenuItem[];
permissionMap: Record<string, string[]>;
} {
const mappedRoleKey = mapUserRoleToRoleKey(roleKey);
const fallbackMenus = FALLBACK_MENU_DATA[mappedRoleKey] || FALLBACK_MENU_DATA.common;
const permissionMap: Record<string, string[]> = {};
return {
success: true,
data: fallbackMenus,
permissionMap,
};
}