修复查看帖子、评论、回复评论、点赞、收藏,添加用户等级
Change-Id: Ida9590d7ccee08dcd787a36c7e5cb39a3e26cd0d
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;
+