blob: c57242a70a3d697839fa8d8777cc819f6424681e [file] [log] [blame]
223010095b28c672025-04-10 20:12:45 +08001import React, { useState } from 'react';
2import axios from 'axios';
3import Header from '../../components/Header'; // 导入 Header 组件
Krishyac0f7e9b2025-04-22 15:28:28 +08004import './PublishSeed.css'
223010095b28c672025-04-10 20:12:45 +08005
6const API_BASE = process.env.REACT_APP_API_BASE;
7
8const PublishSeed = () => {
9 const [title, setTitle] = useState('');
10 const [description, setDescription] = useState('');
11 const [tags, setTags] = useState([]);
12 const [category, setCategory] = useState('movie');
13 const [file, setFile] = useState(null);
14 const [imageUrl, setImageUrl] = useState('');
15 const [message, setMessage] = useState('');
16 const [isLoading, setIsLoading] = useState(false);
17
18 const handleTagsChange = (e) => {
19 setTags(e.target.value.split(',').map(tag => tag.trim()));
20 };
21
22 const handleFileChange = (e) => {
23 setFile(e.target.files[0]);
24 };
25
26 const handleSubmit = async (e) => {
27 e.preventDefault();
28 setIsLoading(true);
29 setMessage('');
30
31 const formData = new FormData();
32 formData.append('title', title);
33 formData.append('description', description);
34 formData.append('tags', JSON.stringify(tags)); // Tags as JSON array
35 formData.append('category', category);
36 formData.append('file', file);
37 formData.append('image_url', imageUrl);
38
39 try {
40 const response = await axios.post(`${API_BASE}/echo/seeds/upload`, formData, {
41 headers: {
42 'Content-Type': 'multipart/form-data',
43 },
44 });
45
46 if (response.data.status === 'success') {
47 setMessage('种子上传成功');
48 } else {
49 setMessage('上传失败,请稍后再试');
50 }
51 } catch (error) {
52 console.error(error);
53 setMessage('上传失败,发生了错误');
54 } finally {
55 setIsLoading(false);
56 }
57 };
58
59 return (
60 <div className="publish-seed-container">
61 <Header /> {/* 在这里插入导航栏 */}
Krishyac0f7e9b2025-04-22 15:28:28 +080062 <div className="pub-card">
223010095b28c672025-04-10 20:12:45 +080063 {message && <div className="message">{message}</div>}
64 <form onSubmit={handleSubmit} encType="multipart/form-data">
Krishyac0f7e9b2025-04-22 15:28:28 +080065 <div className="title-tag">
223010095b28c672025-04-10 20:12:45 +080066 <label>标题</label>
67 <input
68 type="text"
69 value={title}
70 onChange={(e) => setTitle(e.target.value)}
71 required
72 />
73 </div>
74
Krishyac0f7e9b2025-04-22 15:28:28 +080075 <div className="discription">
223010095b28c672025-04-10 20:12:45 +080076 <label>描述</label>
77 <textarea
78 value={description}
79 onChange={(e) => setDescription(e.target.value)}
80 required
81 />
82 </div>
83
Krishyac0f7e9b2025-04-22 15:28:28 +080084 <div className="title-tag">
223010095b28c672025-04-10 20:12:45 +080085 <label>标签 (逗号分隔)</label>
86 <input
87 type="text"
88 value={tags.join(', ')}
89 onChange={handleTagsChange}
90 placeholder="例如:科幻, 动作"
91 required
92 />
93 </div>
94
Krishyac0f7e9b2025-04-22 15:28:28 +080095 <div className="pub-categoty">
223010095b28c672025-04-10 20:12:45 +080096 <label>分类</label>
97 <select
98 value={category}
99 onChange={(e) => setCategory(e.target.value)}
100 required
101 >
102 <option value="movie">电影</option>
103 <option value="tv">电视剧</option>
104 <option value="music">音乐</option>
105 </select>
106 </div>
107
Krishyac0f7e9b2025-04-22 15:28:28 +0800108 <div className="seed-file">
223010095b28c672025-04-10 20:12:45 +0800109 <label>种子文件</label>
Krishyaf1d0ea82025-05-03 17:01:58 +0800110 <label className="seed-file-label">
111 点击选择文件
112 <input
113 type="file"
114 onChange={handleFileChange}
115 style={{ display: 'none' }}
116 />
117 </label>
223010095b28c672025-04-10 20:12:45 +0800118 </div>
119
120 <div className="form-group">
121 <label>封面图URL</label>
122 <input
123 type="url"
124 value={imageUrl}
125 onChange={(e) => setImageUrl(e.target.value)}
126 placeholder="例如:http://example.com/images/cover.jpg"
127 required
Krishyac0f7e9b2025-04-22 15:28:28 +0800128 style={{ padding: '1%',
129 width: '100%',
130 borderRadius: '6px',
131 border: '1px solid #e0c4a1',
132 backgroundColor: '#fff5f5',
133 color: '#5F4437',
134 fontSize: '1rem',
135 marginBottom: '2%'}}
223010095b28c672025-04-10 20:12:45 +0800136 />
137 </div>
138
Krishyac0f7e9b2025-04-22 15:28:28 +0800139 <div className="upload-button">
223010095b28c672025-04-10 20:12:45 +0800140 <button type="submit" disabled={isLoading}>
141 {isLoading ? '正在上传...' : '上传种子'}
142 </button>
143 </div>
144 </form>
Krishyac0f7e9b2025-04-22 15:28:28 +0800145 </div>
223010095b28c672025-04-10 20:12:45 +0800146 </div>
147 );
148};
149
150export default PublishSeed;