rtc_web/src/routes/index.tsx
2026-01-29 10:41:39 +08:00

80 lines
2.0 KiB
TypeScript

import React from 'react';
import { createBrowserRouter, Navigate } from 'react-router-dom';
import MainLayout from '../components/Layout';
import LoginPage from '../pages/Login';
import Dashboard from '../pages/Dashboard';
import DeviceTypePage from '../pages/DeviceType';
import BatchPage from '../pages/Batch';
import BatchDetail from '../pages/Batch/Detail';
import DevicePage from '../pages/Device';
import UserPage from '../pages/User';
import AdminPage from '../pages/Admin';
import { useAuthStore } from '../store/useAuthStore';
// 路由守卫组件
const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const { isAuthenticated } = useAuthStore();
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
};
// 创建路由
const router = createBrowserRouter([
{
path: '/login',
element: <LoginPage />,
},
{
path: '/',
element: (
<ProtectedRoute>
<MainLayout />
</ProtectedRoute>
),
children: [
{
index: true,
element: <Navigate to="/dashboard" replace />,
},
{
path: 'dashboard',
element: <Dashboard />,
},
{
path: 'device-types',
element: <DeviceTypePage />,
},
{
path: 'batches',
element: <BatchPage />,
},
{
path: 'batches/:id',
element: <BatchDetail />,
},
{
path: 'devices',
element: <DevicePage />,
},
{
path: 'users',
element: <UserPage />,
},
{
path: 'admins',
element: <AdminPage />,
},
],
},
{
path: '*',
element: <Navigate to="/dashboard" replace />,
},
]);
export default router;