diff --git a/src/pages/Forum/posts-main/components/CreatePostButton.jsx b/src/pages/Forum/posts-main/components/CreatePostButton.jsx
index 4f7d7b1..0f23e82 100644
--- a/src/pages/Forum/posts-main/components/CreatePostButton.jsx
+++ b/src/pages/Forum/posts-main/components/CreatePostButton.jsx
@@ -3,67 +3,56 @@
 import { Edit } from '@icon-park/react';
 import './CreatePostButton.css';
 
-const API_BASE = process.env.REACT_APP_API_BASE;
-const user_id = 456;
+const user = JSON.parse(localStorage.getItem('user')); // user = { user_id: 123, ... }
+const userId = user?.user_id;
+
 
 const CreatePostButton = () => {
   const [showModal, setShowModal] = useState(false);
 
-  // 表单字段
   const [title, setTitle] = useState('');
   const [content, setContent] = useState('');
   const [previewUrls, setPreviewUrls] = useState([]);
-  const [imageUrls, setImageUrls] = useState([]);
+  const [files, setFiles] = useState([]);
 
-  // 处理文件选中：预览 & 上传
-  const handleImageChange = async (e) => {
-    const files = Array.from(e.target.files);
-    if (!files.length) return;
-    // 本地预览
-    setPreviewUrls(files.map(f => URL.createObjectURL(f)));
-
-    // 并发上传，假设 /upload 接口返回 { url: '...' }
-    try {
-      const uploaded = await Promise.all(
-        files.map(file => {
-          const fd = new FormData();
-          fd.append('file', file);
-          return axios.post(`${API_BASE}/upload`, fd, {
-            headers: { 'Content-Type': 'multipart/form-data' }
-          }).then(res => res.data.url);
-        })
-      );
-      setImageUrls(uploaded);
-    } catch (err) {
-      console.error('图片上传失败：', err);
-      alert('封面图上传失败，请重试');
-    }
+  // 选择图片并预览
+  const handleImageChange = (e) => {
+    const selectedFiles = Array.from(e.target.files);
+    if (!selectedFiles.length) return;
+    setFiles(selectedFiles);
+    setPreviewUrls(selectedFiles.map(f => URL.createObjectURL(f)));
   };
 
-  // 提交发帖
   const handleSubmit = async () => {
     if (!title.trim() || !content.trim()) {
       alert('标题和内容均为必填项');
       return;
     }
 
+    const formData = new FormData();
+    formData.append('title', title.trim());
+    formData.append('postContent', content.trim());
+
+    files.forEach(file => {
+      formData.append('imageUrl', file); // 多文件使用同一个字段名
+    });
+
     try {
       await axios.post(
-        `${API_BASE}/echo/forum/posts/${user_id}/createPost`,
+        `/echo/forum/posts/${userId}/createPost`,
+        formData,
         {
-          title: title.trim(),
-          post_content: content.trim(),
-          image_url: imageUrls
+          headers: { 'Content-Type': 'multipart/form-data' }
         }
       );
-      // 重置状态并关闭
+
+      // 清空表单
       setTitle('');
       setContent('');
+      setFiles([]);
       setPreviewUrls([]);
-      setImageUrls([]);
       setShowModal(false);
       alert('发帖成功');
-      // 如需刷新帖子列表，可在这里触发外部回调
     } catch (err) {
       console.error('发帖失败：', err.response?.data || err);
       alert(err.response?.data?.error || '发帖失败，请稍后重试');
@@ -110,7 +99,7 @@
 
             <div className="cp-preview">
               {previewUrls.map((url, i) => (
-                <img key={i} src={url} alt={`封面预览 ${i}`} />
+                <img key={i} src={url} alt={`预览 ${i}`} />
               ))}
             </div>
 
@@ -130,3 +119,4 @@
 };
 
 export default CreatePostButton;
+
diff --git a/src/pages/Forum/posts-main/components/PostList.jsx b/src/pages/Forum/posts-main/components/PostList.jsx
index 707ff15..9e088ea 100644
--- a/src/pages/Forum/posts-main/components/PostList.jsx
+++ b/src/pages/Forum/posts-main/components/PostList.jsx
@@ -1,12 +1,10 @@
 import React, { useEffect, useState } from 'react';
 import axios from 'axios';
 import { Link } from 'wouter';
-import { GoodTwo, Comment, Star, Delete } from '@icon-park/react';
-import { likePost, unlikePost } from '../../posts-detail/api';
+import { GoodTwo, Star, Delete } from '@icon-park/react';
+import { likePost } from '../../posts-detail/api';
 import './PostList.css';
 
-const API_BASE = process.env.REACT_APP_API_BASE;
-
 const PostList = ({ search }) => {
   const [posts, setPosts] = useState([]);
   const [page, setPage] = useState(1);
@@ -22,7 +20,7 @@
       setLoading(true);
       setErrorMsg('');
       try {
-        const res = await axios.get(`${API_BASE}/echo/forum/posts/getAllPosts`, {
+        const res = await axios.get(`/echo/forum/posts/getAllPosts`, {
           params: {
             page,
             pageSize: size,
@@ -31,13 +29,18 @@
           }
         });
 
+        // 检查响应结构是否符合预期
+        if (!res.data || !Array.isArray(res.data.posts)) {
+          throw new Error('API返回格式不正确');
+        }
+
         const postsData = res.data.posts || [];
 
         const userIds = [...new Set(postsData.map(post => post.user_id))];
 
         const profiles = await Promise.all(userIds.map(async id => {
           try {
-            const r = await axios.get(`${API_BASE}/echo/user/profile`, {
+            const r = await axios.get(`/echo/user/profile`, {
               params: { user_id: id }
             });
             return { id, profile: r.data };
@@ -74,61 +77,73 @@
     fetchPosts();
   }, [page, search]);
 
-  const toggleLike = async (postId, liked, userId) => {
-    try {
-      if (liked) {
-        await unlikePost(postId);
-      } else {
-        await likePost(postId, userId);
-      }
-
-      setPosts(posts =>
-        posts.map(post =>
-          post.postNo === postId
-            ? { ...post, liked: !liked, likeCount: liked ? post.likeCount - 1 : post.likeCount + 1 }
-            : post
-        )
-      );
-    } catch (err) {
-      console.error('点赞失败:', err);
+  const toggleLike = async (postNo, liked, userId) => {
+  try {
+    if (liked) {
+      // 修改为 POST 请求，并带上 user_id 参数
+      await axios.post(`/echo/forum/posts/${postNo}/unlike`, {
+        user_id: userId
+      });
+    } else {
+      await likePost(postNo, userId); // 你已有的点赞逻辑
     }
-  };
+
+    setPosts(posts =>
+      posts.map(post =>
+        post.postNo === postNo
+          ? { ...post, liked: !liked, likeCount: liked ? post.likeCount - 1 : post.likeCount + 1 }
+          : post
+      )
+    );
+  } catch (err) {
+    console.error('点赞失败:', err);
+    alert('点赞操作失败，请稍后重试');
+  }
+};
+
 
   // 收藏帖子
-  const toggleCollect = async (postId, collected, userId) => {
-    try {
-      if (collected) {
-        // 取消收藏
-        await axios.get(`${API_BASE}/echo/forum/posts/${postId}/uncollect`, {
-          data: { user_id: userId }
-        });
-      } else {
-        // 收藏帖子
-        await axios.post(`${API_BASE}/echo/forum/posts/${postId}/collect`, {
-          user_id: userId
-        });
-      }
-
-      setPosts(posts =>
-        posts.map(post =>
-          post.postNo === postId
-            ? { ...post, collected: !collected, collectCount: collected ? post.collectCount - 1 : post.collectCount + 1 }
-            : post
-        )
-      );
-    } catch (err) {
-      console.error('收藏操作失败:', err);
+  const toggleCollect = async (postNo, collected, userId) => {
+  try {
+    if (collected) {
+      // 取消收藏：DELETE 请求 + JSON 请求体
+      await axios.delete(`/echo/forum/posts/${postNo}/uncollect`, {
+        data: { user_id: userId } // 注意：DELETE 请求的请求体需放在 data 字段中
+      });
+    } else {
+      // 收藏：POST 请求 + JSON 请求体
+      await axios.post(`/echo/forum/posts/${postNo}/collect`, {
+        user_id: userId
+      });
     }
-  };
+
+    setPosts(posts =>
+      posts.map(post =>
+        post.postNo === postNo
+          ? {
+              ...post,
+              collected: !collected,
+              collectCount: collected ? post.collectCount - 1 : post.collectCount + 1
+            }
+          : post
+      )
+    );
+  } catch (err) {
+    console.error('收藏操作失败:', err.response?.data || err.message);
+    alert('收藏操作失败，请稍后重试');
+  }
+};
+
+
 
   // 删除帖子
-  const handleDeletePost = async (postId) => {
+  const handleDeletePost = async (postNo) => {
     if (window.confirm('确定要删除这篇帖子吗？')) {
       try {
-        await axios.delete(`${API_BASE}/echo/forum/posts/${postId}/deletePost`);
+        await axios.delete(`/echo/forum/posts/${postNo}/deletePost`);
         
         // 从列表中移除已删除的帖子
-        setPosts(posts => posts.filter(post => post.postNo !== postId));
+        setPosts(posts => posts.filter(post => post.postNo !== postNo));
         
         // 如果删除后当前页没有帖子了，尝试加载上一页
         if (posts.length === 1 && page > 1) {
@@ -172,11 +187,6 @@
                       <Star theme="outline" size="24" fill={post.collected ? '#ffd700' : '#fff'} />
                       <span>{post.collectCount}</span>
                     </button>
-
-                    <div className="icon-btn">
-                      <Comment theme="outline" size="24" fill="#fff" />
-                      <span>{post.commentCount}</span>
-                    </div>
                     
                     <button className="icon-btn" onClick={() => handleDeletePost(post.postNo)}>
                       <Delete theme="outline" size="24" fill="#333" />
