修改个人中心

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