App.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Navigate, Route, Routes } from 'react-router-dom'
  2. import { Layout } from './components/Layout'
  3. import { Dashboard } from './pages/Dashboard'
  4. import { NewCourse } from './pages/NewCourse'
  5. import { CourseWorkspace } from './pages/CourseWorkspace'
  6. import { AuthPage } from './pages/AuthPage'
  7. import { Profile } from './pages/Profile'
  8. import { AdminLayout } from './pages/admin/AdminLayout'
  9. import { AdminDashboard } from './pages/admin/AdminDashboard'
  10. import { AdminCourses } from './pages/admin/AdminCourses'
  11. import { AdminCourseDetail } from './pages/admin/AdminCourseDetail'
  12. import { AdminUsers } from './pages/admin/AdminUsers'
  13. import { AdminLoginPage } from './pages/admin/AdminLoginPage'
  14. import { useAuth } from './AuthContext'
  15. export default function App() {
  16. const { user, loading } = useAuth()
  17. if (loading) return <div className="center-loading">正在加载星痕工坊…</div>
  18. return (
  19. <Routes>
  20. {/* ================= 管理员专属体系 (/admin/*) ================= */}
  21. <Route path="admin/login" element={<AdminLoginPage />} />
  22. <Route path="admin" element={<AdminLayout />}>
  23. <Route index element={<AdminDashboard />} />
  24. <Route path="courses" element={<AdminCourses />} />
  25. <Route path="courses/:id" element={<AdminCourseDetail />} />
  26. <Route path="users" element={<AdminUsers />} />
  27. <Route path="*" element={<Navigate to="/admin" replace />} />
  28. </Route>
  29. {/* ================= 普通用户体系 ================= */}
  30. <Route path="login" element={<AuthPage />} />
  31. {user ? (
  32. <Route element={<Layout />}>
  33. <Route index element={<Dashboard />} />
  34. <Route path="courses/new" element={<NewCourse />} />
  35. <Route path="courses/:id" element={<CourseWorkspace />} />
  36. <Route path="profile" element={<Profile />} />
  37. </Route>
  38. ) : null}
  39. {/* 默认兜底重定向 */}
  40. <Route path="*" element={<Navigate to={user ? '/' : '/login'} replace />} />
  41. </Routes>
  42. )
  43. }