blob: c6b80c467c9c3909f2f786ce3e7cab91cd87a695 [file] [log] [blame]
9563036699e95ae32025-06-02 21:42:11 +08001import React, { useState } from 'react';
2import './App.css';
3import './PublishPage.css';
223011330f9623f2025-06-06 00:22:05 +08004import { API_BASE_URL } from "./config";
9563036699e95ae32025-06-02 21:42:11 +08005
6const PublishPage = () => {
7 const [formData, setFormData] = useState({
8 type: '',
9 torrentFile: '',
10 title: '',
11 subtitle: ''
12 });
rhjc6a4ee02025-06-06 00:45:18 +080013 const [subType, setSubType] = useState('');
14
15 const typeOptions = {
16 '电影': ['大陆', '港台', '欧美', '日韩'],
17 '剧集': ['国产电视剧', '港剧', '欧美剧', '日韩剧'],
18 '音乐': ['古典音乐', '流行音乐', '摇滚', '电子音乐', '说唱'],
19 '动漫': ['国创', '日漫', '欧美动漫', '韩漫'],
20 '游戏': ['PC', '主机', '移动', '掌机', '视频'],
21 '体育': ['篮球', '足球', '羽毛球', '排球', '电竞'],
22 '资料': ['出版物', '学习教程', '素材模板', '演讲交流', '日常娱乐'],
23 };
9563036699e95ae32025-06-02 21:42:11 +080024
25 const handleChange = (e) => {
26 const { name, value } = e.target;
27 setFormData({ ...formData, [name]: value });
28 };
29
30 const handleFileChange = (e) => {
31 const file = e.target.files[0];
32 if (file && file.name.split('.').pop() !== 'torrent') {
33 alert('仅能上传.torrent类型文件');
34 e.target.value = null; // Clear the input
35 } else {
36 setFormData({ ...formData, torrentFile: file });
37 }
38 };
39
223011330f9623f2025-06-06 00:22:05 +080040 const handleSubmit = async (e) => {
9563036699e95ae32025-06-02 21:42:11 +080041 e.preventDefault();
223011330f9623f2025-06-06 00:22:05 +080042
43 console.log('Form Data Submitted:', formData);
44
rhjc6a4ee02025-06-06 00:45:18 +080045 // 假设userid和tag可以从表单或用户信息中获取,这里用示例数据
46 const userid = '550e8400-e29b-41d4-a716-446655440000';
47 const tag = formData.type ? formData.type : '高清';
48 if (!formData.torrentFile) {
49 alert('请上传.torrent文件');
50 return;
51 }
52 const data = new FormData();
53 data.append('userid', userid);
54 data.append('title', formData.title);
55 data.append('tag', subType);
56 data.append('file', formData.torrentFile);
57 data.append('subtitle', formData.subtitle);
58 // data.append('subtype', subType);
59 // console.log(data.get('tag'));
60
61 try {
223011330f9623f2025-06-06 00:22:05 +080062
rhjc6a4ee02025-06-06 00:45:18 +080063 const response = await fetch('http://192.168.5.9:8080/api/save-torrent', {
223011330f9623f2025-06-06 00:22:05 +080064
65 // console.log(data.get('userid'));
66 // console.log(data.get('title'));
67 const response = await fetch(`${API_BASE_URL}/api/save-torrent`, {
68
69 // console.log(data.get('userid'));
70 // console.log(data.get('title'));
71 const response = await fetch(`${API_BASE_URL}/api/save-torrent`, {
72
rhjc6a4ee02025-06-06 00:45:18 +080073 method: 'POST',
74 body: data,
75 });
76 if (response.ok) {
77 alert('上传成功!');
78 } else {
79 alert('上传失败');
80 }
81 } catch (err) {
82 alert('网络错误');
83 }
223011330f9623f2025-06-06 00:22:05 +080084
9563036699e95ae32025-06-02 21:42:11 +080085 };
86
87 return (
88 <div className="publish-page">
89 <h1 className="page-title">发布种子</h1>
90 <form onSubmit={handleSubmit} className="publish-form">
91 <div className="form-row">
92 <label htmlFor="type">类型</label>
rhjc6a4ee02025-06-06 00:45:18 +080093 <select name="type" id="type" value={formData.type} onChange={e => { handleChange(e); setSubType(''); }} required>
9563036699e95ae32025-06-02 21:42:11 +080094 <option value="">请选择类型</option>
95 <option value="电影">电影</option>
96 <option value="剧集">剧集</option>
97 <option value="音乐">音乐</option>
98 <option value="动漫">动漫</option>
99 <option value="游戏">游戏</option>
100 <option value="体育">体育</option>
101 <option value="资料">资料</option>
102 </select>
103 </div>
rhjc6a4ee02025-06-06 00:45:18 +0800104 {formData.type && typeOptions[formData.type] && (
105 <div className="form-row">
106 <label htmlFor="subtype">具体类型</label>
107 <select name="subtype" id="subtype" value={subType} onChange={e => setSubType(e.target.value)} required>
108 <option value="">请选择具体类型</option>
109 {typeOptions[formData.type].map(opt => (
110 <option key={opt} value={opt}>{opt}</option>
111 ))}
112 </select>
113 </div>
114 )}
9563036699e95ae32025-06-02 21:42:11 +0800115
116 <div className="form-row">
117 <label htmlFor="torrentFile">种子文件</label>
118 <input
119 type="file"
120 id="torrentFile"
121 name="torrentFile"
122 onChange={handleFileChange}
123 required
124 />
125 <span style={{ fontSize: '12px', color: '#666' }}>需上传.torrent类型文件</span>
126 </div>
127
128 <div className="form-row">
129 <label htmlFor="title">标题</label>
130 <input
131 type="text"
132 id="title"
133 name="title"
134 value={formData.title}
135 onChange={handleChange}
136 required
137 />
138 </div>
139
140 <div className="form-row">
ssq5067cb92025-06-05 11:44:23 +0000141 <label htmlFor="subtitle">种子简介</label>
9563036699e95ae32025-06-02 21:42:11 +0800142 <input
143 type="text"
144 id="subtitle"
145 name="subtitle"
146 value={formData.subtitle}
147 onChange={handleChange}
148 />
149 </div>
150
151 <div className="form-row submit-row">
152 <button type="submit" className="submit-button">提交</button>
153 </div>
154 </form>
155 </div>
156 );
157};
158
159export default PublishPage;