diff --git a/src/pages/FriendMoments/FriendMoments.css b/src/pages/FriendMoments/FriendMoments.css
index 087abcb..4f0a801 100644
--- a/src/pages/FriendMoments/FriendMoments.css
+++ b/src/pages/FriendMoments/FriendMoments.css
@@ -1,3 +1,12 @@
+.user-avatar {
+  width: 40px;
+  height: 40px;
+  border-radius: 50%;
+  object-fit: cover;
+  border: 1.5px solid #ddd;
+  box-shadow: 0 1px 4px rgba(0,0,0,0.1);
+}
+
 .friend-moments-container {
   margin: 0 auto;
   background: #333;
@@ -42,7 +51,6 @@
   padding: 1% 1.5%;
   margin: 1% 2%;
   border-radius: 6px;
-  /*设置item之间的间隔*/
   margin-bottom: 2%;
   background-color: #e9ded2;
 }
@@ -87,7 +95,6 @@
   font-size: 12px;
 }
 
-/* Modal 样式 */
 .modal-overlay {
   position: fixed;
   top: 0;
@@ -111,7 +118,6 @@
   gap: 20px;
 }
 
-/* 标题 */
 .modal-dialog h3 {
   margin: 0;
   color : #4A3B34;
@@ -172,4 +178,5 @@
 .modal-actions .btn.submit {
   background: #BA929A;
   color: #fff;
-}
+} 
+
diff --git a/src/pages/FriendMoments/FriendMoments.jsx b/src/pages/FriendMoments/FriendMoments.jsx
index 526c06d..9595b8b 100644
--- a/src/pages/FriendMoments/FriendMoments.jsx
+++ b/src/pages/FriendMoments/FriendMoments.jsx
@@ -5,6 +5,13 @@
 import { Edit, GoodTwo, Comment } from '@icon-park/react';
 import { UserContext } from '../../context/UserContext'; // 引入用户上下文
 
+// 修改后的封面图 URL 拼接函数
+const formatImageUrl = (url) => {
+  if (!url) return '';
+  const filename = url.split('/').pop(); // 提取文件名部分
+  return `http://localhost:8080/uploads/post/${filename}`;
+};
+
 const FriendMoments = () => {
   const [feeds, setFeeds] = useState([]);
   const [filteredFeeds, setFilteredFeeds] = useState([]);
@@ -191,12 +198,6 @@
       return;
     }
 
-    // 检查是否已经点赞，防止重复请求
-    // const currentFeed = feeds.find(feed => feed.postNo === dynamicId);
-    // if (currentFeed && currentFeed.liked) {
-    //   console.warn('尝试重复点赞，已忽略');
-    //   return;
-    // }
 
     console.log('当前用户ID:', userId);
     console.log('即将点赞的动态ID:', dynamicId);
@@ -400,17 +401,6 @@
           <Edit theme="outline" size="18" style={{ marginRight: '6px' }} />
           创建动态
         </button>
-        {/* <div className="f-search-bar">
-          <input
-            className="search-input"
-            type="text"
-            value={query}
-            onChange={e => setQuery(e.target.value)}
-            placeholder="输入要搜索的动态"
-          />
-          <button className="search-btn" onClick={handleSearch}>搜索</button>
-          <button className="search-btn" onClick={handleReset}>重置</button>
-        </div> */}
       </div>
 
       <div className="feed-list">
@@ -429,7 +419,11 @@
             <div className="feed-item" key={feed.postNo || `feed-${Math.random()}`}>
               {/* 显示发布者信息 */}
               <div className="feed-author">
-                <img src={feed.avatar_url || 'https://example.com/default-avatar.jpg'} alt={feed.username || '用户头像'} />
+              <img
+                className="user-avatar"
+                src={feed.avatar_url || 'https://example.com/default-avatar.jpg'}
+                alt={feed.username || '用户头像'}
+              />
                 <div>
                   <h4>{feed.username || '未知用户'}</h4>
                   <span className="feed-date">{new Date(feed.postTime || Date.now()).toLocaleString()}</span>
@@ -441,17 +435,17 @@
 
               {feed.imageUrl && (
                 <div className="feed-images">
-                  {/* 处理可能是单张图片或多张图片的情况 */}
                   {typeof feed.imageUrl === 'string' ? (
-                    <img src={feed.imageUrl} alt="动态图片" />
+                    <img src={formatImageUrl(feed.imageUrl)} alt="动态图片" />
                   ) : (
                     feed.imageUrl.map((url, i) => (
-                      <img key={i} src={url} alt={`动态图${i}`} />
+                      <img key={i} src={formatImageUrl(url)} alt={`动态图${i}`} />
                     ))
                   )}
                 </div>
               )}
 
+
               <div className="feed-footer">
                 <div className="like-container">
                     <button className="icon-btn" onClick={() => handleLike(feed.postNo, feed.liked, feed.user_id)}>
