修复帖子点赞和收藏功能
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;