修改密码、管理员删帖、促销、退出登录

Change-Id: I2cc0e211ac5a04f9e89d0736fadd25541a5fccb9
diff --git a/src/App.js b/src/App.js
index e74a6d3..e47e7e2 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,14 +1,13 @@
-// export default App;
+import React from 'react';
+import { Route, useLocation } from 'wouter';
+import { UserProvider, useUser } from './context/UserContext';
 
-import { Route } from 'wouter';
-import { Redirect } from 'wouter';
 import AuthPage from './pages/AuthPage/AuthPage';
 import HomePage from './pages/HomePage';
 import FriendMoments from './pages/FriendMoments/FriendMoments';
 import ForumPage from './pages/Forum/posts-main/ForumPage';
 import SeedList from './pages/SeedList/SeedList';
 import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
-import { UserProvider } from './context/UserContext';
 import { GroupProvider } from './context/useGroupStore';
 import PublishSeed from './pages/PublishSeed/PublishSeed';
 import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
@@ -17,10 +16,9 @@
 import CreatePostPage from './pages/Forum/posts-create/CreatePostPage';
 import MessagePage from './pages/MessagePage/MessagePage';
 import CreateMoment from './pages/FriendMoments/CreateMoment';
-import PromotionsPage from './pages/PromotionsPage/PromotionsPage';
 import LevelPage from './pages/LevelPage/LevelPage';
 import NewbieTasks from './pages/UserCenter/NewbieTasks';
-// import UserDynamics from './pages/UserCenter/UserDynamics';
+import UserDynamics from './pages/UserCenter/UserDynamics';
 import UserFriends from './pages/UserCenter/UserFriends';
 import UserCollect from './pages/UserCenter/UserCollect';
 import UserInvite from './pages/UserCenter/UserInvite';
@@ -34,47 +32,66 @@
   return null;
 }
 
+// 私有路由保护组件
+function PrivateRoute({ component: Component }) {
+  const [location, setLocation] = useLocation();
+  const { user, loading } = useUser();
+
+  if (loading) {
+    return <div>加载中...</div>;
+  }
+
+  if (!user) {
+    setLocation('/auth');
+    return null;
+  }
+
+  return <Component />;
+}
+
 function App() {
   return (
     <UserProvider>
       <GroupProvider>
         <>
-          <Route path="/" component={RedirectToAuth} />
+          {/* 公开路由 */}
           <Route path="/auth" component={AuthPage} />
-          <Route path="/friend-moments" component={FriendMoments} />
-          <Route path="/friend-moments/create" component={CreateMoment} />
-          <Route path="/forum" component={ForumPage} />
-          <Route path="/forum/post/:postId" component={PostDetailPage} />
-          <Route path="/forum/create-post" component={CreatePostPage} />
-          <Route path="/seed-list" component={SeedList} />
-          <Route path="/publish-seed" component={PublishSeed} />
-          {/* <Route path="/publish-seed" component={SimpleUploader} /> */}
-          <Route path="/seed/:id" component={SeedDetail} />
-          <Route path="/interest-groups" component={InterestGroup} />
-          <Route path="/messages" component={MessagePage} />
-          <Route path="/promotions" component={PromotionsPage} />
-          <Route path="/level" component={LevelPage} />
-          <Route path="/information/:userId" component={UserInfo} />
 
+          {/* 根路径跳转到登录页 */}
+          <Route path="/" component={() => <RedirectToAuth />} />
 
-          {/* 用户中心嵌套路由模拟 */}
+          {/* 私有路由用 PrivateRoute 包裹 */}
+          <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} />
+          <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} />
+          <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} />
+          <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} />
+          <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} />
+          <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} />
+          <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} />
+          <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} />
+          <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} />
+          <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} />
+          <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} />
+          <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} />
+
+          {/* 用户中心路由 */}
           <Route path="/user/profile" component={() => (
-            <UserLayout><UserProfile /></UserLayout>
+            <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} />
           )} />
           <Route path="/user/newbie-tasks" component={() => (
-            <UserLayout><NewbieTasks /></UserLayout>
+            <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} />
           )} />
