chore: 初始化仓库基线(AGENTS.md、git 规范、敏感文件排除)
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { Navigate, createBrowserRouter } from 'react-router-dom';
|
||||
import Login from './pages/Login';
|
||||
import Dashboard from './pages/Dashboard';
|
||||
import Silkworm from './pages/Silkworm';
|
||||
import Device from './pages/Device';
|
||||
import Energy from './pages/Energy';
|
||||
import Control from './pages/Control';
|
||||
import IRControl from './pages/IRControl';
|
||||
import Threshold from './pages/Threshold';
|
||||
import Alert from './pages/Alert';
|
||||
import Video from './pages/Video';
|
||||
import Log from './pages/Log';
|
||||
import NotFound from './pages/NotFound';
|
||||
import { BasicLayout } from './layout/BasicLayout';
|
||||
import { authService } from './services/auth';
|
||||
|
||||
const RequireAuth = ({ children }: { children: React.ReactNode }) => {
|
||||
if (!authService.isLoggedIn()) return <Navigate to="/login" replace />;
|
||||
return <>{children}</>;
|
||||
};
|
||||
|
||||
// 路由权限守卫:未登录跳登录页,无权限跳仪表盘
|
||||
const RequirePermission = ({ permission, children }: { permission: string; children: React.ReactNode }) => {
|
||||
if (!authService.isLoggedIn()) return <Navigate to="/login" replace />;
|
||||
if (!authService.hasPermission(permission)) return <Navigate to="/dashboard" replace />;
|
||||
return <>{children}</>;
|
||||
};
|
||||
|
||||
export const router = createBrowserRouter([
|
||||
{ path: '/login', element: <Login /> },
|
||||
{
|
||||
element: (
|
||||
<RequireAuth>
|
||||
<BasicLayout />
|
||||
</RequireAuth>
|
||||
),
|
||||
children: [
|
||||
{ index: true, element: <Navigate to="/dashboard" replace /> },
|
||||
{ path: 'dashboard', element: <RequirePermission permission="dashboard:view"><Dashboard /></RequirePermission> },
|
||||
{ path: 'houses', element: <RequirePermission permission="room:read"><Silkworm /></RequirePermission> },
|
||||
{ path: 'devices', element: <RequirePermission permission="device:read"><Device /></RequirePermission> },
|
||||
{ path: 'energy', element: <RequirePermission permission="energy:view"><Energy /></RequirePermission> },
|
||||
{ path: 'control', element: <RequirePermission permission="device:control"><Control /></RequirePermission> },
|
||||
{ path: 'ir', element: <RequirePermission permission="device:control"><IRControl /></RequirePermission> },
|
||||
{ path: 'thresholds', element: <RequirePermission permission="threshold:read"><Threshold /></RequirePermission> },
|
||||
{ path: 'alerts', element: <RequirePermission permission="alarm:read"><Alert /></RequirePermission> },
|
||||
{ path: 'videos', element: <RequirePermission permission="video:read"><Video /></RequirePermission> },
|
||||
{ path: 'logs', element: <RequirePermission permission="log:read"><Log /></RequirePermission> },
|
||||
{ path: '404', element: <NotFound /> },
|
||||
],
|
||||
},
|
||||
{ path: '*', element: <NotFound /> },
|
||||
]);
|
||||
Reference in New Issue
Block a user