blob: c2cdc76d10acceca107433668dd7ac4f46fe0026 [file] [log] [blame] [edit]
// // import React, { useState, useEffect } from 'react';
// // import axios from 'axios';
// // function UploadTorrent() {
// // const [title, setTitle] = useState('');
// // const [description, setDescription] = useState('');
// // const [categoryId, setCategoryId] = useState('');
// // const [dpi, setDpi] = useState(''); // 可选字段
// // const [caption, setCaption] = useState(''); // 可选字段
// // const [file, setFile] = useState(null);
// // const [categories, setCategories] = useState([]);
// // const [showSuccess, setShowSuccess] = useState(false);
// // useEffect(() => {
// // axios.get('http://localhost:8080/categories')
// // .then(res => setCategories(res.data))
// // .catch(err => console.error('加载分类失败', err));
// // }, []);
// // const handleSubmit = async (e) => {
// // e.preventDefault();
// // if (!file) {
// // alert('请选择一个 .torrent 文件');
// // return;
// // }
// // if (!categoryId) {
// // alert('请选择分类');
// // return;
// // }
// // const formData = new FormData();
// // formData.append('file', file);
// // formData.append('title', title);
// // formData.append('description', description);
// // formData.append('categoryId', categoryId);
// // if (dpi) formData.append('dpi', dpi); // 只有当 dpi 有值时才添加
// // if (caption) formData.append('caption', caption); // 只有当 caption 有值时才添加
// // try {
// // await axios.post('http://localhost:8080/torrent/upload', formData, {
// // headers: { 'Content-Type': 'multipart/form-data' },
// // responseType: 'blob', // 关键:指定响应类型为 blob
// // });
// // // 创建下载链接
// // const url = window.URL.createObjectURL(new Blob([response.data]));
// // const link = document.createElement('a');
// // link.href = url;
// // link.setAttribute('download', file.name); // 使用原文件名
// // document.body.appendChild(link);
// // link.click();
// // link.remove();
// // // 清空表单
// // setShowSuccess(true);
// // setTitle('');
// // setDescription('');
// // setCategoryId('');
// // setDpi('');
// // setCaption('');
// // setFile(null);
// // } catch (err) {
// // console.error('上传失败', err.response?.data || err.message);
// // alert(err.response?.data || '上传失败,请检查后端是否启动');
// // }
// // };
// // return (
// // <div className="max-w-xl mx-auto mt-10 p-6 bg-white shadow rounded">
// // <h2 className="text-2xl font-bold mb-4">上传种子</h2>
// // <form onSubmit={handleSubmit} className="space-y-4">
// // <input type="file" accept=".torrent" onChange={(e) => setFile(e.target.files[0])} />
// // <input
// // type="text"
// // placeholder="标题"
// // value={title}
// // onChange={(e) => setTitle(e.target.value)}
// // className="w-full p-2 border rounded"
// // required
// // />
// // <textarea
// // placeholder="描述"
// // value={description}
// // onChange={(e) => setDescription(e.target.value)}
// // className="w-full p-2 border rounded"
// // />
// // <select
// // value={categoryId}
// // onChange={(e) => setCategoryId(e.target.value)}
// // className="w-full p-2 border rounded"
// // required
// // >
// // <option value="">请选择分类</option>
// // {categories.map(cat => (
// // <option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</option>
// // ))}
// // </select>
// // <input
// // type="text"
// // placeholder="DPI(可选)"
// // value={dpi}
// // onChange={(e) => setDpi(e.target.value)}
// // className="w-full p-2 border rounded"
// // />
// // <input
// // type="text"
// // placeholder="字幕(可选)"
// // value={caption}
// // onChange={(e) => setCaption(e.target.value)}
// // className="w-full p-2 border rounded"
// // />
// // <button type="submit" className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
// // 上传
// // </button>
// // </form>
// // {showSuccess && (
// // <div className="mt-4 p-3 bg-green-100 text-green-800 border border-green-300 rounded">
// // 上传成功!
// // </div>
// // )}
// // </div>
// // );
// // }
// // export default UploadTorrent;
// import React, { useState, useEffect } from 'react';;
// import axios from 'axios';
// function UploadTorrent() {
// const [title, setTitle] = useState('');
// const [description, setDescription] = useState('');
// const [categoryId, setCategoryId] = useState('');
// const [dpi, setDpi] = useState('');
// const [caption, setCaption] = useState('');
// const [file, setFile] = useState(null);
// const [categories, setCategories] = useState([]);
// const [showSuccess, setShowSuccess] = useState(false);
// useEffect(() => {
// axios.get('http://localhost:8080/categories')
// .then(res => setCategories(res.data))
// .catch(err => console.error('加载分类失败', err));
// }, []);
// const handleSubmit = async (e) => {
// e.preventDefault();
// if (!file) {
// alert('请选择一个 .torrent 文件');
// return;
// }
// if (!categoryId) {
// alert('请选择分类');
// return;
// }
// const formData = new FormData();
// formData.append('file', file);
// formData.append('title', title);
// formData.append('description', description);
// formData.append('categoryId', categoryId);
// if (dpi) formData.append('dpi', dpi);
// if (caption) formData.append('caption', caption);
// try {
// // 发送上传请求
// const response = await axios.post('http://localhost:8080/torrent/upload', formData, {
// headers: { 'Content-Type': 'multipart/form-data' },
// responseType: 'blob', // 关键:指定响应类型为 blob
// });
// // 创建下载链接
// const url = window.URL.createObjectURL(new Blob([response.data]));
// const link = document.createElement('a');
// link.href = url;
// link.setAttribute('download', file.name); // 使用原文件名
// document.body.appendChild(link);
// link.click();
// link.remove();
// // 显示成功提示
// setShowSuccess(true);
// setTitle('');
// setDescription('');
// setCategoryId('');
// setDpi('');
// setCaption('');
// setFile(null);
// } catch (err) {
// console.error('上传失败', err.response?.data || err.message);
// alert(err.response?.data || '上传失败,请检查后端是否启动');
// }
// };
// return (
// <div className="max-w-xl mx-auto mt-10 p-6 bg-white shadow rounded">
// <h2 className="text-2xl font-bold mb-4">上传种子</h2>
// <form onSubmit={handleSubmit} className="space-y-4">
// <input type="file" accept=".torrent" onChange={(e) => setFile(e.target.files[0])} />
// <input
// type="text"
// placeholder="标题"
// value={title}
// onChange={(e) => setTitle(e.target.value)}
// className="w-full p-2 border rounded"
// required
// />
// <textarea
// placeholder="描述"
// value={description}
// onChange={(e) => setDescription(e.target.value)}
// className="w-full p-2 border rounded"
// />
// <select
// value={categoryId}
// onChange={(e) => setCategoryId(e.target.value)}
// className="w-full p-2 border rounded"
// required
// >
// <option value="">请选择分类</option>
// {categories.map(cat => (
// <option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</option>
// ))}
// </select>
// <input
// type="text"
// placeholder="DPI(可选)"
// value={dpi}
// onChange={(e) => setDpi(e.target.value)}
// className="w-full p-2 border rounded"
// />
// <input
// type="text"
// placeholder="字幕/说明(可选)"
// value={caption}
// onChange={(e) => setCaption(e.target.value)}
// className="w-full p-2 border rounded"
// />
// <button type="submit" className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
// 上传
// </button>
// </form>
// {showSuccess && (
// <div className="mt-4 p-3 bg-green-100 text-green-800 border border-green-300 rounded">
// 上传成功!
// </div>
// )}
// </div>
// );
// }
// export default UploadTorrent;
import React, { useState, useEffect } from 'react';
import axios from 'axios';
function UploadTorrent() {
const [title, setTitle] = useState('');
const [description, setDescription] = useState('');
const [categoryId, setCategoryId] = useState('');
const [file, setFile] = useState(null);
const [categories, setCategories] = useState([]);
const [showSuccess, setShowSuccess] = useState(false);
// 通用参数
const [dpi, setDpi] = useState('');
const [caption, setCaption] = useState('');
const [region, setRegion] = useState('');
const [year, setYear] = useState('');
const [genre, setGenre] = useState('');
const [format, setFormat] = useState('');
const [resolution, setResolution] = useState('');
// 特殊参数
const [codecFormat, setCodecFormat] = useState('');
const [platform, setPlatform] = useState('');
const [language, setLanguage] = useState('');
const [eventType, setEventType] = useState('');
const [source, setSource] = useState('');
const [style, setStyle] = useState('');
const [dataType, setdataType] = useState('');
const [isMainland, setIsMainland] = useState(false);
// 根据分类显示不同的表单字段
const [showMovieFields, setShowMovieFields] = useState(false);
const [showMusicFields, setShowMusicFields] = useState(false);
const [showGameFields, setShowGameFields] = useState(false);
const [showTvFields, setShowTvFields] = useState(false);
const [showAnimeFields, setShowAnimeFields] = useState(false);
const [showlearningFields, setShowlearningFields] = useState(false);
const [showsoftwareFields, setShowsoftwareFields] = useState(false);
const [showvarietyFields, setShowvarietyFields] = useState(false);
const [showsportsFields, setShowsportsFields] = useState(false);
const [showdocFields, setShowdocFields] = useState(false);
const [showotherFields, setShowotherFields] = useState(false);
// 其他分类字段...
// 编码格式选项
const codecFormats = [
{ value: 'H.264', label: 'H.264' },
{ value: 'H.265', label: 'H.265' },
{ value: 'AV1', label: 'AV1' },
{ value: 'VP9', label: 'VP9' },
{ value: 'VC1', label: 'VC1' },
{ value: 'X264', label: 'X264' },
];
const regions = [
{ value: '大陆', label: '大陆' },
{ value: '港台', label: '港台' },
{ value: '欧美', label: '欧美' },
{ value: '日韩', label: '日韩' },
{ value: '其他', label: '其他' },
];
const genres = [
{ value: '动作', label: '动作' },
{ value: '喜剧', label: '喜剧' },
{ value: '爱情', label: '爱情' },
{ value: '科幻', label: '科幻' },
{ value: '恐怖', label: '恐怖' },
{ value: '动作', label: '动作' },
{ value: '冒险', label: '冒险' },
{ value: '历史', label: '历史' },
{ value: '悬疑', label: '悬疑' },
{ value: '其他', label: '其他' },
];
const resolutions = [
{ value: '720p', label: '720p' },
{ value: '1080p', label: '1080p' },
{ value: '2K', label: '2K' },
{ value: '4K', label: '4K' },
{ value: '8K', label: '8K' },
{ value: '其他', label: '其他' },
];
const eventTypes = [
{ value: '足球', label: '足球' },
{ value: '篮球', label: '篮球' },
{ value: '网球', label: '网球' },
{ value: '乒乓球', label: '乒乓球' },
{ value: '羽毛球', label: '羽毛球' },
]
const styles = [
{ value: '大陆综艺', label: '大陆综艺' },
{ value: '日韩综艺', label: '日韩综艺' },
{ value: '欧美综艺', label: '欧美综艺' },
{ value: '其他', label: '其他' },
]
const platforms = [
{ value: 'PC', label: 'PC' },
{ value: 'PS5', label: 'PS5' },
{ value: 'Xbox', label: 'Xbox' },
{ value: 'Switch', label: 'Switch' },
{ value: '手机', label: '手机' },
{ value: '其他', label: '其他' },
]
const gamegenres = [
{ value: '角色扮演', label: '角色扮演' },
{ value: '射击', label: '射击' },
{ value: '冒险', label: '冒险' },
{ value: '策略', label: '策略' },
{ value: '体育', label: '体育' },
{ value: '桌面游戏', label: '桌面游戏'},
{ value: '其他', label: '其他' },
]
const dataTypes = [
{ value: '压缩包', label: '压缩包' },
{ value: '补丁', label: '补丁' },
{ value: '安装包', label: '安装包' },
{ value: 'nds', label: 'nds' },
{ value: '其他', label: '其他' },
]
const languages = [
{ value: '中文', label: '中文' },
{ value: '英文', label: '英文' },
{ value: '日文', label: '日文' },
{ value: '其他', label: '其他' },
]
const musicgenres = [
{ value: '专辑', label: '专辑' },
{ value: '单曲', label: '单曲' },
{ value: 'EP', label: 'EP' },
{ value: '现场', label: '现场' },
{ value: '其他', label: '其他' },
]
const musicstyles = [
{ value: '流行', label: '流行' },
{ value: '摇滚', label: '摇滚' },
{ value: '电子', label: '电子' },
{ value: '古典', label: '古典' },
{ value: '爵士', label: '爵士' },
{ value: '民谣', label: '民谣' },
{ value: '说唱', label: '说唱' },
{ value: '其他', label: '其他' },
]
const musicformats = [
{ value: 'MP3', label: 'MP3' },
{ value: 'FLAC', label: 'FLAC' },
{ value: 'WAV', label: 'WAV' },
{ value: 'AAC', label: 'AAC' },
{ value: 'OGG', label: 'OGG' },
{ value: '其他', label: '其他' },
]
const anigenres = [
{ value: '新番连载', label: '新番连载' },
{ value: '剧场版', label: '剧场版' },
{ value: 'OVA', label: 'OVA' },
{ value: '完结动漫', label: '完结动漫' },
{ value: '其他', label: '其他' },
]
const animeformats = [
{ value: 'ZIP', label: 'ZIP' },
{ value: 'RAR', label: 'RAR' },
{ value: '7Z', label: '7Z' },
{ value: 'MKV', label: 'MKV' },
{ value: 'MP4', label: 'MP4' },
{ value: '其他', label: '其他' },
]
const varietygenres = [
{ value: '真人秀', label: '真人秀' },
{ value: '选秀', label: '选秀' },
{ value: '访谈', label: '访谈' },
{ value: '游戏', label: '游戏' },
{ value: '音乐', label: '音乐' },
{ value: '其他', label: '其他' },
]
const sportsgenres = [
{ value: '足球', label: '足球' },
{ value: '篮球', label: '篮球' },
{ value: '网球', label: '网球' },
{ value: '乒乓球', label: '乒乓球' },
{ value: '羽毛球', label: '羽毛球' },
{ value: '其他', label: '其他' },
]
const softwaregenres = [
{ value: '系统软件', label: '系统软件' },
{ value: '应用软件', label: '应用软件' },
{ value: '游戏软件', label: '游戏软件' },
{ value: '驱动程序', label: '驱动程序' },
{ value: '办公软件', label: '办公软件' },
{ value: '其他', label: '其他' },
]
const softwareplatforms = [
{ value: 'Windows', label: 'Windows' },
{ value: 'Mac', label: 'Mac' },
{ value: 'Linux', label: 'Linux' },
{ value: 'Android', label: 'Android' },
{ value: 'iOS', label: 'iOS' },
{ value: '其他', label: '其他' },
]
const softwareformats = [
{ value: 'EXE', label: 'EXE' },
{ value: 'DMG', label: 'DMG' },
{ value: '光盘镜像', label: '光盘镜像' },
{ value: 'APK', label: 'APK' },
{ value: 'IPA', label: 'IPA' },
{ value: '其他', label: '其他' },
]
const learninggenres = [
{ value: '计算机', label: '计算机' },
{ value: '软件', label: '软件' },
{ value: '人文', label: '人文' },
{ value: '外语', label: '外语' },
{ value: '理工类', label: '理工类' },
{ value: '其他', label: '其他' },
]
const learningformats = [
{ value: 'PDF', label: 'PDF' },
{ value: 'EPUB', label: 'EPUB' },
{ value: '视频', label: '视频' },
{ value: '音频', label: '音频' },
{ value: 'PPT', label: 'PPT' },
{ value: '其他', label: '其他' },
]
const sourceTypes = [
{ value: 'CCTV', label: 'CCTV' },
{ value: '卫视', label: '卫视' },
{ value: '国家地理', label: '国家地理' },
{ value: 'BBC', label: 'BBC' },
{ value: 'Discovery', label: 'Discovery' },
{ value: '其他', label: '其他' },
]
const othergenres = [
{ value: '电子书', label: '电子书' },
{ value: '视频', label: '视频' },
{ value: 'MP3', label: 'MP3' },
{ value: '图片', label: '图片' },
{ value: '其他', label: '其他' },
]
useEffect(() => {
axios.get('http://localhost:8080/categories')
.then(res => setCategories(res.data))
.catch(err => console.error('加载分类失败', err));
}, []);
// 根据选择的分类显示不同的表单字段
useEffect(() => {
setShowMovieFields(categoryId === '1');
setShowMusicFields(categoryId === '3');
setShowGameFields(categoryId === '5');
setShowTvFields(categoryId === '2');
setShowAnimeFields(categoryId === '4');
setShowlearningFields(categoryId === '9');
setShowsoftwareFields(categoryId === '8');
setShowvarietyFields(categoryId === '6');
setShowsportsFields(categoryId === '7');
setShowdocFields(categoryId === '10');
setShowotherFields(categoryId === '11');
// 其他分类...
}, [categoryId]);
const handleSubmit = async (e) => {
e.preventDefault();
if (!file) {
alert('请选择一个 .torrent 文件');
return;
}
if (!categoryId) {
alert('请选择分类');
return;
}
const formData = new FormData();
formData.append('file', file);
formData.append('title', title);
formData.append('description', description);
formData.append('categoryId', categoryId);
// 通用参数
if (dpi) formData.append('dpi', dpi);
if (caption) formData.append('caption', caption);
if (region) formData.append('region', region);
if (year) formData.append('year', year);
if (genre) formData.append('genre', genre);
if (format) formData.append('format', format);
if (resolution) formData.append('resolution', resolution);
// 特殊参数
if (codecFormat) formData.append('codecFormat', codecFormat);
if (platform) formData.append('platform', platform);
if (language) formData.append('language', language);
if (eventType) formData.append('eventType', eventType);
if (source) formData.append('source', source);
if (style) formData.append('style', style);
if (dataType) formData.append('dataType', dataType);
formData.append('isMainland', isMainland.toString());
try {
const response = await axios.post('http://localhost:8080/torrent/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' },
responseType: 'blob',
});
// 创建下载链接
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', file.name);
document.body.appendChild(link);
link.click();
link.remove();
// 显示成功提示
setShowSuccess(true);
// 清空表单
setTitle('');
setDescription('');
setCategoryId('');
setFile(null);
// 清空其他字段...
} catch (err) {
console.error('上传失败', err.response?.data || err.message);
alert(err.response?.data || '上传失败,请检查后端是否启动');
}
};
return (
<div className="max-w-xl mx-auto mt-10 p-6 bg-white shadow rounded">
<h2 className="text-2xl font-bold mb-4">上传种子</h2>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label className="block mb-1">种子文件 (.torrent)</label>
<input
type="file"
accept=".torrent"
onChange={(e) => setFile(e.target.files[0])}
className="w-full p-2 border rounded"
required
/>
</div>
<div>
<label className="block mb-1">标题</label>
<input
type="text"
placeholder="标题"
value={title}
onChange={(e) => setTitle(e.target.value)}
className="w-full p-2 border rounded"
required
/>
</div>
<div>
<label className="block mb-1">描述</label>
<textarea
placeholder="描述"
value={description}
onChange={(e) => setDescription(e.target.value)}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label className="block mb-1">分类</label>
<select
value={categoryId}
onChange={(e) => setCategoryId(e.target.value)}
className="w-full p-2 border rounded"
required
>
<option value="">请选择分类</option>
{categories.map(cat => (
<option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</option>
))}
</select>
</div>
{/* <div>
<label className="block mb-1">DPI(可选)</label>
<input
type="text"
placeholder="DPI"
value={dpi}
onChange={(e) => setDpi(e.target.value)}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label className="block mb-1">字幕/说明(可选)</label>
<input
type="text"
placeholder="字幕/说明"
value={caption}
onChange={(e) => setCaption(e.target.value)}
className="w-full p-2 border rounded"
/>
</div> */}
{/* 电影相关字段 */}
{showMovieFields && (
<>
<div>
<label className="block mb-1">字幕/说明</label>
<input
type="text"
placeholder="字幕/说明"
value={caption}
onChange={(e) => setCaption(e.target.value)}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label className="block mb-1">地区</label>
<select
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择地区</option>
{regions.map((regions) => (
<option key={regions.value} value={regions.value}>
{regions.label}
</option>
))}
</select>
</div>
{/* <input
type="text"
placeholder="region"
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
/>
</div> */}
<div>
<label className="block mb-1">年份</label>
<input
type="text"
placeholder="年份"
value={year}
onChange={(e) => setYear(e.target.value)}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label className="block mb-1">类型</label>
{/* <input
type="text"
placeholder="类型"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{genres.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
</div>
{/* <div>
<label className="block mb-1">编码格式</label>
<input
type="text"
placeholder="如 H.264, H.265"
value={codecFormat}
onChange={(e) => setCodecFormat(e.target.value)}
className="w-full p-2 border rounded"
/>
</div> */}
<div>
<label className="block mb-1">编码格式</label>
<select
value={codecFormat}
onChange={(e) => setCodecFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择编码格式</option>
{codecFormats.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
</div>
<div>
<label className="block mb-1">分辨率</label>
<select
value={resolution}
onChange={(e) => setResolution(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择分辨率</option>
{resolutions.map((resolution) => (
<option key={resolution.value} value={resolution.value}>
{resolution.label}
</option>
))}
</select>
{/*
<input
type="text"
placeholder="如 1080p, 4K"
value={resolution}
onChange={(e) => setResolution(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/*剧集相关字段 */}
{showTvFields && (
<>
<div>
<label className="block mb-1">地区</label>
<select
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择地区</option>
{regions.map((regions) => (
<option key={regions.value} value={regions.value}>
{regions.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 中国, 美国"
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{resolutions.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{genres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="类型"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 游戏相关字段 */}
{showGameFields && (
<>
<div>
<label className="block mb-1">平台</label>
<select
value={platform}
onChange={(e) => setPlatform(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择平台</option>
{platforms.map((platform) => (
<option key={platform.value} value={platform.value}>
{platform.label}
</option>
))}
</select>
{/* <input
<input
type="text"
placeholder="如 PC, PS5"
value={platform}
onChange={(e) => setPlatform(e.target.value)}
className="w-full p-2 border rounded"
/>*/}
</div>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{gamegenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="类型"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">语言</label>
<select
value={language}
onChange={(e) => setLanguage(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择语言</option>
{languages.map((language) => (
<option key={language.value} value={language.value}>
{language.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 中文, 英文"
value={language}
onChange={(e) => setLanguage(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">数据类型</label>
<select
value={dataType}
onChange={(e) => setdataType(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择数据类型</option>
{dataTypes.map((dataType) => (
<option key={dataType.value} value={dataType.value}>
{dataType.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如压缩包,补丁"
value={dataType}
onChange={(e) => setdataType(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 综艺相关字段 */}
{showvarietyFields && (
<>
<div>
<label className="flex items-center">
<input
type="checkbox"
checked={isMainland}
onChange={(e) => setIsMainland(e.target.checked)}
className="mr-2"
/>
是否大陆综艺
</label>
</div>
<div>
<label className="block mb-1">类型</label>
<select
value={style}
onChange={(e) => setStyle(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{varietygenres.map((style) => (
<option key={style.value} value={style.value}>
{style.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="类型"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{resolutions.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 动漫相关字段 */}
{showAnimeFields && (
<>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{anigenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如治愈, 热血"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{animeformats.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">分辨率</label>
<select
value={resolution}
onChange={(e) => setResolution(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择分辨率</option>
{resolutions.map((resolution) => (
<option key={resolution.value} value={resolution.value}>
{resolution.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 1080p, 4K"
value={resolution}
onChange={(e) => setResolution(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 学习相关字段 */}
{showlearningFields && (
<>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{learninggenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 课程, 讲座"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{learningformats.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 软件相关字段 */}
{showsoftwareFields && (
<>
<div>
<label className="block mb-1">平台</label>
<select
value={platform}
onChange={(e) => setPlatform(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择平台</option>
{softwareplatforms.map((platform) => (
<option key={platform.value} value={platform.value}>
{platform.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 Windows, Mac"
value={platform}
onChange={(e) => setPlatform(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{softwaregenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 学习,办公"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{softwareformats.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 ZIP, EXE"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 体育相关字段 */}
{showsportsFields && (
<>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{sportsgenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 比赛, 训练"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{resolutions.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">赛事类型</label>
<select
value={eventType}
onChange={(e) => setEventType(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择赛事类型</option>
{eventTypes.map((eventType) => (
<option key={eventType.value} value={eventType.value}>
{eventType.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如足球、篮球"
value={eventType}
onChange={(e) => setEventType(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 纪录片相关字段 */}
{showdocFields && (
<>
<div>
<label className="block mb-1">年份</label>
<input
type="text"
placeholder="如 1999, 2020"
value={year}
onChange={(e) => setYear(e.target.value)}
className="w-full p-2 border rounded"
/>
</div>
<div>
<label className="block mb-1">视频源</label>
<select
value={source}
onChange={(e) => setSource(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择视频源</option>
{sourceTypes.map((source) => (
<option key={source.value} value={source.value}>
{source.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如BlibliBili, YouTube"
value={source}
onChange={(e) => setSource(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{resolutions.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如1080P, 4K"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/*音乐相关字段 */}
{showMusicFields && (
<>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{musicgenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/*
<input
type="text"
placeholder="如专辑、单曲"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">地区</label>
<select
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择地区</option>
{regions.map((regions) => (
<option key={regions.value} value={regions.value}>
{regions.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如 中国, 美国"
value={region}
onChange={(e) => setRegion(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">风格</label>
<select
value={style}
onChange={(e) => setStyle(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择风格</option>
{musicstyles.map((style) => (
<option key={style.value} value={style.value}>
{style.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如流行、摇滚"
value={style}
onChange={(e) => setStyle(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
<div>
<label className="block mb-1">格式</label>
<select
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择格式</option>
{musicformats.map((format) => (
<option key={format.value} value={format.value}>
{format.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如MP3, FLAC"
value={format}
onChange={(e) => setFormat(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 其他分类字段 */}
{showotherFields && (
<>
<div>
<label className="block mb-1">类型</label>
<select
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
>
<option value="">请选择类型</option>
{othergenres.map((genre) => (
<option key={genre.value} value={genre.value}>
{genre.label}
</option>
))}
</select>
{/* <input
type="text"
placeholder="如视频、音频"
value={genre}
onChange={(e) => setGenre(e.target.value)}
className="w-full p-2 border rounded"
/> */}
</div>
</>
)}
{/* 其他分类字段... */}
{/* 提交按钮 */}
<button
type="submit"
className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600"
>
上传
</button>
</form>
{showSuccess && (
<div className="mt-4 p-3 bg-green-100 text-green-800 border border-green-300 rounded">
上传成功!
</div>
)}
</div>
);
}
export default UploadTorrent;