App.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import React, { lazy, Suspense, useEffect } from 'react';
  2. import { Route, Routes } from 'react-router-dom';
  3. import Loading from './components/Loading';
  4. import User from './pages/User';
  5. import { PrivateRoute } from './components/PrivateRoute';
  6. import RegisterForm from './components/RegisterForm';
  7. import LoginForm from './components/LoginForm';
  8. import NotFound from './pages/NotFound';
  9. import Setting from './pages/Setting';
  10. import EditUser from './pages/User/EditUser';
  11. import AddUser from './pages/User/AddUser';
  12. import { API, showError } from './helpers';
  13. import PasswordResetForm from './components/PasswordResetForm';
  14. import GitHubOAuth from './components/GitHubOAuth';
  15. import PasswordResetConfirm from './components/PasswordResetConfirm';
  16. const Home = lazy(() => import('./pages/Home'));
  17. const About = lazy(() => import('./pages/About'));
  18. function App() {
  19. const loadStatus = async () => {
  20. const res = await API.get('/api/status');
  21. const { success, data } = res.data;
  22. if (success) {
  23. localStorage.setItem('status', JSON.stringify(data));
  24. localStorage.setItem('footer_html', data.footer_html);
  25. } else {
  26. showError('无法正常连接至服务器!');
  27. }
  28. };
  29. useEffect(() => {
  30. loadStatus().then();
  31. }, []);
  32. return (
  33. <Routes>
  34. <Route
  35. path="/"
  36. element={
  37. <Suspense fallback={<Loading></Loading>}>
  38. <Home />
  39. </Suspense>
  40. }
  41. />
  42. <Route
  43. path="/user"
  44. element={
  45. <PrivateRoute>
  46. <User />
  47. </PrivateRoute>
  48. }
  49. />
  50. <Route
  51. path="/user/edit/:id"
  52. element={
  53. <Suspense fallback={<Loading></Loading>}>
  54. <EditUser />
  55. </Suspense>
  56. }
  57. />
  58. <Route
  59. path="/user/edit"
  60. element={
  61. <Suspense fallback={<Loading></Loading>}>
  62. <EditUser />
  63. </Suspense>
  64. }
  65. />
  66. <Route
  67. path="/user/add"
  68. element={
  69. <Suspense fallback={<Loading></Loading>}>
  70. <AddUser />
  71. </Suspense>
  72. }
  73. />
  74. <Route
  75. path="/user/reset"
  76. element={
  77. <Suspense fallback={<Loading></Loading>}>
  78. <PasswordResetConfirm />
  79. </Suspense>
  80. }
  81. />
  82. <Route
  83. path="/login"
  84. element={
  85. <Suspense fallback={<Loading></Loading>}>
  86. <LoginForm />
  87. </Suspense>
  88. }
  89. />
  90. <Route
  91. path="/register"
  92. element={
  93. <Suspense fallback={<Loading></Loading>}>
  94. <RegisterForm />
  95. </Suspense>
  96. }
  97. />
  98. <Route
  99. path="/reset"
  100. element={
  101. <Suspense fallback={<Loading></Loading>}>
  102. <PasswordResetForm />
  103. </Suspense>
  104. }
  105. />
  106. <Route
  107. path="/oauth/github"
  108. element={
  109. <Suspense fallback={<Loading></Loading>}>
  110. <GitHubOAuth />
  111. </Suspense>
  112. }
  113. />
  114. <Route
  115. path="/setting"
  116. element={
  117. <PrivateRoute>
  118. <Suspense fallback={<Loading></Loading>}>
  119. <Setting />
  120. </Suspense>
  121. </PrivateRoute>
  122. }
  123. />
  124. <Route
  125. path="/about"
  126. element={
  127. <Suspense fallback={<Loading></Loading>}>
  128. <About />
  129. </Suspense>
  130. }
  131. />
  132. <Route path="*" element={NotFound} />
  133. </Routes>
  134. );
  135. }
  136. export default App;