修改个人中心

Change-Id: I12098cefccf17e48c5fae86771969bad455aa04f
diff --git a/src/App.js b/src/App.js
index 43425fd..bebc250 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,3 +1,70 @@
+// 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'; // 导入 GroupProvider
+// 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 SimpleUploader from './pages/PublishSeed/SimpleUploader';
+
+// function RedirectToAuth() {
+//   if (typeof window !== 'undefined') {
+//     window.location.replace('/auth');
+//   }
+//   return null;
+// }
+
+// function App() {
+//   return (
+//     <UserProvider>
+//       <GroupProvider> {/* 添加 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/:seed_id" component={SeedDetail} />
+//           <Route path="/interest-groups" component={InterestGroup} />
+//           <Route path="/user/profile" component={UserProfile} />
+//           <Route path="/messages" component={MessagePage} />
+//           <Route path="/promotions" component={PromotionsPage} />
+//           <Route path="/level" component={LevelPage} />
+//           <Route path="/user/newbie-tasks" component={NewbieTasks} />
+//           {/* <Route path="/user/dynamics" component={UserDynamics} /> */}
+//           <Route path="/user/friends" component={UserFriends} />
+//           <Route path="/user/collections" component={UserCollect} />
+//           <Route path="/user/invite" component={UserInvite} />
+//         </>
+//       </GroupProvider>
+//     </UserProvider>
+//   );
+// }
+
+// export default App;
+
 import { Route } from 'wouter';
 import { Redirect } from 'wouter';
 import AuthPage from './pages/AuthPage/AuthPage';
@@ -7,7 +74,7 @@
 import SeedList from './pages/SeedList/SeedList';
 import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
 import { UserProvider } from './context/UserContext';
-import { GroupProvider } from './context/useGroupStore'; // 导入 GroupProvider
+import { GroupProvider } from './context/useGroupStore';
 import PublishSeed from './pages/PublishSeed/PublishSeed';
 import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
 import InterestGroup from './pages/InterestGroup/InterestGroup';
@@ -24,6 +91,8 @@
 import UserInvite from './pages/UserCenter/UserInvite';
 import SimpleUploader from './pages/PublishSeed/SimpleUploader';
 
