blob: e38c29a1daeff5adf4c3cb7215179824cd9de093 [file] [log] [blame]
22301009237217b2025-04-20 15:15:25 +08001// // src/pages/Forum/CreatePost.jsx
2// import React, { useState } from 'react';
3// import axios from 'axios';
4
5// const API_BASE = process.env.REACT_APP_API_BASE;
6
7// const CreatePost = ({ userId }) => {
8// const [title, setTitle] = useState('');
9// const [content, setContent] = useState('');
10// const [imgUrl, setImageUrl] = useState('');
11// const [isAnonymous, setIsAnonymous] = useState(false);
12
13// const handleSubmit = async (e) => {
14// e.preventDefault();
15
16// try {
17// const postData = {
18// title,
19// postContent: content,
20// postType: isAnonymous,
21// };
22
23// if (imgUrl.trim()) {
24// postData.imgUrl = imgUrl;
25// }
26
27// const response = await axios.post(
28// `${API_BASE}/echo/forum/posts/${userId}/createPost`,
29// postData
30// );
31
32
33// if (response.status === 201) {
34// alert('帖子创建成功!');
35// setTitle('');
36// setContent('');
37// setImageUrl('');
38// setIsAnonymous(false);
39// }
40// } catch (error) {
41// console.error('帖子创建失败:', error.response?.data || error.message);
42// alert('创建失败,请重试');
43// }
44// };
45
46// return (
47// <div className="create-post">
48// <h2>创建新帖子</h2>
49// <form onSubmit={handleSubmit}>
50// <div>
51// <label>标题:</label>
52// <input
53// type="text"
54// value={title}
55// onChange={(e) => setTitle(e.target.value)}
56// required
57// />
58// </div>
59// <div>
60// <label>内容:</label>
61// <textarea
62// value={content}
63// onChange={(e) => setContent(e.target.value)}
64// required
65// />
66// </div>
67// <div>
68// <label>图片 URL(可选):</label>
69// <input
70// type="text"
71// value={imgUrl}
72// onChange={(e) => setImageUrl(e.target.value)}
73// />
74// </div>
75// <div>
76// <label>
77// <input
78// type="checkbox"
79// checked={isAnonymous}
80// onChange={(e) => setIsAnonymous(e.target.checked)}
81// />
82// 匿名发布
83// </label>
84// </div>
85// <button type="submit">发布</button>
86// </form>
87// </div>
88// );
89// };
90
91// export default CreatePost;
92
Krishyae71688a2025-04-10 21:25:17 +080093import React, { useState } from 'react';
94import axios from 'axios';
22301009237217b2025-04-20 15:15:25 +080095import './CreatePost.css'; // 如果你打算加样式
Krishyae71688a2025-04-10 21:25:17 +080096
Krishya7ec1dd02025-04-19 15:29:03 +080097const API_BASE = process.env.REACT_APP_API_BASE;
98
Krishyae71688a2025-04-10 21:25:17 +080099const CreatePost = ({ userId }) => {
100 const [title, setTitle] = useState('');
101 const [content, setContent] = useState('');
22301009237217b2025-04-20 15:15:25 +0800102 const [imageUrl, setImageUrl] = useState('');
103 const [message, setMessage] = useState('');
104 const [error, setError] = useState('');
Krishyae71688a2025-04-10 21:25:17 +0800105
106 const handleSubmit = async (e) => {
107 e.preventDefault();
22301009237217b2025-04-20 15:15:25 +0800108 setMessage('');
109 setError('');
110
111 if (!title.trim() || !content.trim()) {
112 setError('标题和内容不能为空');
113 return;
114 }
Krishyae71688a2025-04-10 21:25:17 +0800115
116 try {
22301009237217b2025-04-20 15:15:25 +0800117 const res = await axios.post(`${API_BASE}/echo/forum/posts/${userId}/createPost`, {
Krishyae71688a2025-04-10 21:25:17 +0800118 title,
22301009237217b2025-04-20 15:15:25 +0800119 post_content: content,
120 image_url: imageUrl
121 });
Krishyae71688a2025-04-10 21:25:17 +0800122
22301009237217b2025-04-20 15:15:25 +0800123 setMessage(`发帖成功,帖子ID:${res.data.post_id}`);
124 setTitle('');
125 setContent('');
126 setImageUrl('');
127 } catch (err) {
128 console.error(err);
129 setError(err.response?.data?.error || '发帖失败,请稍后重试');
130 }
Krishyae71688a2025-04-10 21:25:17 +0800131 };
132
133 return (
22301009237217b2025-04-20 15:15:25 +0800134 <div className="create-post-container">
135 <h2>发表新帖子</h2>
136 <form onSubmit={handleSubmit} className="create-post-form">
137 <div className="form-group">
Krishyae71688a2025-04-10 21:25:17 +0800138 <label>标题:</label>
139 <input
140 type="text"
141 value={title}
142 onChange={(e) => setTitle(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800143 placeholder="输入帖子标题"
Krishyae71688a2025-04-10 21:25:17 +0800144 />
145 </div>
22301009237217b2025-04-20 15:15:25 +0800146 <div className="form-group">
Krishyae71688a2025-04-10 21:25:17 +0800147 <label>内容:</label>
148 <textarea
149 value={content}
150 onChange={(e) => setContent(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800151 placeholder="输入帖子内容"
Krishyae71688a2025-04-10 21:25:17 +0800152 />
153 </div>
22301009237217b2025-04-20 15:15:25 +0800154 <div className="form-group">
155 <label>图片链接(可选):</label>
Krishyae71688a2025-04-10 21:25:17 +0800156 <input
157 type="text"
22301009237217b2025-04-20 15:15:25 +0800158 value={imageUrl}
Krishyae71688a2025-04-10 21:25:17 +0800159 onChange={(e) => setImageUrl(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800160 placeholder="例如:https://example.com/img.jpg"
Krishyae71688a2025-04-10 21:25:17 +0800161 />
162 </div>
163 <button type="submit">发布</button>
164 </form>
22301009237217b2025-04-20 15:15:25 +0800165
166 {message && <p className="success-text">{message}</p>}
167 {error && <p className="error-text">{error}</p>}
Krishyae71688a2025-04-10 21:25:17 +0800168 </div>
169 );
170};
171
22301009237217b2025-04-20 15:15:25 +0800172export default CreatePost;