- 后端: NestJS 11 + TypeORM + JWT认证 + SQLite/MySQL - 前端: React 19 + Ant Design 6 + Vite 8 + ECharts - 功能模块: 数据面板、学生管理、宿舍管理、入住管理、费用录入、账单管理、教室管理、押金管理、操作日志、账号管理 - 支持Docker一键部署
59 lines
2.7 KiB
TypeScript
59 lines
2.7 KiB
TypeScript
import React from 'react';
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { ConfigProvider, App as AntdApp } from 'antd';
|
|
import zhCN from 'antd/es/locale/zh_CN';
|
|
import MainLayout from './layouts/MainLayout';
|
|
import LoginPage from './pages/Login';
|
|
import DashboardPage from './pages/Dashboard';
|
|
import StudentsPage from './pages/Students';
|
|
import RoomsPage from './pages/Rooms';
|
|
import OccupanciesPage from './pages/Occupancies';
|
|
import ExpensesPage from './pages/Expenses';
|
|
import BillsPage from './pages/Bills';
|
|
import RoomVisualPage from './pages/RoomVisual';
|
|
import OperationLogsPage from './pages/OperationLogs';
|
|
import UsersPage from './pages/Users';
|
|
import DepositsPage from './pages/Deposits';
|
|
import ClassroomsPage from './pages/Classrooms';
|
|
import TenantsPage from './pages/Tenants';
|
|
import ClassroomRentalsPage from './pages/ClassroomRentals';
|
|
import ClassroomSchedulePage from './pages/ClassroomSchedule';
|
|
|
|
const PrivateRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
|
const token = localStorage.getItem('token');
|
|
return token ? <>{children}</> : <Navigate to="/login" />;
|
|
};
|
|
|
|
const App: React.FC = () => {
|
|
return (
|
|
<ConfigProvider locale={zhCN} theme={{ token: { colorPrimary: '#007AFF', borderRadius: 10, colorBgContainer: '#fff', fontFamily: "-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" } }}>
|
|
<AntdApp>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/" element={<PrivateRoute><MainLayout /></PrivateRoute>}>
|
|
<Route index element={<Navigate to="/dashboard" />} />
|
|
<Route path="dashboard" element={<DashboardPage />} />
|
|
<Route path="students" element={<StudentsPage />} />
|
|
<Route path="rooms" element={<RoomsPage />} />
|
|
<Route path="occupancies" element={<OccupanciesPage />} />
|
|
<Route path="expenses" element={<ExpensesPage />} />
|
|
<Route path="deposits" element={<DepositsPage />} />
|
|
<Route path="bills" element={<BillsPage />} />
|
|
<Route path="room-visual" element={<RoomVisualPage />} />
|
|
<Route path="operation-logs" element={<OperationLogsPage />} />
|
|
<Route path="users" element={<UsersPage />} />
|
|
<Route path="classrooms" element={<ClassroomsPage />} />
|
|
<Route path="tenants" element={<TenantsPage />} />
|
|
<Route path="classroom-rentals" element={<ClassroomRentalsPage />} />
|
|
<Route path="classroom-schedule" element={<ClassroomSchedulePage />} />
|
|
</Route>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</AntdApp>
|
|
</ConfigProvider>
|
|
);
|
|
};
|
|
|
|
export default App;
|