blob: 7ead11d80c700e05520cff5eac6b455df2863b4e [file] [log] [blame]
223010095b28c672025-04-10 20:12:45 +08001import React, { useState } from 'react';
2import axios from 'axios';
3import Header from '../../components/Header'; // 导入 Header 组件
4
5const API_BASE = process.env.REACT_APP_API_BASE;
6
7const PublishSeed = () => {
8 const [title, setTitle] = useState('');
9 const [description, setDescription] = useState('');
10 const [tags, setTags] = useState([]);
11 const [category, setCategory] = useState('movie');
12 const [file, setFile] = useState(null);
13 const [imageUrl, setImageUrl] = useState('');
14 const [message, setMessage] = useState('');
15 const [isLoading, setIsLoading] = useState(false);
16
17 const handleTagsChange = (e) => {
18 setTags(e.target.value.split(',').map(tag => tag.trim()));
19 };
20
21 const handleFileChange = (e) => {
22 setFile(e.target.files[0]);
23 };
24
25 const handleSubmit = async (e) => {
26 e.preventDefault();
27 setIsLoading(true);
28 setMessage('');
29
30 const formData = new FormData();
31 formData.append('title', title);
32 formData.append('description', description);
33 formData.append('tags', JSON.stringify(tags)); // Tags as JSON array
34 formData.append('category', category);
35 formData.append('file', file);
36 formData.append('image_url', imageUrl);
37
38 try {
39 const response = await axios.post(`${API_BASE}/echo/seeds/upload`, formData, {
40 headers: {
41 'Content-Type': 'multipart/form-data',
42 },
43 });
44
45 if (response.data.status === 'success') {
46 setMessage('种子上传成功');
47 } else {
48 setMessage('上传失败,请稍后再试');
49 }
50 } catch (error) {
51 console.error(error);
52 setMessage('上传失败,发生了错误');
53 } finally {
54 setIsLoading(false);
55 }
56 };
57
58 return (
59 <div className="publish-seed-container">
60 <Header /> {/* 在这里插入导航栏 */}
61 {message && <div className="message">{message}</div>}
62 <form onSubmit={handleSubmit} encType="multipart/form-data">
63 <div className="form-group">
64 <label>标题</label>
65 <input
66 type="text"
67 value={title}
68 onChange={(e) => setTitle(e.target.value)}
69 required
70 />
71 </div>
72
73 <div className="form-group">
74 <label>描述</label>
75 <textarea
76 value={description}
77 onChange={(e) => setDescription(e.target.value)}
78 required
79 />
80 </div>
81
82 <div className="form-group">
83 <label>标签 (逗号分隔)</label>
84 <input
85 type="text"
86 value={tags.join(', ')}
87 onChange={handleTagsChange}
88 placeholder="例如:科幻, 动作"
89 required
90 />
91 </div>
92
93 <div className="form-group">
94 <label>分类</label>
95 <select
96 value={category}
97 onChange={(e) => setCategory(e.target.value)}
98 required
99 >
100 <option value="movie">电影</option>
101 <option value="tv">电视剧</option>
102 <option value="music">音乐</option>
103 </select>
104 </div>
105
106 <div className="form-group">
107 <label>种子文件</label>
108 <input
109 type="file"
110 onChange={handleFileChange}
111 required
112 />
113 </div>
114
115 <div className="form-group">
116 <label>封面图URL</label>
117 <input
118 type="url"
119 value={imageUrl}
120 onChange={(e) => setImageUrl(e.target.value)}
121 placeholder="例如:http://example.com/images/cover.jpg"
122 required
123 />
124 </div>
125
126 <div className="form-group">
127 <button type="submit" disabled={isLoading}>
128 {isLoading ? '正在上传...' : '上传种子'}
129 </button>
130 </div>
131 </form>
132 </div>
133 );
134};
135
136export default PublishSeed;