diff --git a/src/pages/InterestGroup/GroupItem.jsx b/src/pages/InterestGroup/GroupItem.jsx
index 4f76bac..8fdc640 100644
--- a/src/pages/InterestGroup/GroupItem.jsx
+++ b/src/pages/InterestGroup/GroupItem.jsx
@@ -1,59 +1,3 @@
-// import React, { useState } from 'react';
-// import { useGroupStore } from '../../context/useGroupStore';
-// import { useUser } from '../../context/UserContext'; // ✅ 新增：引入 UserContext
-// import CreatePostForm from './CreatePostForm';
-
-// const GroupItem = ({ group }) => {
-//   const { handleJoinGroup, joinStatus } = useGroupStore();
-//   const { user } = useUser(); // ✅ 获取 user
-//   const userId = user?.userId; // ✅ 安全获取 userId
-//   const [showCreatePost, setShowCreatePost] = useState(false);
-
-//   return (
-//     <div className="group-item">
-//       <div className="group-content">
-//         <img
-//           style={{ width: '40%', height: '40%' }}
-//           src={group.cover_image || 'https://picsum.photos/200/200'}
-//           alt={group.groupName || group.name}
-//           className="group-cover"
-//         />
-//         <div className="group-info-right">
-//           <h3>{group.groupName || group.name}</h3>
-//           <p style={{ color: '#BA929A' }}>{group.memberCount || 0}人加入了小组</p>
-//           <button
-//             onClick={() => handleJoinGroup(group.group_id, userId)}
-//             disabled={joinStatus[group.group_id] === '加入成功' || !userId}
-//           >
-//             {joinStatus[group.group_id] === '加入成功' ? '已加入' : userId ? '+加入小组' : '请登录'}
-//           </button>
-
-//           {userId && joinStatus[group.group_id] === '加入成功' && (
-//             <button onClick={() => setShowCreatePost(!showCreatePost)}>
-//               +发布帖子
-//             </button>
-//           )}
-//         </div>
-//       </div>
-
-//       <div className="group-description">
-//         <p>{group.description}</p>
-//       </div>
-//       <p>分类：{group.category}</p>
-
-//       {showCreatePost && (
-//         <CreatePostForm 
-//           groupId={group.group_id} 
-//           onClose={() => setShowCreatePost(false)} 
-//         />
-//       )}
-//     </div>
-//   );
-// };
-
-// export default GroupItem;
-
-
 import React, { useState } from 'react';
 import { useGroupStore } from '../../context/useGroupStore';
 import { useUser } from '../../context/UserContext';
@@ -76,7 +20,7 @@
       <div className="group-content">
         <img
           style={{ width: '40%', height: '40%' }}
-          src={group.cover_image || 'https://picsum.photos/200/200'}
+          src={group.coverImage || 'https://picsum.photos/200/200'}
           alt={group.groupName}
           className="group-cover"
         />
@@ -115,64 +59,4 @@
   );
 };
 
-export default GroupItem;
-
-
-// import React, { useState } from 'react';
-// import { useGroupStore } from '../../context/useGroupStore';
-// import { useUser } from '../../context/UserContext';
-// import CreatePostForm from './CreatePostForm';
-
-// const GroupItem = ({ group }) => {
-//     console.log('group:', group);
-
-//   const { handleJoinGroup, joinStatus } = useGroupStore();
-//   const { user } = useUser();
-//   const userId = user?.userId; // 确保使用正确的字段名（取自 localStorage 的结构）
-//   const [showCreatePost, setShowCreatePost] = useState(false);
-
-//   return (
-//     <div className="group-item">
-//       <div className="group-content">
-//         <img
-//           style={{ width: '40%', height: '40%' }}
-//           src={group.cover_image || 'https://picsum.photos/200/200'}
-//           alt={group.name}
-//           className="group-cover"
-//         />
-//         <div className="group-info-right">
-//           <h3>{group.name}</h3>
-//           <p style={{ color: '#BA929A' }}>{group.member_count || 0}人加入了小组</p>
-
-//           <button
-//             onClick={() => handleJoinGroup(group.group_id, userId)}
-//             disabled={joinStatus[group.group_id] === '加入成功' || !userId}
-//           >
-//             {joinStatus[group.group_id] === '加入成功' ? '已加入' : userId ? '+加入小组' : '请登录'}
-//           </button>
-
-//           {userId && joinStatus[group.group_id] === '加入成功' && (
-//             <button onClick={() => setShowCreatePost(!showCreatePost)}>
-//               +发布帖子
-//             </button>
-//           )}
-//         </div>
-//       </div>
-
-//       <div className="group-description">
-//         <p>{group.description}</p>
-//       </div>
-//       <p>分类：{group.category}</p>
-
-//       {showCreatePost && (
-//         <CreatePostForm 
-//           groupId={group.group_id}
-//           onClose={() => setShowCreatePost(false)}
-//         />
-//       )}
-//     </div>
-//   );
-// };
-
-// export default GroupItem;
-
+export default GroupItem;
\ No newline at end of file
