修改个人中心

Change-Id: I12098cefccf17e48c5fae86771969bad455aa04f
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;
+