blob: a1a0e8f3c2c822f48e84fbcc89ec021718181bcf [file] [log] [blame]
9563036699e95ae32025-06-02 21:42:11 +08001import React, { useState } from 'react';
2import './App.css';
3import './PublishPage.css';
4
5const PublishPage = () => {
6 const [formData, setFormData] = useState({
7 type: '',
8 torrentFile: '',
9 title: '',
10 subtitle: ''
11 });
kjWei53b79ae2025-06-05 09:18:35 +000012 const [subType, setSubType] = useState('');
13
14 const typeOptions = {
15 '电影': ['大陆', '港台', '欧美', '日韩'],
16 '剧集': ['国产电视剧', '港剧', '欧美剧', '日韩剧'],
17 '音乐': ['古典音乐', '流行音乐', '摇滚', '电子音乐', '说唱'],
18 '动漫': ['国创', '日漫', '欧美动漫', '韩漫'],
19 '游戏': ['PC', '主机', '移动', '掌机', '视频'],
20 '体育': ['篮球', '足球', '羽毛球', '排球', '电竞'],
21 '资料': ['出版物', '学习教程', '素材模板', '演讲交流', '日常娱乐'],
22 };
9563036699e95ae32025-06-02 21:42:11 +080023
24 const handleChange = (e) => {
25 const { name, value } = e.target;
26 setFormData({ ...formData, [name]: value });
27 };
28
29 const handleFileChange = (e) => {
30 const file = e.target.files[0];
31 if (file && file.name.split('.').pop() !== 'torrent') {
32 alert('仅能上传.torrent类型文件');
33 e.target.value = null; // Clear the input
34 } else {
35 setFormData({ ...formData, torrentFile: file });
36 }
37 };
38
956303669fa908b12025-06-03 13:42:32 +080039 const handleSubmit = async (e) => {
9563036699e95ae32025-06-02 21:42:11 +080040 e.preventDefault();
956303669fa908b12025-06-03 13:42:32 +080041 // 假设userid和tag可以从表单或用户信息中获取,这里用示例数据
kjWei53b79ae2025-06-05 09:18:35 +000042 const userid = '550e8400-e29b-41d4-a716-446655440000';
956303669fa908b12025-06-03 13:42:32 +080043 const tag = formData.type ? formData.type : '高清';
44 if (!formData.torrentFile) {
45 alert('请上传.torrent文件');
46 return;
47 }
48 const data = new FormData();
49 data.append('userid', userid);
50 data.append('title', formData.title);
kjWei53b79ae2025-06-05 09:18:35 +000051 data.append('tag', subType);
956303669fa908b12025-06-03 13:42:32 +080052 data.append('file', formData.torrentFile);
kjWei53b79ae2025-06-05 09:18:35 +000053 data.append('subtitle', formData.subtitle);
54 // data.append('subtype', subType);
55 // console.log(data.get('tag'));
956303669fa908b12025-06-03 13:42:32 +080056
57 try {
58 const response = await fetch('http://192.168.5.9:8080/api/save-torrent', {
59 method: 'POST',
60 body: data,
61 });
62 if (response.ok) {
63 alert('上传成功!');
64 } else {
65 alert('上传失败');
66 }
67 } catch (err) {
68 alert('网络错误');
69 }
9563036699e95ae32025-06-02 21:42:11 +080070 };
71
72 return (
73 <div className="publish-page">
74 <h1 className="page-title">发布种子</h1>
75 <form onSubmit={handleSubmit} className="publish-form">
76 <div className="form-row">
77 <label htmlFor="type">类型</label>
kjWei53b79ae2025-06-05 09:18:35 +000078 <select name="type" id="type" value={formData.type} onChange={e => { handleChange(e); setSubType(''); }} required>
9563036699e95ae32025-06-02 21:42:11 +080079 <option value="">请选择类型</option>
80 <option value="电影">电影</option>
81 <option value="剧集">剧集</option>
82 <option value="音乐">音乐</option>
83 <option value="动漫">动漫</option>
84 <option value="游戏">游戏</option>
85 <option value="体育">体育</option>
86 <option value="资料">资料</option>
87 </select>
88 </div>
kjWei53b79ae2025-06-05 09:18:35 +000089 {formData.type && typeOptions[formData.type] && (
90 <div className="form-row">
91 <label htmlFor="subtype">具体类型</label>
92 <select name="subtype" id="subtype" value={subType} onChange={e => setSubType(e.target.value)} required>
93 <option value="">请选择具体类型</option>
94 {typeOptions[formData.type].map(opt => (
95 <option key={opt} value={opt}>{opt}</option>
96 ))}
97 </select>
98 </div>
99 )}
9563036699e95ae32025-06-02 21:42:11 +0800100
101 <div className="form-row">
102 <label htmlFor="torrentFile">种子文件</label>
103 <input
104 type="file"
105 id="torrentFile"
106 name="torrentFile"
107 onChange={handleFileChange}
108 required
109 />
110 <span style={{ fontSize: '12px', color: '#666' }}>需上传.torrent类型文件</span>
111 </div>
112
113 <div className="form-row">
114 <label htmlFor="title">标题</label>
115 <input
116 type="text"
117 id="title"
118 name="title"
119 value={formData.title}
120 onChange={handleChange}
121 required
122 />
123 </div>
124
125 <div className="form-row">
126 <label htmlFor="subtitle">副标题</label>
127 <input
128 type="text"
129 id="subtitle"
130 name="subtitle"
131 value={formData.subtitle}
132 onChange={handleChange}
133 />
134 </div>
135
136 <div className="form-row submit-row">
137 <button type="submit" className="submit-button">提交</button>
138 </div>
139 </form>
140 </div>
141 );
142};
143
144export default PublishPage;