+import UserLayout from './pages/UserCenter/UserLayout';
+
 function RedirectToAuth() {
   if (typeof window !== 'undefined') {
     window.location.replace('/auth');
@@ -34,7 +103,7 @@
 function App() {
   return (
     <UserProvider>
-      <GroupProvider> {/* 添加 GroupProvider */}
+      <GroupProvider>
         <>
           <Route path="/" component={RedirectToAuth} />
           <Route path="/auth" component={AuthPage} />
@@ -44,23 +113,36 @@
           <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/:seed_id" component={SeedDetail} />
           <Route path="/interest-groups" component={InterestGroup} />
-          <Route path="/user/profile" component={UserProfile} />
           <Route path="/messages" component={MessagePage} />
           <Route path="/promotions" component={PromotionsPage} />
           <Route path="/level" component={LevelPage} />
-          <Route path="/user/newbie-tasks" component={NewbieTasks} />
-          {/* <Route path="/user/dynamics" component={UserDynamics} /> */}
-          <Route path="/user/friends" component={UserFriends} />
-          <Route path="/user/collections" component={UserCollect} />
-          <Route path="/user/invite" component={UserInvite} />
+
+          {/* 用户中心嵌套路由模拟 */}
+          <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;
\ No newline at end of file
+export default App;
diff --git a/src/pages/UserCenter/NewbieTasks.css b/src/pages/UserCenter/NewbieTasks.css
index e5594de..660cec3 100644
--- a/src/pages/UserCenter/NewbieTasks.css
+++ b/src/pages/UserCenter/NewbieTasks.css
@@ -1,4 +1,4 @@
-/* 可加到 UserProfile.css 最底部 */
+
 .task-btn {
   margin-right: 8px;
   padding: 6px 12px;
diff --git a/src/pages/UserCenter/NewbieTasks.jsx b/src/pages/UserCenter/NewbieTasks.jsx
index 8a7cd9f..768f95a 100644
--- a/src/pages/UserCenter/NewbieTasks.jsx
+++ b/src/pages/UserCenter/NewbieTasks.jsx
@@ -1,8 +1,179 @@
+// import React, { useEffect, useState } from 'react';
+// import axios from 'axios';
+// import Header from '../../components/Header';
+// import './UserProfile.css'; // 复用个人资料页面的样式
+// import UserNav from './UserNav';
+
+// const NewbieTasks = () => {
+//   const [tasks, setTasks] = useState([]);
+//   const [experience, setExperience] = useState({});
+//   const [currentStep, setCurrentStep] = useState({});
+//   const [loading, setLoading] = useState(true);
+
+//   const baseURL = '/echo/task/tutorial';
+//   const userId = 1;
+
+//   // 获取所有任务
+//   const fetchTasks = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getAllTasks`, {
+//         params: { user_id: userId },
+//       });
+//       setTasks(response.data.tasks || []);
+//     } catch (error) {
+//       console.error('获取任务失败:', error);
+//     }
+//   };
+
+//   // 获取经验与等级信息
+//   const fetchExperience = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getAllTasks`, {
+//         params: { user_id: userId },
+//       });
+//       setExperience(response.data || {});
+//     } catch (error) {
+//       console.error('获取经验失败:', error);
+//     }
+//   };
+
+//   // 获取当前引导步骤
+//   const fetchCurrentStep = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getNewStep`, {
+//         params: { user_id: userId },
+//       });
+//       setCurrentStep(response.data || {});
+//     } catch (error) {
+//       console.error('获取引导步骤失败:', error);
+//     }
+//   };
+
+//   // 更新任务状态
+//   const updateStatus = async (taskId) => {
+//     try {
+//       await axios.post(`${baseURL}/updateStatus`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       await fetchTasks();
+//       await fetchExperience();
+//     } catch (error) {
+//       console.error('更新状态失败:', error);
+//     }
+//   };
+
+//   // 提交任务进度
+//   const updateProgress = async (taskId, progress) => {
+//     try {
+//       await axios.post(`${baseURL}/updateProgress`, {
+//         user_id: userId,
+//         task_id: taskId,
+//         progress,
+//       });
+//       await fetchTasks();
+//     } catch (error) {
+//       console.error('更新进度失败:', error);
+//     }
+//   };
+
+//   // 领取奖励
+//   const claimReward = async (taskId) => {
+//     try {
+//       await axios.post(`${baseURL}/rewardClaim`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       await fetchTasks();
+//       await fetchExperience();
+//     } catch (error) {
+//       console.error('领取奖励失败:', error);
+//     }
+//   };
+
+//   // 查看奖励是否已发放
+//   const checkRewardStatus = async (taskId) => {
+//     try {
+//       const response = await axios.post(`${baseURL}/rewardReview`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       alert(response.data.message || '已完成');
+//     } catch (error) {
+//       console.error('查看失败:', error);
+//     }
+//   };
+
+//   // 页面初始化
+//   useEffect(() => {
+//     const init = async () => {
+//       await fetchTasks();
+//       await fetchExperience();
+//       await fetchCurrentStep();
+//       setLoading(false);
+//     };
+//     init();
+//   }, []);
+
+//   if (loading) return <p className="loading">加载中...</p>;
+
+//   return (
+//     <div className="user-profile-container">
+//       <Header />
+//       <div className="user-center">
+//         <div className="user-nav-container">
+//           <UserNav activeKey="newbieTasks" onSelect={() => {}} />
+//         </div>
+
+//         <div className="common-card right-content">
+//           <div className="profile-header">
+//             <h1>🎯 新手考核</h1>
+//           </div>
+
+//           <div className="profile-details">
+//             <p><strong>当前经验:</strong>{experience.current_experience}</p>
+//             <p><strong>等级:</strong>{experience.level}</p>
+//             <p><strong>奖励经验:</strong>{experience.reward?.experience || 0}</p>
+//             <p><strong>奖励积分:</strong>{experience.reward?.points || 0}</p>
+//           </div>
+
+//           <div className="profile-details">
+//             <p><strong>🧭 当前引导步骤:</strong>{currentStep.current_step}</p>
+//             <p>{currentStep.step_description}</p>
+//           </div>
+
+//           <div className="profile-details">
+//             <h2>任务列表</h2>
+//             <ul>
+//               {tasks.map(task => (
+//                 <li key={task.task_id} style={{ marginBottom: '20px' }}>
+//                   <p><strong>任务:</strong>{task.title}</p>
+//                   <p><strong>描述:</strong>{task.description}</p>
+//                   <p><strong>进度:</strong>{task.progress}%</p>
+//                   <p><strong>状态:</strong>{task.status}</p>
+//                   <p><strong>奖励:</strong>经验 {task.reward.experience},积分 {task.reward.points}</p>
+
+//                   <div style={{ marginTop: '10px' }}>
+//                     <button className="task-btn" onClick={() => updateStatus(task.task_id)}>更新状态</button>
+//                     <button className="task-btn" onClick={() => updateProgress(task.task_id, 100)}>提交进度</button>
+//                     <button className="task-btn" onClick={() => claimReward(task.task_id)}>领取奖励</button>
+//                     <button className="task-btn" onClick={() => checkRewardStatus(task.task_id)}>查看奖励是否已发放</button>
+//                   </div>
+//                 </li>
+//               ))}
+//             </ul>
+//           </div>
+//         </div>
+//       </div>
+//     </div>
+//   );
+// };
+
+// export default NewbieTasks;
+
 import React, { useEffect, useState } from 'react';
 import axios from 'axios';
-import Header from '../../components/Header';
-import './UserProfile.css'; // 复用个人资料页面的样式
-import UserNav from './UserNav';
+import './UserProfile.css'; // 继续复用样式
 
 const NewbieTasks = () => {
   const [tasks, setTasks] = useState([]);
@@ -13,7 +184,6 @@
   const baseURL = '/echo/task/tutorial';
   const userId = 1;
 
-  // 获取所有任务
   const fetchTasks = async () => {
     try {
       const response = await axios.get(`${baseURL}/getAllTasks`, {
@@ -25,7 +195,6 @@
     }
   };
 
-  // 获取经验与等级信息
   const fetchExperience = async () => {
     try {
       const response = await axios.get(`${baseURL}/getAllTasks`, {
@@ -37,7 +206,6 @@
     }
   };
 
-  // 获取当前引导步骤
   const fetchCurrentStep = async () => {
     try {
       const response = await axios.get(`${baseURL}/getNewStep`, {
@@ -49,7 +217,6 @@
     }
   };
 
-  // 更新任务状态
   const updateStatus = async (taskId) => {
     try {
       await axios.post(`${baseURL}/updateStatus`, {
@@ -63,7 +230,6 @@
     }
   };
 
-  // 提交任务进度
   const updateProgress = async (taskId, progress) => {
     try {
       await axios.post(`${baseURL}/updateProgress`, {
@@ -77,7 +243,6 @@
     }
   };
 
-  // 领取奖励
   const claimReward = async (taskId) => {
     try {
       await axios.post(`${baseURL}/rewardClaim`, {
@@ -91,7 +256,6 @@
     }
   };
 
-  // 查看奖励是否已发放
   const checkRewardStatus = async (taskId) => {
     try {
       const response = await axios.post(`${baseURL}/rewardReview`, {
@@ -104,7 +268,6 @@
     }
   };
 
-  // 页面初始化
   useEffect(() => {
     const init = async () => {
       await fetchTasks();
@@ -118,55 +281,47 @@
   if (loading) return <p className="loading">加载中...</p>;
 
   return (
-    <div className="user-profile-container">
-      <Header />
-      <div className="user-center">
-        <div className="user-nav-container">
-          <UserNav activeKey="newbieTasks" onSelect={() => {}} />
-        </div>
+    <div className="common-card right-content">
+      <div className="profile-header">
+        <h1>🎯 新手考核</h1>
+      </div>
 
-        <div className="common-card right-content">
-          <div className="profile-header">
-            <h1>🎯 新手考核</h1>
-          </div>
+      <div className="profile-details">
+        <p><strong>当前经验:</strong>{experience.current_experience}</p>
+        <p><strong>等级:</strong>{experience.level}</p>
+        <p><strong>奖励经验:</strong>{experience.reward?.experience || 0}</p>
+        <p><strong>奖励积分:</strong>{experience.reward?.points || 0}</p>
+      </div>
 
-          <div className="profile-details">
-            <p><strong>当前经验:</strong>{experience.current_experience}</p>
-            <p><strong>等级:</strong>{experience.level}</p>
-            <p><strong>奖励经验:</strong>{experience.reward?.experience || 0}</p>
-            <p><strong>奖励积分:</strong>{experience.reward?.points || 0}</p>
-          </div>
+      <div className="profile-details">
+        <p><strong>🧭 当前引导步骤:</strong>{currentStep.current_step}</p>
+        <p>{currentStep.step_description}</p>
+      </div>
 
-          <div className="profile-details">
-            <p><strong>🧭 当前引导步骤:</strong>{currentStep.current_step}</p>
-            <p>{currentStep.step_description}</p>
-          </div>
+      <div className="profile-details">
+        <h2>任务列表</h2>
+        <ul>
+          {tasks.map(task => (
+            <li key={task.task_id} style={{ marginBottom: '20px', borderBottom: '1px solid #eee', paddingBottom: '10px' }}>
+              <p><strong>任务:</strong>{task.title}</p>
+              <p><strong>描述:</strong>{task.description}</p>
+              <p><strong>进度:</strong>{task.progress}%</p>
+              <p><strong>状态:</strong>{task.status}</p>
+              <p><strong>奖励:</strong>经验 {task.reward.experience},积分 {task.reward.points}</p>
 
-          <div className="profile-details">
-            <h2>任务列表</h2>
-            <ul>
-              {tasks.map(task => (
-                <li key={task.task_id} style={{ marginBottom: '20px' }}>
-                  <p><strong>任务:</strong>{task.title}</p>
-                  <p><strong>描述:</strong>{task.description}</p>
-                  <p><strong>进度:</strong>{task.progress}%</p>
-                  <p><strong>状态:</strong>{task.status}</p>
-                  <p><strong>奖励:</strong>经验 {task.reward.experience},积分 {task.reward.points}</p>
-
-                  <div style={{ marginTop: '10px' }}>
-                    <button className="task-btn" onClick={() => updateStatus(task.task_id)}>更新状态</button>
-                    <button className="task-btn" onClick={() => updateProgress(task.task_id, 100)}>提交进度</button>
-                    <button className="task-btn" onClick={() => claimReward(task.task_id)}>领取奖励</button>
-                    <button className="task-btn" onClick={() => checkRewardStatus(task.task_id)}>查看奖励是否已发放</button>
-                  </div>
-                </li>
-              ))}
-            </ul>
-          </div>
-        </div>
+              <div className="task-btn-group">
+                <button className="task-btn" onClick={() => updateStatus(task.task_id)}>更新状态</button>
+                <button className="task-btn" onClick={() => updateProgress(task.task_id, 100)}>提交进度</button>
+                <button className="task-btn" onClick={() => claimReward(task.task_id)}>领取奖励</button>
+                <button className="task-btn" onClick={() => checkRewardStatus(task.task_id)}>查看奖励状态</button>
+              </div>
+            </li>
+          ))}
+        </ul>
       </div>
     </div>
   );
 };
 
 export default NewbieTasks;
+
diff --git a/src/pages/UserCenter/UserCollect.css b/src/pages/UserCenter/UserCollect.css
index 47b7ac5..fe7b3bd 100644
--- a/src/pages/UserCenter/UserCollect.css
+++ b/src/pages/UserCenter/UserCollect.css
@@ -20,3 +20,5 @@
   margin: 4px 0;
   color: #333;
 }
+
+
diff --git a/src/pages/UserCenter/UserCollect.jsx b/src/pages/UserCenter/UserCollect.jsx
index 59d9c9a..e8782ca 100644
--- a/src/pages/UserCenter/UserCollect.jsx
+++ b/src/pages/UserCenter/UserCollect.jsx
@@ -1,9 +1,96 @@
+// import React, { useEffect, useState } from 'react';
+// import axios from 'axios';
+// import Header from '../../components/Header';
+// import UserNav from './UserNav';
+// import { useUser } from '../../context/UserContext';
+// import { useLocation } from 'wouter';
+// import './UserProfile.css'; // ✅ 复用个人资料通用样式
+
+// const UserCollect = () => {
+//   const { user, loading: userLoading } = useUser();
+//   const [collections, setCollections] = useState([]);
+//   const [loading, setLoading] = useState(true);
+//   const [error, setError] = useState(null);
+//   const [, navigate] = useLocation();
+
+//   useEffect(() => {
+//     if (userLoading) return;
+
+//     if (!user || !user.userId) {
+//       setError('未登录或用户信息获取失败');
+//       setLoading(false);
+//       return;
+//     }
+
+//     const fetchCollections = async () => {
+//       try {
+//         const response = await axios.get(`/echo/forum/posts/${user.userId}/getAllcollections`);
+//         setCollections(response.data || []);
+//         setError(null);
+//       } catch (error) {
+//         console.error('获取收藏失败:', error);
+//         setError('获取收藏失败,请稍后再试');
+//       } finally {
+//         setLoading(false);
+//       }
+//     };
+
+//     fetchCollections();
+//   }, [user, userLoading]);
+
+//   if (loading || userLoading) {
+//     return <p className="loading">加载中...</p>;
+//   }
+
+//   return (
+//     <div className="user-profile-container">
+//       <Header />
+//       <div className="user-center">
+//         <div className="user-nav-container">
+//           <UserNav activeKey="collect" />
+//         </div>
+
+//         <div className="common-card right-content">
+//           <div className="profile-header">
+//             <h1>📌 我的收藏</h1>
+//           </div>
+
+//           {error ? (
+//             <p className="error-text">{error}</p>
+//           ) : collections.length === 0 ? (
+//             <p>暂无收藏内容。</p>
+//           ) : (
+//             <div className="collection-list">
+//               {collections.map((post) => (
+//                 <div
+//                   key={post.postNo}
+//                   className="collection-item"
+//                   onClick={() => navigate(`/forum/post/${post.postNo}`)}
+//                 >
+//                   <h3>{post.title || '无标题'}</h3>
+//                   <p className="content-preview">
+//                     {post.postContent?.slice(0, 100) || '暂无内容'}...
+//                   </p>
+//                   <p className="meta">
+//                     作者:{post.username || '未知'} | 发布时间未知
+//                   </p>
+//                   <hr />
+//                 </div>
+//               ))}
+//             </div>
+//           )}
+//         </div>
+//       </div>
+//     </div>
+//   );
+// };
+
+// export default UserCollect;
+
 import React, { useEffect, useState } from 'react';
 import axios from 'axios';
-import Header from '../../components/Header';
-import UserNav from './UserNav';
 import { useUser } from '../../context/UserContext';
-import { useLocation } from 'wouter'; // ✅ 引入 wouter 的 useLocation
+import { useLocation } from 'wouter';
 import './UserCollect.css';
 
 const UserCollect = () => {
@@ -11,7 +98,7 @@
   const [collections, setCollections] = useState([]);
   const [loading, setLoading] = useState(true);
   const [error, setError] = useState(null);
-  const [, navigate] = useLocation(); // ✅ 获取跳转函数
+  const [, navigate] = useLocation();
 
   useEffect(() => {
     if (userLoading) return;
@@ -39,44 +126,36 @@
   }, [user, userLoading]);
 
   return (
-    <div className="user-profile-container">
-      <Header />
-      <div className="user-center">
-        <div className="user-nav-container">
-          <UserNav />
-        </div>
-
-        <div className="common-card">
-          <div className="right-content">
-            <h2 style={{ marginBottom: '1rem' }}>我的收藏</h2>
-            {userLoading || loading ? (
-              <p>加载中...</p>
-            ) : error ? (
-              <p className="error">{error}</p>
-            ) : collections.length === 0 ? (
-              <p>暂无收藏内容。</p>
-            ) : (
-              collections.map((post) => (
-                <div
-                  key={post.postNo}
-                  className="post-item"
-                  onClick={() => navigate(`/forum/post/${post.postNo}`)} // ✅ 跳转帖子详情页
-                  style={{ cursor: 'pointer' }}
-                >
-                  <h3>{post.title || '无标题'}</h3>
-                  <p>{post.postContent?.slice(0, 100) || '暂无内容'}...</p>
-                  <p style={{ fontSize: '12px', color: '#888' }}>
-                    作者:{post.username || '未知'} | 发布时间未知
-                  </p>
-                  <hr />
-                </div>
-              ))
-            )}
-          </div>
-        </div>
+    <div className="common-card right-content">
+      <div className="profile-header">
+        <h2>📌 我的收藏</h2>
       </div>
+
+      {userLoading || loading ? (
+        <p className="loading-text">加载中...</p>
+      ) : error ? (
+        <p className="error-text">{error}</p>
+      ) : collections.length === 0 ? (
+        <p>暂无收藏内容。</p>
+      ) : (
+        <div className="collection-list">
+          {collections.map((post) => (
+            <div
+              key={post.postNo}
+              className="collection-item"
+              onClick={() => navigate(`/forum/post/${post.postNo}`)}
+            >
+              <h3>{post.title || '无标题'}</h3>
+              <p className="preview">{post.postContent?.slice(0, 100) || '暂无内容'}...</p>
+              <p className="meta">作者:{post.username || '未知'} | 发布时间未知</p>
+              <hr />
+            </div>
+          ))}
+        </div>
+      )}
     </div>
   );
 };
 
 export default UserCollect;
+
diff --git a/src/pages/UserCenter/UserFriends.jsx b/src/pages/UserCenter/UserFriends.jsx
index 3aaec44..e1c9789 100644
--- a/src/pages/UserCenter/UserFriends.jsx
+++ b/src/pages/UserCenter/UserFriends.jsx
@@ -1,22 +1,227 @@
+// import React, { useEffect, useState } from 'react';
+// import axios from 'axios';
+// import UserNav from './UserNav';
+// import Header from '../../components/Header';
+// import './UserFriends.css';
+// import { useUser } from '../../context/UserContext';
+
+// const UserFriends = () => {
+//   const { user, loading } = useUser();
+//   const [friends, setFriends] = useState([]);
+//   const [error, setError] = useState(null);
+
+//   // 私信相关状态
+//   const [chatOpen, setChatOpen] = useState(false);
+//   const [chatFriend, setChatFriend] = useState(null);
+//   const [messageContent, setMessageContent] = useState('');
+//   const [sendingStatus, setSendingStatus] = useState(null);
+
+//   // 新增:聊天记录
+//   const [chatMessages, setChatMessages] = useState([]);
+//   const [loadingMessages, setLoadingMessages] = useState(false);
+//   const [messagesError, setMessagesError] = useState(null);
+
+//   useEffect(() => {
+//     if (loading) return;
+
+//     const fetchFriends = async () => {
+//       if (!user || !user.userId) {
+//         setError('未登录或用户信息缺失');
+//         return;
+//       }
+
+//       try {
+//         const res = await axios.get(`/echo/user/${user.userId}/friends`);
+//         setFriends(res.data || []);
+//         setError(null);
+//       } catch (err) {
+//         setError('加载好友失败,请稍后再试');
+//       }
+//     };
+
+//     fetchFriends();
+//   }, [user, loading]);
+
+//   // 打开聊天框时加载聊天记录
+//   const openChat = async (friend) => {
+//     setChatFriend(friend);
+//     setMessageContent('');
+//     setSendingStatus(null);
+//     setChatMessages([]);
+//     setMessagesError(null);
+//     setChatOpen(true);
+
+//     if (!user || !user.userId) return;
+
+//     setLoadingMessages(true);
+//     try {
+//       const res = await axios.get(`/echo/message/${user.userId}/getUserMessages`);
+//       if (res.data.status === 'success') {
+//         // 过滤出和这个好友的聊天消息(发或收都算)
+//         const allMessages = res.data.messages || [];
+//         const related = allMessages.filter(m =>
+//           (m.sender_id === user.userId && m.receiver_id === friend.id) ||
+//           (m.sender_id === friend.id && m.receiver_id === user.userId)
+//         );
+//         // 按时间排序(升序)
+//         related.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));
+//         setChatMessages(related);
+//       } else {
+//         setMessagesError('无法加载聊天记录');
+//       }
+//     } catch (err) {
+//       setMessagesError('加载聊天记录失败,请稍后再试');
+//     } finally {
+//       setLoadingMessages(false);
+//     }
+//   };
+
+//   const closeChat = () => {
+//     setChatOpen(false);
+//     setChatFriend(null);
+//     setMessageContent('');
+//     setSendingStatus(null);
+//     setChatMessages([]);
+//     setMessagesError(null);
+//   };
+
+//   const sendMessage = async () => {
+//     if (!messageContent.trim()) {
+//       setSendingStatus('消息不能为空');
+//       return;
+//     }
+//     setSendingStatus('发送中...');
+//     try {
+//       const res = await axios.post('/echo/message/sendMessages', {
+//         sender_id: user.userId,
+//         receiver_id: chatFriend.id,
+//         content: messageContent.trim(),
+//       });
+//       if (res.data.status === 'success') {
+//         setSendingStatus('发送成功');
+//         setMessageContent('');
+//         // 发送成功后,将这条消息追加到聊天记录
+//         const newMsg = {
+//           message_id: res.data.message_id,
+//           sender_id: user.userId,
+//           sender_username: user.username || '我',
+//           receiver_id: chatFriend.id,
+//           receiver_username: chatFriend.nickname,
+//           content: messageContent.trim(),
+//           timestamp: new Date().toISOString(),
+//         };
+//         setChatMessages(prev => [...prev, newMsg]);
+//       } else {
+//         setSendingStatus(res.data.message || '发送失败');
+//       }
+//     } catch (err) {
+//       setSendingStatus('发送失败,请稍后再试');
+//     }
+//   };
+
+//   if (loading) return <p>正在加载...</p>;
+//   if (error) return <p className="error">{error}</p>;
+
+//   return (
+//     <div className="user-friends-container">
+//       <Header />
+//       <div className="user-center">
+//         <div className="user-nav-container">
+//           <UserNav />
+//         </div>
+//         <div className="common-card">
+//           <h2>我的好友</h2>
+//           <div className="friends-list">
+//             {friends.length === 0 && <p>暂无好友</p>}
+//             {friends.map((friend) => (
+//               <div key={friend.id} className="friend-card">
+//                 <img src={friend.avatar} alt={friend.nickname} className="friend-avatar" />
+//                 <div className="friend-info">
+//                   <p><strong>{friend.nickname}</strong></p>
+//                   <p>{friend.email}</p>
+//                   <button
+//                     className="send-message-btn"
+//                     onClick={() => openChat(friend)}
+//                   >
+//                     发送私信
+//                   </button>
+//                 </div>
+//               </div>
+//             ))}
+//           </div>
+//         </div>
+//       </div>
+
+//       {/* 私信弹窗 */}
+//       {chatOpen && (
+//         <div className="chat-modal">
+//           <div className="chat-modal-content">
+//             <h3>给 {chatFriend.nickname} 发送私信</h3>
+//             <div className="chat-messages" style={{height: '250px', overflowY: 'auto', border: '1px solid #ccc', padding: '8px', marginBottom: '8px'}}>
+//               {loadingMessages && <p>加载聊天记录中...</p>}
+//               {messagesError && <p className="error">{messagesError}</p>}
+//               {!loadingMessages && chatMessages.length === 0 && <p>暂无聊天记录</p>}
+//               {chatMessages.map(msg => (
+//                 <div
+//                   key={msg.message_id}
+//                   style={{
+//                     textAlign: msg.sender_id === user.userId ? 'right' : 'left',
+//                     marginBottom: '8px'
+//                   }}
+//                 >
+//                   <div style={{
+//                     display: 'inline-block',
+//                     backgroundColor: msg.sender_id === user.userId ? '#409eff' : '#f0f0f0',
+//                     color: msg.sender_id === user.userId ? 'white' : 'black',
+//                     borderRadius: '10px',
+//                     padding: '6px 12px',
+//                     maxWidth: '70%',
+//                     wordBreak: 'break-word'
+//                   }}>
+//                     <p style={{margin: 0}}>{msg.content}</p>
+//                     <small style={{fontSize: '10px', opacity: 0.7}}>
+//                       {new Date(msg.timestamp).toLocaleString()}
+//                     </small>
+//                   </div>
+//                 </div>
+//               ))}
+//             </div>
+//             <textarea
+//               rows="3"
+//               value={messageContent}
+//               onChange={(e) => setMessageContent(e.target.value)}
+//               placeholder="输入消息内容"
+//               style={{width: '100%', marginBottom: '8px'}}
+//             />
+//             <div className="chat-actions">
+//               <button onClick={sendMessage}>发送</button>
+//               <button onClick={closeChat}>关闭</button>
+//             </div>
+//             {sendingStatus && <p className="status-msg">{sendingStatus}</p>}
+//           </div>
+//           <div className="chat-modal-backdrop" onClick={closeChat}></div>
+//         </div>
+//       )}
+//     </div>
+//   );
+// };
+
+// export default UserFriends;
+
 import React, { useEffect, useState } from 'react';
 import axios from 'axios';
-import UserNav from './UserNav';
-import Header from '../../components/Header';
-import './UserFriends.css';
 import { useUser } from '../../context/UserContext';
+import './UserFriends.css';
 
 const UserFriends = () => {
   const { user, loading } = useUser();
   const [friends, setFriends] = useState([]);
   const [error, setError] = useState(null);
 
-  // 私信相关状态
   const [chatOpen, setChatOpen] = useState(false);
   const [chatFriend, setChatFriend] = useState(null);
   const [messageContent, setMessageContent] = useState('');
   const [sendingStatus, setSendingStatus] = useState(null);
-
-  // 新增:聊天记录
   const [chatMessages, setChatMessages] = useState([]);
   const [loadingMessages, setLoadingMessages] = useState(false);
   const [messagesError, setMessagesError] = useState(null);
@@ -42,7 +247,6 @@
     fetchFriends();
   }, [user, loading]);
 
-  // 打开聊天框时加载聊天记录
   const openChat = async (friend) => {
     setChatFriend(friend);
     setMessageContent('');
@@ -57,13 +261,11 @@
     try {
       const res = await axios.get(`/echo/message/${user.userId}/getUserMessages`);
       if (res.data.status === 'success') {
-        // 过滤出和这个好友的聊天消息(发或收都算)
         const allMessages = res.data.messages || [];
         const related = allMessages.filter(m =>
           (m.sender_id === user.userId && m.receiver_id === friend.id) ||
           (m.sender_id === friend.id && m.receiver_id === user.userId)
         );
-        // 按时间排序(升序)
         related.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));
         setChatMessages(related);
       } else {
@@ -100,7 +302,6 @@
       if (res.data.status === 'success') {
         setSendingStatus('发送成功');
         setMessageContent('');
-        // 发送成功后,将这条消息追加到聊天记录
         const newMsg = {
           message_id: res.data.message_id,
           sender_id: user.userId,
@@ -123,33 +324,22 @@
   if (error) return <p className="error">{error}</p>;
 
   return (
-    <div className="user-friends-container">
-      <Header />
-      <div className="user-center">
-        <div className="user-nav-container">
-          <UserNav />
-        </div>
-        <div className="common-card">
-          <h2>我的好友</h2>
-          <div className="friends-list">
-            {friends.length === 0 && <p>暂无好友</p>}
-            {friends.map((friend) => (
-              <div key={friend.id} className="friend-card">
-                <img src={friend.avatar} alt={friend.nickname} className="friend-avatar" />
-                <div className="friend-info">
-                  <p><strong>{friend.nickname}</strong></p>
-                  <p>{friend.email}</p>
-                  <button
-                    className="send-message-btn"
-                    onClick={() => openChat(friend)}
-                  >
-                    发送私信
-                  </button>
-                </div>
-              </div>
-            ))}
+    <div className="user-subpage-card">
+      <h2>我的好友</h2>
+      <div className="friends-list">
+        {friends.length === 0 && <p>暂无好友</p>}
+        {friends.map((friend) => (
+          <div key={friend.id} className="friend-card">
+            <img src={friend.avatar} alt={friend.nickname} className="friend-avatar" />
+            <div className="friend-info">
+              <p><strong>{friend.nickname}</strong></p>
+              <p>{friend.email}</p>
+              <button className="send-message-btn" onClick={() => openChat(friend)}>
+                发送私信
+              </button>
+            </div>
           </div>
-        </div>
+        ))}
       </div>
 
       {/* 私信弹窗 */}
@@ -157,7 +347,7 @@
         <div className="chat-modal">
           <div className="chat-modal-content">
             <h3>给 {chatFriend.nickname} 发送私信</h3>
-            <div className="chat-messages" style={{height: '250px', overflowY: 'auto', border: '1px solid #ccc', padding: '8px', marginBottom: '8px'}}>
+            <div className="chat-messages">
               {loadingMessages && <p>加载聊天记录中...</p>}
               {messagesError && <p className="error">{messagesError}</p>}
               {!loadingMessages && chatMessages.length === 0 && <p>暂无聊天记录</p>}
@@ -169,19 +359,9 @@
                     marginBottom: '8px'
                   }}
                 >
-                  <div style={{
-                    display: 'inline-block',
-                    backgroundColor: msg.sender_id === user.userId ? '#409eff' : '#f0f0f0',
-                    color: msg.sender_id === user.userId ? 'white' : 'black',
-                    borderRadius: '10px',
-                    padding: '6px 12px',
-                    maxWidth: '70%',
-                    wordBreak: 'break-word'
-                  }}>
-                    <p style={{margin: 0}}>{msg.content}</p>
-                    <small style={{fontSize: '10px', opacity: 0.7}}>
-                      {new Date(msg.timestamp).toLocaleString()}
-                    </small>
+                  <div className={`chat-bubble ${msg.sender_id === user.userId ? 'self' : 'other'}`}>
+                    <p>{msg.content}</p>
+                    <small>{new Date(msg.timestamp).toLocaleString()}</small>
                   </div>
                 </div>
               ))}
@@ -191,7 +371,6 @@
               value={messageContent}
               onChange={(e) => setMessageContent(e.target.value)}
               placeholder="输入消息内容"
-              style={{width: '100%', marginBottom: '8px'}}
             />
             <div className="chat-actions">
               <button onClick={sendMessage}>发送</button>
@@ -207,3 +386,4 @@
 };
 
 export default UserFriends;
+
diff --git a/src/pages/UserCenter/UserInvite.css b/src/pages/UserCenter/UserInvite.css
index 8250e0b..8d32003 100644
--- a/src/pages/UserCenter/UserInvite.css
+++ b/src/pages/UserCenter/UserInvite.css
@@ -1,8 +1,8 @@
 .user-invite-container {
   padding: 24px;
-  background: #fff;
+  /* background: #fff; */
   border-radius: 12px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); */
   max-width: 500px;
   margin: 0 auto;
   text-align: center;
diff --git a/src/pages/UserCenter/UserInvite.jsx b/src/pages/UserCenter/UserInvite.jsx
index aa6e559..8d61846 100644
--- a/src/pages/UserCenter/UserInvite.jsx
+++ b/src/pages/UserCenter/UserInvite.jsx
@@ -44,6 +44,7 @@
 
 // export default UserInvite;
 
+
 import React, { useState } from 'react';
 import './UserInvite.css';
 import axios from 'axios';
diff --git a/src/pages/UserCenter/UserLayout.css b/src/pages/UserCenter/UserLayout.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/pages/UserCenter/UserLayout.css
diff --git a/src/pages/UserCenter/UserLayout.jsx b/src/pages/UserCenter/UserLayout.jsx
new file mode 100644
index 0000000..90a9f23
--- /dev/null
+++ b/src/pages/UserCenter/UserLayout.jsx
@@ -0,0 +1,23 @@
+// src/pages/UserCenter/UserLayout.js
+import React from 'react';
+import Header from '../../components/Header';
+import UserNav from './UserNav';
+import './UserLayout.css';
+
+const UserLayout = ({ children }) => {
+  return (
+    <div className="user-profile-container">
+      <Header />
+      <div className="user-center">
+        <div className="user-nav-container">
+          <UserNav />
+        </div>
+        <div className="common-card">
+          {children}
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default UserLayout;
diff --git a/src/pages/UserCenter/UserProfile.css b/src/pages/UserCenter/UserProfile.css
index d2f848b..de2ecac 100644
--- a/src/pages/UserCenter/UserProfile.css
+++ b/src/pages/UserCenter/UserProfile.css
@@ -77,3 +77,151 @@
 .avatar-upload-label:hover {
   opacity: 1;
 }
+
+.right-content {
+  flex: 3;
+}
+
+.profile-header {
+  margin-top: -20%;
+  text-align: center;
+}
+
+.avatar {
+  width: 100px;
+  height: 100px;
+  border-radius: 50%;
+  object-fit: cover;
+}
+
+h1 {
+  font-size: 2em;
+  margin-top: 10px;
+}
+
+.profile-details {
+  margin-top: 20%;
+  font-size: 1.2em;
+}
+
+.profile-details p {
+  margin: 10px 0;
+}
+
+.profile-details strong {
+  color: #333;
+}
+
+.error {
+  color: red;
+  text-align: center;
+}
+
+.common-card {
+  background-color: #e9ded2;
+  border-radius: 16px;
+  margin: 0 auto;
+  margin-top: 40px;
+  padding: 10% 20%;
+  margin-left: 5%;
+  margin-right: 5%;
+}
+
+.avatar-wrapper {
+  position: relative;
+  display: inline-block;
+}
+
+.avatar-upload-label {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  background: #3498db;
+  color: white;
+  padding: 4px 8px;
+  font-size: 12px;
+  cursor: pointer;
+  border-radius: 4px;
+  opacity: 0.85;
+}
+
+.avatar-upload-label:hover {
+  opacity: 1;
+}
+
+
+.collection-list {
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+
+.collection-item {
+  cursor: pointer;
+  background-color: #f9f9f9;
+  padding: 16px;
+  border-radius: 12px;
+  transition: box-shadow 0.2s ease;
+}
+
+.collection-item:hover {
+  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+}
+
+.collection-item h3 {
+  font-size: 1.2em;
+  margin-bottom: 8px;
+  color: #333;
+}
+
+.collection-item .content-preview {
+  color: #555;
+  font-size: 0.95em;
+  margin-bottom: 6px;
+}
+
+.collection-item .meta {
+  font-size: 0.8em;
+  color: #888;
+}
+
+.error-text {
+  color: red;
+  font-weight: bold;
+  padding: 10px;
+}
+
+.loading {
+  text-align: center;
+  font-size: 18px;
+  color: #333;
+}
+
+.task-btn {
+  margin-right: 8px;
+  padding: 6px 12px;
+  border: none;
+  border-radius: 6px;
+  background-color: #4a90e2;
+  color: white;
+  cursor: pointer;
+}
+
+.task-btn:hover {
+  background-color: #357abd;
+}
+
+.task-btn-group {
+  margin-top: 10px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8px;
+}
+
+.loading {
+  text-align: center;
+  font-size: 18px;
+  color: #333;
+}
+
+
diff --git a/src/pages/UserCenter/UserProfile.jsx b/src/pages/UserCenter/UserProfile.jsx
index fb472c8..902fbb7 100644
--- a/src/pages/UserCenter/UserProfile.jsx
+++ b/src/pages/UserCenter/UserProfile.jsx
@@ -1,8 +1,161 @@
+// import React, { useEffect, useState } from 'react';
+// import axios from 'axios';
+// import './UserProfile.css';
+// import UserNav from './UserNav';
+// import Header from '../../components/Header';
+// import { useUser } from '../../context/UserContext';
+
+// const DEFAULT_AVATAR_URL = `${process.env.PUBLIC_URL}/default-avatar.png`;
+
+// const UserProfile = () => {
+//   const { user, loading } = useUser();
+//   const [userProfile, setUserProfile] = useState(null);
+//   const [error, setError] = useState(null);
+
+//   useEffect(() => {
+//     if (loading) return;
+//     if (!user || !user.userId) {
+//       setError('未登录或用户信息缺失');
+//       setUserProfile(null);
+//       return;
+//     }
+
+//     const fetchUserProfile = async () => {
+//       try {
+//         setError(null);
+//         const { data: raw } = await axios.get(`/echo/user/${user.userId}/getProfile`);
+
+//         if (!raw) {
+//           setError('用户数据为空');
+//           setUserProfile(null);
+//           return;
+//         }
+
+//         const profile = {
+//           avatarUrl: raw.avatarUrl
+//             ? `${process.env.REACT_APP_AVATAR_BASE_URL}${raw.avatarUrl}`
+//             : DEFAULT_AVATAR_URL,
+//           nickname: raw.username || '未知用户',
+//           email: raw.email || '未填写',
+//           gender: raw.gender || '保密',
+//           bio: raw.description || '无',
+//           interests: raw.hobbies ? raw.hobbies.split(',') : [],
+//           level: raw.level || '未知',
+//           experience: raw.experience ?? 0,
+//           uploadAmount: raw.uploadCount ?? 0,
+//           downloadAmount: raw.downloadCount ?? 0,
+//           shareRate: raw.shareRate ?? 0,
+//           joinedDate: raw.registrationTime,
+//         };
+
+//         setUserProfile(profile);
+//       } catch (err) {
+//         setError(err.response?.status === 404 ? '用户不存在' : '请求失败,请稍后再试');
+//         setUserProfile(null);
+//       }
+//     };
+
+//     fetchUserProfile();
+//   }, [user, loading]);
+
+//   const handleAvatarUpload = async (e) => {
+//     const file = e.target.files[0];
+//     if (!file) return;
+
+//     const formData = new FormData();
+//     formData.append('file', file);
+
+//     try {
+//       const { data } = await axios.post(
+//         `/echo/user/${user.userId}/uploadAvatar`,
+//         formData,
+//         { headers: { 'Content-Type': 'multipart/form-data' } }
+//       );
+
+//       if (data?.avatarUrl) {
+//         setUserProfile((prev) => ({
+//           ...prev,
+//           avatarUrl: `${process.env.REACT_APP_AVATAR_BASE_URL}${data.avatarUrl}`,
+//         }));
+//         alert('头像上传成功');
+//       } else {
+//         alert('头像上传成功,但未返回新头像地址');
+//       }
+//     } catch (err) {
+//       console.error('上传失败:', err);
+//       alert('头像上传失败,请重试');
+//     }
+//   };
+
+//   if (loading) return <p>正在加载用户信息...</p>;
+//   if (error) return <p className="error">{error}</p>;
+//   if (!userProfile) return null;
+
+//   const {
+//     avatarUrl,
+//     nickname,
+//     email,
+//     gender,
+//     bio,
+//     interests,
+//     level,
+//     experience,
+//     uploadAmount,
+//     downloadAmount,
+//     shareRate,
+//     joinedDate,
+//   } = userProfile;
+
+//   return (
+//     <div className="user-profile-container">
+//       <Header />
+//       <div className="user-center">
+//         <div className="user-nav-container">
+//           <UserNav />
+//         </div>
+//         <div className="common-card">
+//           <div className="right-content">
+//             <div className="profile-header">
+//               <div className="avatar-wrapper">
+//                 <img src={avatarUrl} alt={nickname} className="avatar" />
+//                 <label htmlFor="avatar-upload" className="avatar-upload-label">
+//                   上传头像
+//                 </label>
+//                 <input
+//                   type="file"
+//                   id="avatar-upload"
+//                   accept="image/*"
+//                   style={{ display: 'none' }}
+//                   onChange={handleAvatarUpload}
+//                 />
+//               </div>
+//               <h1>{nickname}</h1>
+//             </div>
+
+//             <div className="profile-details">
+//               <p><strong>邮箱:</strong>{email}</p>
+//               <p><strong>性别:</strong>{gender}</p>
+//               <p><strong>个人简介:</strong>{bio}</p>
+//               <p><strong>兴趣:</strong>{interests.length > 0 ? interests.join(', ') : '无'}</p>
+//               <p><strong>等级:</strong>{level}</p>
+//               <p><strong>经验:</strong>{experience}</p>
+//               <p><strong>上传量:</strong>{uploadAmount}</p>
+//               <p><strong>下载量:</strong>{downloadAmount}</p>
+//               <p><strong>分享率:</strong>{(shareRate * 100).toFixed(2)}%</p>
+//               <p><strong>加入时间:</strong>{new Date(joinedDate).toLocaleDateString()}</p>
+//             </div>
+//           </div>
+//         </div>
+//       </div>
+//     </div>
+//   );
+// };
+
+// export default UserProfile;
+
 import React, { useEffect, useState } from 'react';
 import axios from 'axios';
 import './UserProfile.css';
-import UserNav from './UserNav';
-import Header from '../../components/Header';
 import { useUser } from '../../context/UserContext';
 
 const DEFAULT_AVATAR_URL = `${process.env.PUBLIC_URL}/default-avatar.png`;
@@ -107,44 +260,36 @@
   } = userProfile;
 
   return (
-    <div className="user-profile-container">
-      <Header />
-      <div className="user-center">
-        <div className="user-nav-container">
-          <UserNav />
-        </div>
-        <div className="common-card">
-          <div className="right-content">
-            <div className="profile-header">
-              <div className="avatar-wrapper">
-                <img src={avatarUrl} alt={nickname} className="avatar" />
-                <label htmlFor="avatar-upload" className="avatar-upload-label">
-                  上传头像
-                </label>
-                <input
-                  type="file"
-                  id="avatar-upload"
-                  accept="image/*"
-                  style={{ display: 'none' }}
-                  onChange={handleAvatarUpload}
-                />
-              </div>
-              <h1>{nickname}</h1>
-            </div>
-
-            <div className="profile-details">
-              <p><strong>邮箱:</strong>{email}</p>
-              <p><strong>性别:</strong>{gender}</p>
-              <p><strong>个人简介:</strong>{bio}</p>
-              <p><strong>兴趣:</strong>{interests.length > 0 ? interests.join(', ') : '无'}</p>
-              <p><strong>等级:</strong>{level}</p>
-              <p><strong>经验:</strong>{experience}</p>
-              <p><strong>上传量:</strong>{uploadAmount}</p>
-              <p><strong>下载量:</strong>{downloadAmount}</p>
-              <p><strong>分享率:</strong>{(shareRate * 100).toFixed(2)}%</p>
-              <p><strong>加入时间:</strong>{new Date(joinedDate).toLocaleDateString()}</p>
-            </div>
+    <div className="common-card">
+      <div className="right-content">
+        <div className="profile-header">
+          <div className="avatar-wrapper">
+            <img src={avatarUrl} alt={nickname} className="avatar" />
+            <label htmlFor="avatar-upload" className="avatar-upload-label">
+              上传头像
+            </label>
+            <input
+              type="file"
+              id="avatar-upload"
+              accept="image/*"
+              style={{ display: 'none' }}
+              onChange={handleAvatarUpload}
+            />
           </div>
+          <h1>{nickname}</h1>
+        </div>
+
+        <div className="profile-details">
+          <p><strong>邮箱:</strong>{email}</p>
+          <p><strong>性别:</strong>{gender}</p>
+          <p><strong>个人简介:</strong>{bio}</p>
+          <p><strong>兴趣:</strong>{interests.length > 0 ? interests.join(', ') : '无'}</p>
+          <p><strong>等级:</strong>{level}</p>
+          <p><strong>经验:</strong>{experience}</p>
+          <p><strong>上传量:</strong>{uploadAmount}</p>
+          <p><strong>下载量:</strong>{downloadAmount}</p>
+          <p><strong>分享率:</strong>{(shareRate * 100).toFixed(2)}%</p>
+          <p><strong>加入时间:</strong>{new Date(joinedDate).toLocaleDateString()}</p>
         </div>
       </div>
     </div>
@@ -152,3 +297,4 @@
 };
 
 export default UserProfile;
+