Merge branch 'PingChuan' into shiy-login

# Conflicts:
#	app/config/api-config.ts
fix: 1. 修复无法加载数据的问题:没有从入口页中进来会缺少数据。
2. 加强后端接口关于token的校验错误和权限校验错误的管理。

feat: 1. 对接后端的数据看板的接口。
2. 将系统设置单独抽出来作为管理员的固定一个入口。
This commit is contained in:
2025-11-22 15:57:22 +08:00
27 changed files with 1972 additions and 643 deletions
+25 -1
View File
@@ -149,7 +149,14 @@ export async function loader({ request }: LoaderFunctionArgs) {
// 🔒 RBAC 路由权限检查
const { getUserRoutesByRole } = await import("~/api/auth/user-routes");
// 权限校验需要包含隐藏路由,确保用户可以访问隐藏的功能页面
// console.log("🔒 [Root Loader] 开始调用 getUserRoutesByRole...");
const routesResult = await getUserRoutesByRole(userRole, frontendJWT, true);
// console.log("🔒 [Root Loader] getUserRoutesByRole 返回结果:", {
// success: routesResult.success,
// hasData: !!routesResult.data,
// error: routesResult.error,
// shouldRedirectToHome: routesResult.shouldRedirectToHome
// });
if (routesResult.success && routesResult.data) {
// 从菜单数据中提取所有允许的路径
@@ -165,7 +172,24 @@ export async function loader({ request }: LoaderFunctionArgs) {
throw new Response("无权访问此页面", { status: 403 });
}
} else {
// 获取路由权限失败,只记录警告,不阻止访问(避免影响正常使用)
// 🔑 检查是否因为认证失败需要重定向到登录页
if (routesResult.shouldRedirectToHome) {
console.error("❌ [Root Loader] 获取用户路由权限失败,可能是令牌已过期,重定向到登录页");
console.error("❌ [Root Loader] 错误详情:", routesResult.error);
// 清除会话并重定向到登录页
const { sessionStorage } = await import("~/api/login/auth.server");
const session = await sessionStorage.getSession(request.headers.get("Cookie"));
const destroyedSession = await sessionStorage.destroySession(session);
return redirect("/login?expired=true", {
headers: {
"Set-Cookie": destroyedSession
}
});
}
// 其他错误,只记录警告,不阻止访问(避免影响正常使用)
console.warn("⚠️ [Root Loader] 获取用户路由权限失败,跳过权限检查");
}
} catch (error) {