blob: b8e8c2a57703d37c736d314352265dec6e700247 [file] [log] [blame]
22301009237217b2025-04-20 15:15:25 +08001// import React, { useState } from 'react';
2// import axios from 'axios';
Krishya57cc17b2025-05-26 16:43:34 +08003// import './CreatePost.css'; // 如果你打算加样式
22301009237217b2025-04-20 15:15:25 +08004
5// const API_BASE = process.env.REACT_APP_API_BASE;
6
Krishya57cc17b2025-05-26 16:43:34 +08007// const CreatePost = ({ user_id }) => {
22301009237217b2025-04-20 15:15:25 +08008// const [title, setTitle] = useState('');
9// const [content, setContent] = useState('');
Krishya57cc17b2025-05-26 16:43:34 +080010// const [imageUrl, setImageUrl] = useState('');
11// const [message, setMessage] = useState('');
12// const [error, setError] = useState('');
22301009237217b2025-04-20 15:15:25 +080013
14// const handleSubmit = async (e) => {
15// e.preventDefault();
Krishya57cc17b2025-05-26 16:43:34 +080016// setMessage('');
17// setError('');
18
19// if (!title.trim() || !content.trim()) {
20// setError('标题和内容不能为空');
21// return;
22// }
22301009237217b2025-04-20 15:15:25 +080023
24// try {
Krishya57cc17b2025-05-26 16:43:34 +080025// const res = await axios.post(`${API_BASE}/echo/forum/posts/${user_id}/createPost`, {
22301009237217b2025-04-20 15:15:25 +080026// title,
Krishya57cc17b2025-05-26 16:43:34 +080027// post_content: content,
28// image_url: imageUrl
29// });
22301009237217b2025-04-20 15:15:25 +080030
Krishya57cc17b2025-05-26 16:43:34 +080031// setMessage(`发帖成功,帖子ID:${res.data.post_id}`);
32// setTitle('');
33// setContent('');
34// setImageUrl('');
35// } catch (err) {
36// console.error(err);
37// setError(err.response?.data?.error || '发帖失败,请稍后重试');
38// }
22301009237217b2025-04-20 15:15:25 +080039// };
40
41// return (
Krishya57cc17b2025-05-26 16:43:34 +080042// <div className="create-post-container">
43// <h2>发表新帖子</h2>
44// <form onSubmit={handleSubmit} className="create-post-form">
45// <div className="form-group">
22301009237217b2025-04-20 15:15:25 +080046// <label>标题:</label>
47// <input
48// type="text"
49// value={title}
50// onChange={(e) => setTitle(e.target.value)}
Krishya57cc17b2025-05-26 16:43:34 +080051// placeholder="输入帖子标题"
22301009237217b2025-04-20 15:15:25 +080052// />
53// </div>
Krishya57cc17b2025-05-26 16:43:34 +080054// <div className="form-group">
22301009237217b2025-04-20 15:15:25 +080055// <label>内容:</label>
56// <textarea
57// value={content}
58// onChange={(e) => setContent(e.target.value)}
Krishya57cc17b2025-05-26 16:43:34 +080059// placeholder="输入帖子内容"
22301009237217b2025-04-20 15:15:25 +080060// />
61// </div>
Krishya57cc17b2025-05-26 16:43:34 +080062// <div className="form-group">
63// <label>图片链接(可选):</label>
22301009237217b2025-04-20 15:15:25 +080064// <input
65// type="text"
Krishya57cc17b2025-05-26 16:43:34 +080066// value={imageUrl}
22301009237217b2025-04-20 15:15:25 +080067// onChange={(e) => setImageUrl(e.target.value)}
Krishya57cc17b2025-05-26 16:43:34 +080068// placeholder="例如:https://example.com/img.jpg"
22301009237217b2025-04-20 15:15:25 +080069// />
70// </div>
22301009237217b2025-04-20 15:15:25 +080071// <button type="submit">发布</button>
72// </form>
Krishya57cc17b2025-05-26 16:43:34 +080073
74// {message && <p className="success-text">{message}</p>}
75// {error && <p className="error-text">{error}</p>}
22301009237217b2025-04-20 15:15:25 +080076// </div>
77// );
78// };
79
80// export default CreatePost;
81
Krishyae71688a2025-04-10 21:25:17 +080082import React, { useState } from 'react';
83import axios from 'axios';
22301009237217b2025-04-20 15:15:25 +080084import './CreatePost.css'; // 如果你打算加样式
Krishyae71688a2025-04-10 21:25:17 +080085
Krishya7ec1dd02025-04-19 15:29:03 +080086const API_BASE = process.env.REACT_APP_API_BASE;
87
Krishya57cc17b2025-05-26 16:43:34 +080088const CreatePost = ({ user_id }) => {
Krishyae71688a2025-04-10 21:25:17 +080089 const [title, setTitle] = useState('');
90 const [content, setContent] = useState('');
22301009237217b2025-04-20 15:15:25 +080091 const [imageUrl, setImageUrl] = useState('');
92 const [message, setMessage] = useState('');
93 const [error, setError] = useState('');
Krishyae71688a2025-04-10 21:25:17 +080094
95 const handleSubmit = async (e) => {
96 e.preventDefault();
22301009237217b2025-04-20 15:15:25 +080097 setMessage('');
98 setError('');
99
100 if (!title.trim() || !content.trim()) {
101 setError('标题和内容不能为空');
102 return;
103 }
Krishyae71688a2025-04-10 21:25:17 +0800104
105 try {
Krishya57cc17b2025-05-26 16:43:34 +0800106 const res = await axios.post(`${API_BASE}/echo/forum/posts/${user_id}/createPost`, {
Krishyae71688a2025-04-10 21:25:17 +0800107 title,
22301009237217b2025-04-20 15:15:25 +0800108 post_content: content,
109 image_url: imageUrl
110 });
Krishyae71688a2025-04-10 21:25:17 +0800111
22301009237217b2025-04-20 15:15:25 +0800112 setMessage(`发帖成功,帖子ID:${res.data.post_id}`);
113 setTitle('');
114 setContent('');
115 setImageUrl('');
116 } catch (err) {
117 console.error(err);
118 setError(err.response?.data?.error || '发帖失败,请稍后重试');
119 }
Krishyae71688a2025-04-10 21:25:17 +0800120 };
121
122 return (
22301009237217b2025-04-20 15:15:25 +0800123 <div className="create-post-container">
124 <h2>发表新帖子</h2>
125 <form onSubmit={handleSubmit} className="create-post-form">
126 <div className="form-group">
Krishya57cc17b2025-05-26 16:43:34 +0800127 {/* 这里加上htmlFor,并给input加id */}
128 <label htmlFor="title">标题:</label>
Krishyae71688a2025-04-10 21:25:17 +0800129 <input
Krishya57cc17b2025-05-26 16:43:34 +0800130 id="title" // 加id
Krishyae71688a2025-04-10 21:25:17 +0800131 type="text"
132 value={title}
133 onChange={(e) => setTitle(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800134 placeholder="输入帖子标题"
Krishyae71688a2025-04-10 21:25:17 +0800135 />
136 </div>
22301009237217b2025-04-20 15:15:25 +0800137 <div className="form-group">
Krishya57cc17b2025-05-26 16:43:34 +0800138 {/* 同理,内容 */}
139 <label htmlFor="content">内容:</label>
Krishyae71688a2025-04-10 21:25:17 +0800140 <textarea
Krishya57cc17b2025-05-26 16:43:34 +0800141 id="content" // 加id
Krishyae71688a2025-04-10 21:25:17 +0800142 value={content}
143 onChange={(e) => setContent(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800144 placeholder="输入帖子内容"
Krishyae71688a2025-04-10 21:25:17 +0800145 />
146 </div>
22301009237217b2025-04-20 15:15:25 +0800147 <div className="form-group">
Krishya57cc17b2025-05-26 16:43:34 +0800148 {/* 图片链接 */}
149 <label htmlFor="imageUrl">图片链接(可选):</label>
Krishyae71688a2025-04-10 21:25:17 +0800150 <input
Krishya57cc17b2025-05-26 16:43:34 +0800151 id="imageUrl" // 加id
Krishyae71688a2025-04-10 21:25:17 +0800152 type="text"
22301009237217b2025-04-20 15:15:25 +0800153 value={imageUrl}
Krishyae71688a2025-04-10 21:25:17 +0800154 onChange={(e) => setImageUrl(e.target.value)}
22301009237217b2025-04-20 15:15:25 +0800155 placeholder="例如:https://example.com/img.jpg"
Krishyae71688a2025-04-10 21:25:17 +0800156 />
157 </div>
158 <button type="submit">发布</button>
159 </form>
22301009237217b2025-04-20 15:15:25 +0800160
161 {message && <p className="success-text">{message}</p>}
162 {error && <p className="error-text">{error}</p>}
Krishyae71688a2025-04-10 21:25:17 +0800163 </div>
164 );
165};
166
22301009237217b2025-04-20 15:15:25 +0800167export default CreatePost;