兴趣小组、好友动态
Change-Id: I7aa713600dea31eb2cd5b32ecc4e257b2bbd8be1
diff --git a/src/pages/InterestGroup/CreatePostForm.jsx b/src/pages/InterestGroup/CreatePostForm.jsx
index 6848b54..ce80a0a 100644
--- a/src/pages/InterestGroup/CreatePostForm.jsx
+++ b/src/pages/InterestGroup/CreatePostForm.jsx
@@ -1,29 +1,218 @@
-import React, { useState } from 'react';
+// import React, { useState } from 'react';
+// import { useGroupStore } from '../../context/useGroupStore';
+
+// const CreatePostForm = ({ groupId, onClose, onPostCreated }) => {
+// const { userId, handleCreatePost } = useGroupStore();
+// const [title, setTitle] = useState('');
+// const [content, setContent] = useState('');
+// const [images, setImages] = useState([]);
+// const [loading, setLoading] = useState(false);
+// const [error, setError] = useState('');
+// const [formError, setFormError] = useState({});
+
+// // 表单验证
+// const validateForm = () => {
+// const errors = {};
+// let isValid = true;
+
+// if (!title.trim()) {
+// errors.title = '请输入帖子标题';
+// isValid = false;
+// }
+
+// if (!content.trim()) {
+// errors.content = '请输入帖子内容';
+// isValid = false;
+// }
+
+// setFormError(errors);
+// return isValid;
+// };
+
+// const handleSubmit = async (e) => {
+// e.preventDefault();
+
+// // 先进行表单验证
+// if (!validateForm()) {
+// return;
+// }
+
+// console.log('点击发布,准备发送请求');
+// setLoading(true);
+// setError('');
+
+// try {
+// // 检查必要条件
+// if (!groupId) {
+// throw new Error('小组ID缺失');
+// }
+
+// if (!userId) {
+// throw new Error('用户ID缺失,请先登录');
+// }
+
+// // 打印关键变量进行调试
+// console.log('准备发布帖子:', {
+// groupId,
+// userId,
+// title,
+// content,
+// imagesCount: images.length
+// });
+
+// // 调用创建帖子的方法
+// const success = await handleCreatePost(groupId, userId, content, title, images);
+
+// if (success) {
+// alert('帖子发布成功');
+// onPostCreated(); // 触发刷新
+// onClose(); // 关闭弹窗
+// } else {
+// setError('帖子发布失败,请重试');
+// }
+// } catch (error) {
+// console.error('发布帖子错误:', error);
+// setError(error.message || '帖子发布失败');
+// } finally {
+// setLoading(false);
+// }
+// };
+
+// return (
+// <div className="create-post-form">
+// <h4>发布新帖子</h4>
+
+// <div className="form-group">
+// <input
+// type="text"
+// placeholder="帖子标题"
+// value={title}
+// onChange={(e) => setTitle(e.target.value)}
+// required
+// />
+// {formError.title && <p className="error-message">{formError.title}</p>}
+// </div>
+
+// <div className="form-group">
+// <textarea
+// placeholder="帖子内容"
+// value={content}
+// onChange={(e) => setContent(e.target.value)}
+// required
+// />
+// {formError.content && <p className="error-message">{formError.content}</p>}
+// </div>
+
+// <div className="form-group">
+// <input
+// type="file"
+// multiple
+// onChange={(e) => setImages(e.target.files)}
+// />
+// </div>
+
+// {error && <p className="error-message">{error}</p>}
+
+// <div className="button-group">
+// <button onClick={handleSubmit} disabled={loading}>
+// {loading ? '发布中...' : '发布'}
+// </button>
+// <button onClick={onClose} disabled={loading}>
+// 取消
+// </button>
+// </div>
+// </div>
+// );
+// };
+
+// export default CreatePostForm;
+
+import React, { useState, useEffect } from 'react';
+import { useUser } from '../../context/UserContext';
import { useGroupStore } from '../../context/useGroupStore';
-const CreatePostForm = ({ groupId, onClose }) => {
- const { userId, handleCreatePost } = useGroupStore();
+const CreatePostForm = ({ groupId, onClose, onPostCreated }) => {
+ const { user, loading: userLoading } = useUser();
+ const { handleCreatePost } = useGroupStore();
+
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const [images, setImages] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
+ const [formError, setFormError] = useState({});
+
+ // 处理用户状态加载中或未登录的情况
+ if (userLoading) {
+ return <div className="create-post-form loading">加载用户信息...</div>;
+ }
+
+ if (!user) {
+ return (
+ <div className="create-post-form">
+ <div className="error-message">请先登录以发布帖子</div>
+ <button className="close-btn" onClick={onClose}>
+ 关闭
+ </button>
+ </div>
+ );
+ }
+
+ // 表单验证
+ const validateForm = () => {
+ const errors = {};
+ let isValid = true;
+
+ if (!title.trim()) {
+ errors.title = '请输入帖子标题';
+ isValid = false;
+ }
+
+ if (!content.trim()) {
+ errors.content = '请输入帖子内容';
+ isValid = false;
+ }
+
+ setFormError(errors);
+ return isValid;
+ };
const handleSubmit = async (e) => {
e.preventDefault();
+
+ if (!validateForm()) {
+ return;
+ }
+
+ console.log('点击发布,准备发送请求');
setLoading(true);
setError('');
try {
- const success = await handleCreatePost(groupId, userId, content, title, images);
+ if (!groupId) {
+ throw new Error('小组ID缺失');
+ }
+
+ console.log('准备发布帖子:', {
+ groupId,
+ userId: user.userId,
+ title,
+ content,
+ imagesCount: images.length
+ });
+
+ // 调用创建帖子方法,不再传递 userId 参数
+ const success = await handleCreatePost(groupId, content, title, images);
if (success) {
alert('帖子发布成功');
+ onPostCreated();
onClose();
} else {
- setError('帖子发布失败');
+ setError('帖子发布失败,请重试');
}
} catch (error) {
+ console.error('发布帖子错误:', error);
setError(error.message || '帖子发布失败');
} finally {
setLoading(false);
@@ -33,32 +222,44 @@
return (
<div className="create-post-form">
<h4>发布新帖子</h4>
- <input
- type="text"
- placeholder="帖子标题"
- value={title}
- onChange={(e) => setTitle(e.target.value)}
- required
- />
- <textarea
- placeholder="帖子内容"
- value={content}
- onChange={(e) => setContent(e.target.value)}
- required
- />
- <input
- type="file"
- multiple
- onChange={(e) => setImages(e.target.files)}
- />
- {error && <p className="error">{error}</p>}
+ <div className="form-group">
+ <input
+ type="text"
+ placeholder="帖子标题"
+ value={title}
+ onChange={(e) => setTitle(e.target.value)}
+ required
+ />
+ {formError.title && <div className="error-message">{formError.title}</div>}
+ </div>
+
+ <div className="form-group">
+ <textarea
+ placeholder="帖子内容"
+ value={content}
+ onChange={(e) => setContent(e.target.value)}
+ required
+ />
+ {formError.content && <div className="error-message">{formError.content}</div>}
+ </div>
+
+ <div className="form-group">
+ <label>上传图片:</label>
+ <input
+ type="file"
+ multiple
+ onChange={(e) => setImages(e.target.files)}
+ />
+ </div>
+
+ {error && <div className="error-message">{error}</div>}
<div className="button-group">
- <button onClick={handleSubmit} disabled={loading}>
+ <button className="submit-btn" onClick={handleSubmit} disabled={loading}>
{loading ? '发布中...' : '发布'}
</button>
- <button onClick={onClose} disabled={loading}>
+ <button className="cancel-btn" onClick={onClose} disabled={loading}>
取消
</button>
</div>