index.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { ErrorBoundary } from 'react-error-boundary'
  2. import { createHashRouter, Navigate, type RouteObject } from 'react-router'
  3. import { RouterProvider } from 'react-router/dom'
  4. import type { AppRouteObject } from '#/router'
  5. import ProtectedRoute from '@/router/components/protected-route'
  6. import { usePermissionRoutes } from '@/router/hooks'
  7. import { ERROR_ROUTE } from '@/router/routes/error-routes'
  8. import DashboardLayout from '@/layouts/dashboard'
  9. import PageError from '@/pages/sys/error/PageError'
  10. import Login from '@/pages/sys/login/Login'
  11. import { NavigationProvider } from './context/NavigationContext'
  12. const { VITE_APP_HOMEPAGE: HOMEPAGE } = import.meta.env
  13. const PUBLIC_ROUTE: AppRouteObject = {
  14. path: '/login',
  15. element: (
  16. <ErrorBoundary FallbackComponent={PageError}>
  17. <Login />
  18. </ErrorBoundary>
  19. )
  20. }
  21. const NO_MATCHED_ROUTE: AppRouteObject = {
  22. path: '*',
  23. element: <Navigate to='/404' replace />
  24. }
  25. export default function Router() {
  26. const permissionRoutes = usePermissionRoutes()
  27. // 动态路由
  28. const PROTECTED_ROUTE: AppRouteObject = {
  29. path: '/',
  30. element: (
  31. <ProtectedRoute>
  32. <DashboardLayout />
  33. </ProtectedRoute>
  34. ),
  35. children: [{ index: true, element: <Navigate to={HOMEPAGE} replace /> }, ...permissionRoutes]
  36. }
  37. const routes = [PUBLIC_ROUTE, PROTECTED_ROUTE, ERROR_ROUTE, NO_MATCHED_ROUTE] as RouteObject[]
  38. // console.log(routes)
  39. const router = createHashRouter(routes)
  40. return (
  41. <NavigationProvider>
  42. <RouterProvider router={router} />
  43. </NavigationProvider>
  44. )
  45. }