56 lines
2.5 KiB
TypeScript
56 lines
2.5 KiB
TypeScript
import React from 'react';
|
|
import { Suspense } from 'react';
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { ConfigProvider } from 'antd';
|
|
import zhCN from 'antd/locale/zh_CN';
|
|
import MainLayout from '@/layouts/MainLayout';
|
|
import Login from '@/pages/Login';
|
|
import Dashboard from '@/pages/Dashboard';
|
|
import MerchantList from '@/pages/MerchantList';
|
|
import RoomAudit from '@/pages/RoomAudit';
|
|
import UserList from '@/pages/UserList';
|
|
import OrderList from '@/pages/OrderList';
|
|
import Promotion from '@/pages/Promotion';
|
|
import SystemSettings from '@/pages/SystemSettings';
|
|
import FinanceSettlements from '@/pages/finance/Settlements';
|
|
import FinanceWithdrawals from '@/pages/finance/Withdrawals';
|
|
import FinanceEarnings from '@/pages/finance/Earnings';
|
|
import InviteManage from '@/pages/InviteManage';
|
|
|
|
const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
|
const token = localStorage.getItem('admin_token');
|
|
if (!token) return <Navigate to="/login" replace />;
|
|
return <>{children}</>;
|
|
};
|
|
|
|
const App: React.FC = () => (
|
|
<ConfigProvider locale={zhCN} theme={{ token: { colorPrimary: '#1890ff' } }}>
|
|
<BrowserRouter>
|
|
<Suspense fallback={<div style={{ textAlign: 'center', padding: 100 }}>加载中...</div>}>
|
|
<Routes>
|
|
<Route path="/login" element={<Login />} />
|
|
<Route path="/" element={<ProtectedRoute><MainLayout /></ProtectedRoute>}>
|
|
<Route index element={<Navigate to="/dashboard" replace />} />
|
|
<Route path="dashboard" element={<Dashboard />} />
|
|
<Route path="merchants" element={<MerchantList />} />
|
|
<Route path="room-audit" element={<RoomAudit />} />
|
|
<Route path="users" element={<UserList />} />
|
|
<Route path="orders" element={<OrderList />} />
|
|
<Route path="finance">
|
|
<Route index element={<Navigate to="/finance/settlements" replace />} />
|
|
<Route path="settlements" element={<FinanceSettlements />} />
|
|
<Route path="withdrawals" element={<FinanceWithdrawals />} />
|
|
<Route path="earnings" element={<FinanceEarnings />} />
|
|
</Route>
|
|
<Route path="invite" element={<InviteManage />} />
|
|
<Route path="promotions" element={<Promotion />} />
|
|
<Route path="settings" element={<SystemSettings />} />
|
|
</Route>
|
|
</Routes>
|
|
</Suspense>
|
|
</BrowserRouter>
|
|
</ConfigProvider>
|
|
);
|
|
|
|
export default App;
|