diff --git a/src/pages/Forum/posts-detail/api.js b/src/pages/Forum/posts-detail/api.js
index 924cba9..d05f148 100644
--- a/src/pages/Forum/posts-detail/api.js
+++ b/src/pages/Forum/posts-detail/api.js
@@ -15,9 +15,15 @@
 };
 
 // 点赞帖子
-export const likePost = async (postId) => {
-    const response = await axios.post(`${API_BASE}/echo/forum/posts/${postId}/like`);
-    return response.data;
+export const likePost = async (postId, userId) => {
+    try {
+        const response = await axios.post(`${API_BASE}/echo/forum/posts/${postId}/like`, {
+            user_id: userId,  // 用户 ID
+        });
+        return response.data;
+    } catch (error) {
+        return handleApiError(error);
+    }
 };
 
 // 取消点赞帖子
@@ -27,15 +33,18 @@
 };
 
 // 添加评论
-export const addCommentToPost = async (postId, content) => {
-    const response = await axios.post(`${API_BASE}/echo/forum/posts/${postId}/comments`, { content });
-    return response.data;
-};
-
-// 回复评论
-export const replyToComment = async (commentId, replyContent) => {
-    const response = await axios.post(`${API_BASE}/echo/forum/comments/${commentId}/reply`, { content: replyContent });
-    return response.data;
+export const addCommentToPost = async (postId, userId, content, isAnonymous, comCommentId = null) => {
+    try {
+        const response = await axios.post(`${API_BASE}/echo/forum/posts/${postId}/comments`, {
+            content,
+            user_id: userId,
+            is_anonymous: isAnonymous,
+            com_comment_id: comCommentId, // 如果是回复评论，传递 com_comment_id
+        });
+        return response.data;
+    } catch (error) {
+        return handleApiError(error);
+    }
 };
 
 // 点赞评论
@@ -50,8 +59,41 @@
     return response.data;
 };
 
+// 收藏帖子
+export const collectPost = async (postId, userId, action) => {
+    try {
+        const response = await axios.post(`${API_BASE}/echo/forum/posts/${postId}/collect`, {
+            user_id: userId,
+            action: action,  // "collect" 或 "cancel"
+        });
+        return response.data;
+    } catch (error) {
+        return handleApiError(error);
+    }
+};
+
 // 获取用户信息
 export const getUserInfo = async (userId) => {
     const response = await axios.get(`${API_BASE}/user/${userId}/info`);
     return response.data;
-};
\ No newline at end of file
+};
+
+// 错误处理
+const handleApiError = (error) => {
+    if (error.response) {
+        return {
+            success: false,
+            message: error.response.data.error || '请求失败',
+        };
+    } else if (error.request) {
+        return {
+            success: false,
+            message: '请求未得到响应，请稍后重试',
+        };
+    } else {
+        return {
+            success: false,
+            message: error.message || '发生了未知错误',
+        };
+    }
+};
