import { Routes, Route, Navigate } from 'react-router-dom' import { AppLayout } from '@/components/layout/AppLayout' import { Dashboard } from '@/pages/Dashboard' import { LegalAdvisor } from '@/pages/LegalAdvisor' import { Decisions } from '@/pages/Decisions' import { LifeAssistant } from '@/pages/LifeAssistant' import { EmotionCenter } from '@/pages/EmotionCenter' import { Settings } from '@/pages/Settings' import { KnowledgeBase } from '@/pages/KnowledgeBase' import { Experts } from '@/pages/Experts' import { WorkbenchPendingServices, WorkbenchPending, WorkbenchReplied, WorkbenchUsers } from '@/pages/workbench' import { ChatHistory } from '@/pages/ChatHistory' import { MyProfile } from '@/pages/MyProfile' import { AdminStats, AdminAiUsage, AdminExpertActivity, AdminUsers, AdminExperts } from '@/pages/admin' import { Placeholder } from '@/pages/Placeholder' import { Login } from '@/pages/Login' import { isLoggedIn, getRole, type Role } from '@/lib/auth' /** 路由守卫:未登录跳转登录页,角色不匹配跳转各自首页 */ function ProtectedRoute({ children, allowedRoles }: { children: React.ReactNode; allowedRoles?: Role[] }) { if (!isLoggedIn()) { return } const currentRole = getRole() if (allowedRoles && !allowedRoles.includes(currentRole)) { // 角色不匹配,跳转到各自首页 const homeMap: Record = { user: '/', expert: '/workbench', admin: '/admin' } return } return <>{children} } export default function App() { return ( } /> }> {/* 用户页面:仅用户可访问 */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* 专家工作台:仅专家可访问,拆分为独立页面 */} } /> } /> } /> } /> {/* 管理后台:仅管理员可访问,拆分为独立页面 */} } /> } /> } /> } /> } /> } /> ) }