/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import React, { lazy, Suspense, useContext, useMemo } from 'react'; import { Route, Routes, useLocation } from 'react-router-dom'; import Loading from './components/common/ui/Loading'; import User from './pages/User'; import { AuthRedirect, PrivateRoute, AdminRoute } from './helpers'; import RegisterForm from './components/auth/RegisterForm'; import LoginForm from './components/auth/LoginForm'; import NotFound from './pages/NotFound'; import Forbidden from './pages/Forbidden'; import Setting from './pages/Setting'; import { StatusContext } from './context/Status'; import PasswordResetForm from './components/auth/PasswordResetForm'; import PasswordResetConfirm from './components/auth/PasswordResetConfirm'; import Channel from './pages/Channel'; import Token from './pages/Token'; import Redemption from './pages/Redemption'; import TopUp from './pages/TopUp'; import Log from './pages/Log'; import Chat from './pages/Chat'; import Chat2Link from './pages/Chat2Link'; import Midjourney from './pages/Midjourney'; import Pricing from './pages/Pricing'; import Task from './pages/Task'; import ModelPage from './pages/Model'; import Playground from './pages/Playground'; import OAuth2Callback from './components/auth/OAuth2Callback'; import PersonalSetting from './components/settings/PersonalSetting'; import Setup from './pages/Setup'; import SetupCheck from './components/layout/SetupCheck'; const Home = lazy(() => import('./pages/Home')); const Dashboard = lazy(() => import('./pages/Dashboard')); const About = lazy(() => import('./pages/About')); const UserAgreement = lazy(() => import('./pages/UserAgreement')); const PrivacyPolicy = lazy(() => import('./pages/PrivacyPolicy')); function App() { const location = useLocation(); const [statusState] = useContext(StatusContext); // 获取模型广场权限配置 const pricingRequireAuth = useMemo(() => { const headerNavModulesConfig = statusState?.status?.HeaderNavModules; if (headerNavModulesConfig) { try { const modules = JSON.parse(headerNavModulesConfig); // 处理向后兼容性:如果pricing是boolean,默认不需要登录 if (typeof modules.pricing === 'boolean') { return false; // 默认不需要登录鉴权 } // 如果是对象格式,使用requireAuth配置 return modules.pricing?.requireAuth === true; } catch (error) { console.error('解析顶栏模块配置失败:', error); return false; // 默认不需要登录 } } return false; // 默认不需要登录 }, [statusState?.status?.HeaderNavModules]); return ( } key={location.pathname}> } /> } key={location.pathname}> } /> } /> } /> } /> } /> } /> } /> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> }> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname} > ) : ( } key={location.pathname}> ) } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> } key={location.pathname}> } /> {/* 方便使用chat2link直接跳转聊天... */} } key={location.pathname}> } /> } /> ); } export default App;