-          {/* <Route path="/user/dynamics" component={() => (
-            <UserLayout><UserDynamics /></UserLayout>
-          )} /> */}
+          <Route path="/user/dynamics" component={() => (
+            <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} />
+          )} />
           <Route path="/user/friends" component={() => (
-            <UserLayout><UserFriends /></UserLayout>
+            <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} />
           )} />
           <Route path="/user/collections" component={() => (
-            <UserLayout><UserCollect /></UserLayout>
+            <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} />
           )} />
           <Route path="/user/invite" component={() => (
-            <UserLayout><UserInvite /></UserLayout>
+            <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} />
           )} />
         </>
       </GroupProvider>
@@ -83,3 +100,90 @@
 }
 
 export default App;
+
+
+// // export default App;
+
+// import { Route } from 'wouter';
+// import { Redirect } from 'wouter';
+// import AuthPage from './pages/AuthPage/AuthPage';
+// import HomePage from './pages/HomePage';
+// import FriendMoments from './pages/FriendMoments/FriendMoments';
+// import ForumPage from './pages/Forum/posts-main/ForumPage';
+// import SeedList from './pages/SeedList/SeedList';
+// import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
+// import { UserProvider } from './context/UserContext';
+// import { GroupProvider } from './context/useGroupStore';
+// import PublishSeed from './pages/PublishSeed/PublishSeed';
+// import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
+// import InterestGroup from './pages/InterestGroup/InterestGroup';
+// import UserProfile from './pages/UserCenter/UserProfile';
+// import CreatePostPage from './pages/Forum/posts-create/CreatePostPage';
+// import MessagePage from './pages/MessagePage/MessagePage';
+// import CreateMoment from './pages/FriendMoments/CreateMoment';
+// // import PromotionsPage from './pages/PromotionsPage/PromotionsPage';
+// import LevelPage from './pages/LevelPage/LevelPage';
+// import NewbieTasks from './pages/UserCenter/NewbieTasks';
+// import UserDynamics from './pages/UserCenter/UserDynamics';
+// import UserFriends from './pages/UserCenter/UserFriends';
+// import UserCollect from './pages/UserCenter/UserCollect';
+// import UserInvite from './pages/UserCenter/UserInvite';
+// import UserInfo from './pages/UserInfo/UserInfo';
+// import UserLayout from './pages/UserCenter/UserLayout';
+
+// function RedirectToAuth() {
+//   if (typeof window !== 'undefined') {
+//     window.location.replace('/auth');
+//   }
+//   return null;
+// }
+
+// function App() {
+//   return (
+//     <UserProvider>
+//       <GroupProvider>
+//         <>
+//           <Route path="/" component={RedirectToAuth} />
+//           <Route path="/auth" component={AuthPage} />
+//           <Route path="/friend-moments" component={FriendMoments} />
+//           <Route path="/friend-moments/create" component={CreateMoment} />
+//           <Route path="/forum" component={ForumPage} />
+//           <Route path="/forum/post/:postId" component={PostDetailPage} />
+//           <Route path="/forum/create-post" component={CreatePostPage} />
+//           <Route path="/seed-list" component={SeedList} />
+//           <Route path="/publish-seed" component={PublishSeed} />
+//           {/* <Route path="/publish-seed" component={SimpleUploader} /> */}
+//           <Route path="/seed/:id" component={SeedDetail} />
+//           <Route path="/interest-groups" component={InterestGroup} />
+//           <Route path="/messages" component={MessagePage} />
+//           {/* <Route path="/promotions" component={PromotionsPage} /> */}
+//           <Route path="/level" component={LevelPage} />
+//           <Route path="/information/:userId" component={UserInfo} />
+
+
+//           {/* 用户中心嵌套路由模拟 */}
+//           <Route path="/user/profile" component={() => (
+//             <UserLayout><UserProfile /></UserLayout>
+//           )} />
+//           <Route path="/user/newbie-tasks" component={() => (
+//             <UserLayout><NewbieTasks /></UserLayout>
+//           )} />
+//           <Route path="/user/dynamics" component={() => (
+//             <UserLayout><UserDynamics /></UserLayout>
+//           )} />
+//           <Route path="/user/friends" component={() => (
+//             <UserLayout><UserFriends /></UserLayout>
+//           )} />
+//           <Route path="/user/collections" component={() => (
+//             <UserLayout><UserCollect /></UserLayout>
+//           )} />
+//           <Route path="/user/invite" component={() => (
+//             <UserLayout><UserInvite /></UserLayout>
+//           )} />
+//         </>
+//       </GroupProvider>
+//     </UserProvider>
+//   );
+// }
+
+// export default App;