修复帖子点赞和收藏功能

Change-Id: If66f9065607d97fb9527f0905b3465e6cd5b5995
diff --git a/src/pages/Forum/posts-create/CreatePost.jsx b/src/pages/Forum/posts-create/CreatePost.jsx
index a03a836..e38c29a 100644
--- a/src/pages/Forum/posts-create/CreatePost.jsx
+++ b/src/pages/Forum/posts-create/CreatePost.jsx
@@ -1,91 +1,172 @@
-// src/pages/Forum/CreatePost.jsx
+// // src/pages/Forum/CreatePost.jsx
+// import React, { useState } from 'react';
+// import axios from 'axios';
+
+// const API_BASE = process.env.REACT_APP_API_BASE;
+
+// const CreatePost = ({ userId }) => {
+//   const [title, setTitle] = useState('');
+//   const [content, setContent] = useState('');
+//   const [imgUrl, setImageUrl] = useState('');
+//   const [isAnonymous, setIsAnonymous] = useState(false);
+
+//   const handleSubmit = async (e) => {
+//     e.preventDefault();
+
+//     try {
+//       const postData = {
+//         title,
+//         postContent: content,
+//         postType: isAnonymous,
+//       };
+
+//       if (imgUrl.trim()) {
+//         postData.imgUrl = imgUrl;
+//       }
+
+//       const response = await axios.post(
+//         `${API_BASE}/echo/forum/posts/${userId}/createPost`,
+//         postData
+//       );
+      
+
+//       if (response.status === 201) {
+//         alert('帖子创建成功!');
+//         setTitle('');
+//         setContent('');
+//         setImageUrl('');
+//         setIsAnonymous(false);
+//       }
+//     } catch (error) {
+//       console.error('帖子创建失败:', error.response?.data || error.message);
+//       alert('创建失败,请重试');
+//     }    
+//   };
+
+//   return (
+//     <div className="create-post">
+//       <h2>创建新帖子</h2>
+//       <form onSubmit={handleSubmit}>
+//         <div>
+//           <label>标题:</label>
+//           <input
+//             type="text"
+//             value={title}
+//             onChange={(e) => setTitle(e.target.value)}
+//             required
+//           />
+//         </div>
+//         <div>
+//           <label>内容:</label>
+//           <textarea
+//             value={content}
+//             onChange={(e) => setContent(e.target.value)}
+//             required
+//           />
+//         </div>
+//         <div>
+//           <label>图片 URL(可选):</label>
+//           <input
+//             type="text"
+//             value={imgUrl}
+//             onChange={(e) => setImageUrl(e.target.value)}
+//           />
+//         </div>
+//         <div>
+//           <label>
+//             <input
+//               type="checkbox"
+//               checked={isAnonymous}
+//               onChange={(e) => setIsAnonymous(e.target.checked)}
+//             />
+//             匿名发布
+//           </label>
+//         </div>
+//         <button type="submit">发布</button>
+//       </form>
+//     </div>
+//   );
+// };
+
+// export default CreatePost;
+
 import React, { useState } from 'react';
 import axios from 'axios';
+import './CreatePost.css'; // 如果你打算加样式
 
 const API_BASE = process.env.REACT_APP_API_BASE;
 
 const CreatePost = ({ userId }) => {
   const [title, setTitle] = useState('');
   const [content, setContent] = useState('');
-  const [imgUrl, setImageUrl] = useState('');
-  const [isAnonymous, setIsAnonymous] = useState(false);
+  const [imageUrl, setImageUrl] = useState('');
+  const [message, setMessage] = useState('');
+  const [error, setError] = useState('');
 
   const handleSubmit = async (e) => {
     e.preventDefault();
+    setMessage('');
+    setError('');
+
+    if (!title.trim() || !content.trim()) {
+      setError('标题和内容不能为空');
+      return;
+    }
 
     try {
-      const postData = {
+      const res = await axios.post(`${API_BASE}/echo/forum/posts/${userId}/createPost`, {
         title,
-        postContent: content,
-        postType: isAnonymous,
-      };
+        post_content: content,
+        image_url: imageUrl
+      });
 
-      if (imgUrl.trim()) {
-        postData.imgUrl = imgUrl;
-      }
-
-      const response = await axios.post(
-        `${API_BASE}/echo/forum/posts/${userId}/createPost`,
-        postData
-      );
-      
-
-      if (response.status === 201) {
-        alert('帖子创建成功!');
-        setTitle('');
-        setContent('');
-        setImageUrl('');
-        setIsAnonymous(false);
-      }
-    } catch (error) {
-      console.error('帖子创建失败:', error.response?.data || error.message);
-      alert('创建失败,请重试');
-    }    
+      setMessage(`发帖成功,帖子ID:${res.data.post_id}`);
+      setTitle('');
+      setContent('');
+      setImageUrl('');
+    } catch (err) {
+      console.error(err);
+      setError(err.response?.data?.error || '发帖失败,请稍后重试');
+    }
   };
 
   return (
-    <div className="create-post">
-      <h2>创建新帖子</h2>
-      <form onSubmit={handleSubmit}>
-        <div>
+    <div className="create-post-container">
+      <h2>发表新帖子</h2>
+      <form onSubmit={handleSubmit} className="create-post-form">
+        <div className="form-group">
           <label>标题:</label>
           <input
             type="text"
             value={title}
             onChange={(e) => setTitle(e.target.value)}
-            required
+            placeholder="输入帖子标题"
           />
         </div>
-        <div>
+        <div className="form-group">
           <label>内容:</label>
           <textarea
             value={content}
             onChange={(e) => setContent(e.target.value)}
-            required
+            placeholder="输入帖子内容"
           />
         </div>
-        <div>
-          <label>图片 URL(可选):</label>
+        <div className="form-group">
+          <label>图片链接(可选):</label>
           <input
             type="text"
-            value={imgUrl}
+            value={imageUrl}
             onChange={(e) => setImageUrl(e.target.value)}
+            placeholder="例如:https://example.com/img.jpg"
           />
         </div>
-        <div>
-          <label>
-            <input
-              type="checkbox"
-              checked={isAnonymous}
-              onChange={(e) => setIsAnonymous(e.target.checked)}
-            />
-            匿名发布
-          </label>
-        </div>
         <button type="submit">发布</button>
       </form>
+
+      {message && <p className="success-text">{message}</p>}
+      {error && <p className="error-text">{error}</p>}
     </div>
   );
 };
 
-export default CreatePost;
\ No newline at end of file
+export default CreatePost;
diff --git a/src/pages/Forum/posts-create/CreatePostPage.jsx b/src/pages/Forum/posts-create/CreatePostPage.jsx
index ea2505c..28f1a20 100644
--- a/src/pages/Forum/posts-create/CreatePostPage.jsx
+++ b/src/pages/Forum/posts-create/CreatePostPage.jsx
@@ -1,11 +1,22 @@
-// src/pages/Forum/posts-create/CreatePostPage.jsx
 import React from 'react';
-import { useUserStore } from '../../store/user';
 import CreatePost from './CreatePost';
+import { useUser } from '../../../context/UserContext'; // 注意路径
+
 
 const CreatePostPage = () => {
-  const { user } = useUserStore(); // 拿到 user
-  return <CreatePost userId={user?.id} />;
+  const store = useUser?.();
+  const user = store?.user;
+
+  // 可以加个判断
+  if (!user) {
+    return <p>请先登录后再发帖。</p>;
+  }
+
+  return (
+    <div className="create-post-page">
+      <CreatePost userId={user.user_id} />
+    </div>
+  );
 };
 
 export default CreatePostPage;