import React, { useState, Suspense, lazy } from 'react'; import { Layout, Menu, theme, Button, Dropdown, Avatar, message, Space, Divider } from 'antd'; import { BarChartOutlined, DatabaseOutlined, CloudServerOutlined, MenuUnfoldOutlined, MenuFoldOutlined, EyeOutlined, BuildOutlined, HomeOutlined, ShoppingCartOutlined, InboxOutlined, ImportOutlined, FileTextOutlined, UserOutlined, LogoutOutlined, HistoryOutlined, AuditOutlined, ToolOutlined, ScheduleOutlined } from '@ant-design/icons'; import { BrowserRouter as Router, Routes, Route, Link, Navigate, useLocation, useNavigate } from 'react-router-dom'; import { useAuth } from './context/AuthContext'; import { Spin } from 'antd'; const Dashboard = lazy(() => import('./pages/Dashboard')); const DeviceManagement = lazy(() => import('./pages/DeviceManagement')); const RackManagement = lazy(() => import('./pages/RackManagement')); const RoomManagement = lazy(() => import('./pages/RoomManagement')); const DeviceFieldManagement = lazy(() => import('./pages/DeviceFieldManagement')); const RackVisualization = lazy(() => import('./pages/RackVisualization')); const ConsumableManagement = lazy(() => import('./pages/ConsumableManagement')); const ConsumableStatistics = lazy(() => import('./pages/ConsumableStatistics')); const ConsumableLogs = lazy(() => import('./pages/ConsumableLogs')); const CategoryManagement = lazy(() => import('./pages/CategoryManagement')); const UserManagement = lazy(() => import('./pages/UserManagement')); const LoginHistory = lazy(() => import('./pages/LoginHistory')); const OperationLogs = lazy(() => import('./pages/OperationLogs')); const Login = lazy(() => import('./pages/Login')); const TicketManagement = lazy(() => import('./pages/TicketManagement')); const TicketCategoryManagement = lazy(() => import('./pages/TicketCategoryManagement')); const TicketStatistics = lazy(() => import('./pages/TicketStatistics')); const { Header, Content, Sider } = Layout; const PrivateRoute = ({ children }) => { const { token, initialized, loading } = useAuth(); const location = useLocation(); if (!initialized) { return (
); } if (!token) { return ; } return ( } > {children} ); }; const AppLayout = ({ children }) => { const [collapsed, setCollapsed] = useState(false); const { user, logout } = useAuth(); const navigate = useNavigate(); const { token: { colorBgContainer, borderRadiusLG }, } = theme.useToken(); const handleLogout = () => { logout(); message.success('已退出登录'); navigate('/login'); }; const userMenuItems = [ { key: 'logout', icon: , label: '退出登录', onClick: handleLogout } ]; return (
, label: 仪表盘, }, { key: 'room-management', icon: , label: '机房管理', children: [ { key: 'rooms', icon: , label: 机房管理, }, { key: 'racks', icon: , label: 机柜管理, }, { key: 'visualization', icon: , label: 机柜可视化, }, ], }, { key: 'asset-management', icon: , label: '资产管理', children: [ { key: 'devices', icon: , label: 设备管理, }, { key: 'fields', icon: , label: 字段管理, }, ], }, { key: 'consumables-management', icon: , label: '耗材管理', children: [ { key: 'consumables-stats', icon: , label: 耗材统计, }, { key: 'consumables', icon: , label: 耗材列表, }, { key: 'consumables-categories', icon: , label: 分类管理, }, { key: 'consumables-logs', icon: , label: 操作日志, }, ], }, { key: 'system-management', icon: , label: '系统管理', children: [ { key: 'users', icon: , label: 用户管理, }, { key: 'login-history', icon: , label: 登录历史, }, { key: 'operation-logs', icon: , label: 操作日志, }, ], }, { key: 'ticket-management', icon: , label: '工单管理', children: [ { key: 'tickets', icon: , label: 工单列表, }, { key: 'ticket-categories', icon: , label: 故障分类, }, { key: 'ticket-statistics', icon: , label: 统计报表, }, ], }, ]} />
{user && ( } /> {user.username} )}
{children}
); }; function App() { return ( } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default App;