WangDL 3b936d6cb0
All checks were successful
Deploy Admin Frontend / build-and-deploy (push) Successful in 9s
fix: set global Empty description to 暂无数据 in ConfigProvider
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 20:56:34 +08:00

203 lines
10 KiB
TypeScript

import { Suspense, lazy } from 'react'
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ConfigProvider } from 'antd'
import zhCN from 'antd/locale/zh_CN'
import { Empty } from 'antd'
import { AuthProvider } from './contexts/AuthContext'
import AuthGuard from './components/AuthGuard'
import PermissionGuard from './components/PermissionGuard'
import PageLoading from './components/PageLoading'
import AdminLayout from './layouts/AdminLayout'
const Login = lazy(() => import('./pages/Login'))
const KnowledgeBasesPage = lazy(() => import('./pages/KnowledgeBases'))
const BillingPage = lazy(() => import('./pages/Billing'))
const ProjectCenter = lazy(() => import('./pages/GiteaEmbed'))
const ConfigPage = lazy(() => import("./pages/Config"))
const SecurityEventsPage = lazy(() => import('./pages/SecurityEvents'))
const ThrottlePage = lazy(() => import('./pages/Throttle'))
const SecretsPage = lazy(() => import('./pages/Secrets'))
const MembershipPage = lazy(() => import("./pages/Membership"))
const FilesAdminPage = lazy(() => import("./pages/FilesAdmin"))
const AiGatewayPage = lazy(() => import("./pages/AiGateway"))
const CSPage = lazy(() => import("./pages/ContentSafety"))
const MetricsPage = lazy(() => import("./pages/Metrics"))
const EventsPage = lazy(() => import("./pages/Events"))
const VectorAdminPage = lazy(() => import("./pages/VectorAdmin"))
const ServersPage = lazy(() => import("./pages/Servers"))
const AuditLogPage = lazy(() => import("./pages/AuditLog"))
const Dashboard = lazy(() => import('./pages/Dashboard'))
const UserManagement = lazy(() => import('./pages/UserManagement'))
const MemberManagement = lazy(() => import('./pages/MemberManagement'))
const ImportMonitorPage = lazy(() => import('./pages/ImportMonitor'))
const KnowledgeOpsPage = lazy(() => import('./pages/KnowledgeOps'))
const ChatLogsPage = lazy(() => import('./pages/ChatLogs'))
const HermesSettings = lazy(() => import('./pages/HermesSettings'))
const ReleaseAdmin = lazy(() => import('./pages/ReleaseAdmin'))
const ComplianceAdmin = lazy(() => import('./pages/ComplianceAdmin'))
const TaskAssistant = lazy(() => import('./pages/TaskAssistant'))
const Placeholder = lazy(() => import('./pages/Placeholder'))
const ForbiddenPage = lazy(() => import('./pages/403'))
const NotFoundPage = lazy(() => import('./pages/404'))
const ServerErrorPage = lazy(() => import('./pages/500'))
const ReviewAdmin = lazy(() => import('./pages/ReviewAdmin'))
const NotificationAdmin = lazy(() => import('./pages/NotificationAdmin'))
const CacheAdmin = lazy(() => import('./pages/CacheAdmin'))
const LearningData = lazy(() => import('./pages/LearningData'))
const BackupAdmin = lazy(() => import('./pages/BackupAdmin'))
const ReportingAdmin = lazy(() => import('./pages/ReportingAdmin'))
const queryClient = new QueryClient()
function App() {
return (
<QueryClientProvider client={queryClient}>
<ConfigProvider locale={zhCN} renderEmpty={() => <Empty description="暂无数据" />}>
<AuthProvider>
<BrowserRouter>
<Suspense fallback={<PageLoading />}>
<Routes>
<Route path="/login" element={<Login />} />
<Route path="/403" element={<ForbiddenPage />} />
<Route path="/500" element={<ServerErrorPage />} />
<Route path="/404" element={<NotFoundPage />} />
<Route
element={
<AuthGuard>
<AdminLayout />
</AuthGuard>
}
>
<Route index element={<Dashboard />} />
<Route path="assistant" element={<TaskAssistant />} />
<Route path="hermes" element={<Suspense fallback={<PageLoading />}><HermesSettings /></Suspense>} />
<Route
path="users"
element={
<PermissionGuard requiredRole="ADMIN">
<UserManagement />
</PermissionGuard>
}
/>
<Route
path="users/admins"
element={
<PermissionGuard requiredRole="SUPER_ADMIN">
<UserManagement />
</PermissionGuard>
}
/>
<Route path="users/members" element={<Suspense fallback={<PageLoading />}><MemberManagement /></Suspense>} />
<Route
path="throttle"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><ThrottlePage /></Suspense></PermissionGuard>}
/>
<Route
path="security-events"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><SecurityEventsPage /></Suspense></PermissionGuard>}
/>
<Route
path="secrets"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><SecretsPage /></Suspense></PermissionGuard>}
/>
<Route
path="membership"
element={
<PermissionGuard requiredRole="ADMIN">
<Suspense fallback={<PageLoading />}><MembershipPage /></Suspense>
</PermissionGuard>
}
/>
<Route path="knowledge/bases" element={<Suspense fallback={<PageLoading />}><KnowledgeBasesPage /></Suspense>} />
<Route path="knowledge/sources" element={<Placeholder title="知识源列表" />} />
<Route path="knowledge/ops" element={<Suspense fallback={<PageLoading />}><KnowledgeOpsPage /></Suspense>} />
<Route path="chat-logs" element={<Suspense fallback={<PageLoading />}><ChatLogsPage /></Suspense>} />
<Route path="imports" element={<Suspense fallback={<PageLoading />}><ImportMonitorPage /></Suspense>} />
<Route path="files" element={<Suspense fallback={<PageLoading />}><FilesAdminPage /></Suspense>} />
<Route
path="settings"
element={
<PermissionGuard requiredRole="ADMIN">
<Placeholder title="系统配置" />
</PermissionGuard>
}
/>
<Route
path="knowledge/bases"
element={<Suspense fallback={<PageLoading />}><KnowledgeBasesPage /></Suspense>}
/>
<Route
path="billing"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><BillingPage /></Suspense></PermissionGuard>}
/>
<Route
path="git"
element={
<Suspense fallback={<PageLoading />}><ProjectCenter /></Suspense>
}
/>
<Route
path="config"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><ConfigPage /></Suspense></PermissionGuard>}
/>
<Route
path="ai-gateway"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><AiGatewayPage /></Suspense></PermissionGuard>}
/>
<Route
path="metrics"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><MetricsPage /></Suspense></PermissionGuard>}
/>
<Route
path="safety"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><CSPage /></Suspense></PermissionGuard>}
/>
<Route
path="events"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><EventsPage /></Suspense></PermissionGuard>}
/>
<Route
path="vector"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><VectorAdminPage /></Suspense></PermissionGuard>}
/>
<Route
path="cache"
element={<PermissionGuard requiredRole="SUPER_ADMIN"><Suspense fallback={<PageLoading />}><CacheAdmin /></Suspense></PermissionGuard>}
/>
<Route
path="servers"
element={
<PermissionGuard requiredRole="SUPER_ADMIN">
<Suspense fallback={<PageLoading />}><ServersPage /></Suspense>
</PermissionGuard>
}
/>
<Route
path="audit"
element={
<PermissionGuard requiredRole="ADMIN">
<Suspense fallback={<PageLoading />}><AuditLogPage /></Suspense>
</PermissionGuard>
}
/>
<Route path="reviews" element={<Suspense fallback={<PageLoading />}><ReviewAdmin /></Suspense>} />
<Route path="learning-data" element={<Suspense fallback={<PageLoading />}><LearningData /></Suspense>} />
<Route path="backup" element={<Suspense fallback={<PageLoading />}><BackupAdmin /></Suspense>} />
<Route path="reporting" element={<Suspense fallback={<PageLoading />}><ReportingAdmin /></Suspense>} />
<Route path="release" element={<Suspense fallback={<PageLoading />}><ReleaseAdmin /></Suspense>} />
<Route path="compliance" element={<Suspense fallback={<PageLoading />}><ComplianceAdmin /></Suspense>} />
<Route path="notification-admin" element={<Suspense fallback={<PageLoading />}><NotificationAdmin /></Suspense>} />
<Route path="*" element={<NotFoundPage />} />
</Route>
</Routes>
</Suspense>
</BrowserRouter>
</AuthProvider>
</ConfigProvider>
</QueryClientProvider>
)
}
export default App