mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-12 07:50:25 +00:00
Implemented backend API and router for plugin management (list, reload, enable/disable, uninstall) and exposed corresponding frontend controller and dashboard page. Updated navigation and site config to include plugin management. Refactored plugin manager adapter for public methods and improved plugin metadata handling.
90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
import { Suspense, lazy, useEffect } from 'react';
|
|
import { Provider } from 'react-redux';
|
|
import { Route, Routes, useNavigate } from 'react-router-dom';
|
|
|
|
import PageBackground from '@/components/page_background';
|
|
import PageLoading from '@/components/page_loading';
|
|
import Toaster from '@/components/toaster';
|
|
|
|
import DialogProvider from '@/contexts/dialog';
|
|
|
|
import useAuth from '@/hooks/auth';
|
|
|
|
import store from '@/store';
|
|
|
|
const WebLoginPage = lazy(() => import('@/pages/web_login'));
|
|
const IndexPage = lazy(() => import('@/pages/index'));
|
|
const QQLoginPage = lazy(() => import('@/pages/qq_login'));
|
|
const DashboardIndexPage = lazy(() => import('@/pages/dashboard'));
|
|
const AboutPage = lazy(() => import('@/pages/dashboard/about'));
|
|
const ConfigPage = lazy(() => import('@/pages/dashboard/config'));
|
|
const DebugPage = lazy(() => import('@/pages/dashboard/debug'));
|
|
const HttpDebug = lazy(() => import('@/pages/dashboard/debug/http'));
|
|
const WSDebug = lazy(() => import('@/pages/dashboard/debug/websocket'));
|
|
const FileManagerPage = lazy(() => import('@/pages/dashboard/file_manager'));
|
|
const LogsPage = lazy(() => import('@/pages/dashboard/logs'));
|
|
const NetworkPage = lazy(() => import('@/pages/dashboard/network'));
|
|
const TerminalPage = lazy(() => import('@/pages/dashboard/terminal'));
|
|
const PluginPage = lazy(() => import('@/pages/dashboard/plugin'));
|
|
|
|
function App () {
|
|
return (
|
|
<DialogProvider>
|
|
<Provider store={store}>
|
|
<PageBackground />
|
|
<Toaster />
|
|
<Suspense fallback={<PageLoading />}>
|
|
<AuthChecker>
|
|
<AppRoutes />
|
|
</AuthChecker>
|
|
</Suspense>
|
|
</Provider>
|
|
</DialogProvider>
|
|
);
|
|
}
|
|
|
|
function AuthChecker ({ children }: { children: React.ReactNode; }) {
|
|
const { isAuth } = useAuth();
|
|
const navigate = useNavigate();
|
|
|
|
useEffect(() => {
|
|
if (!isAuth) {
|
|
const search = new URLSearchParams(window.location.search);
|
|
const token = search.get('token');
|
|
let url = '/web_login';
|
|
|
|
if (token) {
|
|
url += `?token=${token}`;
|
|
}
|
|
navigate(url, { replace: true });
|
|
}
|
|
}, [isAuth, navigate]);
|
|
|
|
return <>{children}</>;
|
|
}
|
|
|
|
function AppRoutes () {
|
|
return (
|
|
<Routes>
|
|
<Route path='/' element={<IndexPage />}>
|
|
<Route index element={<DashboardIndexPage />} />
|
|
<Route path='network' element={<NetworkPage />} />
|
|
<Route path='config' element={<ConfigPage />} />
|
|
<Route path='logs' element={<LogsPage />} />
|
|
<Route path='debug' element={<DebugPage />}>
|
|
<Route path='ws' element={<WSDebug />} />
|
|
<Route path='http' element={<HttpDebug />} />
|
|
</Route>
|
|
<Route path='file_manager' element={<FileManagerPage />} />
|
|
<Route path='terminal' element={<TerminalPage />} />
|
|
<Route path='plugins' element={<PluginPage />} />
|
|
<Route path='about' element={<AboutPage />} />
|
|
</Route>
|
|
<Route path='/qq_login' element={<QQLoginPage />} />
|
|
<Route path='/web_login' element={<WebLoginPage />} />
|
|
</Routes>
|
|
);
|
|
}
|
|
|
|
export default App;
|