import React, { lazy, Suspense, useContext, useEffect } from 'react'; import { Route, Routes } from 'react-router-dom'; import Loading from './components/Loading'; import User from './pages/User'; import { PrivateRoute } from './components/PrivateRoute'; import RegisterForm from './components/RegisterForm'; import LoginForm from './components/LoginForm'; import NotFound from './pages/NotFound'; import Setting from './pages/Setting'; import EditUser from './pages/User/EditUser'; import AddUser from './pages/User/AddUser'; import { API, getLogo, getSystemName, showError, showNotice } from './helpers'; import PasswordResetForm from './components/PasswordResetForm'; import GitHubOAuth from './components/GitHubOAuth'; import PasswordResetConfirm from './components/PasswordResetConfirm'; import { UserContext } from './context/User'; import { StatusContext } from './context/Status'; import Channel from './pages/Channel'; import Token from './pages/Token'; import EditToken from './pages/Token/EditToken'; import EditChannel from './pages/Channel/EditChannel'; import Redemption from './pages/Redemption'; import EditRedemption from './pages/Redemption/EditRedemption'; import TopUp from './pages/TopUp'; import Log from './pages/Log'; import Chat from './pages/Chat'; const Home = lazy(() => import('./pages/Home')); const About = lazy(() => import('./pages/About')); function App() { const [userState, userDispatch] = useContext(UserContext); const [statusState, statusDispatch] = useContext(StatusContext); const loadUser = () => { let user = localStorage.getItem('user'); if (user) { let data = JSON.parse(user); userDispatch({ type: 'login', payload: data }); } }; const loadStatus = async () => { const res = await API.get('/api/status'); const { success, data } = res.data; if (success) { localStorage.setItem('status', JSON.stringify(data)); statusDispatch({ type: 'set', payload: data }); localStorage.setItem('system_name', data.system_name); localStorage.setItem('logo', data.logo); localStorage.setItem('footer_html', data.footer_html); localStorage.setItem('quota_per_unit', data.quota_per_unit); localStorage.setItem('display_in_currency', data.display_in_currency); if (data.chat_link) { localStorage.setItem('chat_link', data.chat_link); } else { localStorage.removeItem('chat_link'); } if ( data.version !== process.env.REACT_APP_VERSION && data.version !== 'v0.0.0' && process.env.REACT_APP_VERSION !== '' ) { showNotice( `新版本可用:${data.version},请使用快捷键 Shift + F5 刷新页面` ); } } else { showError('无法正常连接至服务器!'); } }; useEffect(() => { loadUser(); loadStatus().then(); let systemName = getSystemName(); if (systemName) { document.title = systemName; } let logo = getLogo(); if (logo) { let linkElement = document.querySelector("link[rel~='icon']"); if (linkElement) { linkElement.href = logo; } } }, []); return ( }> } /> } /> }> } /> }> } /> } /> }> } /> }> } /> } /> }> } /> }> } /> } /> }> } /> }> } /> }> } /> }> } /> }> } /> }> } /> }> } /> }> } /> }> } /> }> } /> } /> }> } /> }> } /> ); } export default App;