上传种子以及接管求助帖

Change-Id: Icba99400a2dc4f706c9e184b16fc47cde5ebf12a
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
new file mode 100644
index 0000000..a381989
--- /dev/null
+++ b/src/components/Navbar.jsx
@@ -0,0 +1,98 @@
+import React from 'react';
+import { Link, useNavigate, useLocation } from 'react-router-dom';
+import { Layout, Menu, Avatar } from 'antd';
+import {
+  HomeOutlined,
+  CloudUploadOutlined,
+  ThunderboltOutlined,
+  UsergroupAddOutlined
+} from '@ant-design/icons';
+
+const { Header } = Layout;
+
+const Navbar = () => {
+  const navigate = useNavigate();
+  const location = useLocation();
+
+  // 从localStorage获取用户数据
+  const userData = JSON.parse(localStorage.getItem('user')) || {};
+  const { username, image } = userData;
+
+  // 点击头像或用户名跳转到首页
+  const handleUserClick = () => {
+    navigate('/usercenter');
+  };
+
+  return (
+    <Header
+      style={{
+        backgroundColor: '#f5be42',
+        boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
+        padding: '0 40px',
+         width: '100%', // 确保宽度扩展到100%
+        display: 'flex',
+        alignItems: 'center',
+        justifyContent: 'space-between'
+      }}
+    >
+      {/* Logo */}
+      <div style={{ color: '#fff', fontSize: '20px', fontWeight: 'bold' }}>
+        <Link to="/" style={{ color: '#fff', textDecoration: 'none' }}>
+          社交互动平台
+        </Link>
+      </div>
+
+      {/* Menu */}
+      <Menu
+        mode="horizontal"
+        theme="dark"
+        selectedKeys={[location.pathname]}
+        style={{
+          backgroundColor: 'transparent',
+          flex: 1,
+          justifyContent: 'center',
+          borderBottom: 'none'
+        }}
+      >
+        <Menu.Item key="/mainpage" icon={<HomeOutlined />}>
+          <Link to="/home" style={{ color: '#fff' }}>首页</Link>
+        </Menu.Item>
+        <Menu.Item key="/" icon={<HomeOutlined />}>
+          <Link to="/community" style={{ color: '#fff' }}>社区</Link>
+        </Menu.Item>
+        <Menu.Item key="/torrents" icon={<ThunderboltOutlined />}>
+          <Link to="/torrents" style={{ color: '#fff' }}>种子</Link>
+        </Menu.Item>
+        <Menu.Item key="/upload" icon={<CloudUploadOutlined />}>
+          <Link to="/upload" style={{ color: '#fff' }}>上传种子</Link>
+        </Menu.Item>
+        <Menu.Item key="/friend" icon={<UsergroupAddOutlined />}>
+          <Link to="/friend" style={{ color: '#fff' }}>好友</Link>
+        </Menu.Item>
+        <Menu.Item key="/shop" icon={<UsergroupAddOutlined />}>
+          <Link to="/shop" style={{ color: '#fff' }}>商城</Link>
+        </Menu.Item>
+      </Menu>
+
+      {/* 用户名和头像 - 添加点击事件 */}
+      <div
+        style={{
+          display: 'flex',
+          alignItems: 'center',
+          gap: '8px',
+          cursor: 'pointer'  // 添加指针样式表示可点击
+        }}
+        onClick={handleUserClick}
+      >
+        <Avatar
+          src={image}
+          size="default"
+          style={{ backgroundColor: '#f56a00' }}
+        />
+        <span style={{ color: '#fff' }}>{username}</span>
+      </div>
+    </Header>
+  );
+};
+
+export default Navbar;
\ No newline at end of file
diff --git a/src/components/upload-full.jsx b/src/components/upload-full.jsx
new file mode 100644
index 0000000..bb68fab
--- /dev/null
+++ b/src/components/upload-full.jsx
@@ -0,0 +1,2005 @@
+import React, { useState, useEffect } from 'react';
+import axios from 'axios';
+import "../upload.css";
+import "../uploadtorrent.css";
+import { Form, Input, Select, Button, Typography, Space, message,Switch } from 'antd';
+import { useParams, useNavigate, useLocation, useSearchParams } from 'react-router-dom'; // 添加 useLocation
+import { InboxOutlined } from '@ant-design/icons';
+const { TextArea } = Input;
+const { Text } = Typography;
+
+
+function UploadTorrentFull() {
+  const [userid,setuserid] = useState(1);
+  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 [form] = Form.useForm();
+  const location = useLocation(); // 添加这行获取location对象
+    // 在组件状态中添加
+    // 获取参数并设置默认值
+    //const [manageId, setManageId] = useState(parseInt(searchParams.get('manageid')) || 1);
+   // 正确从location.state获取参数
+    const {requestid} = location.state || {};
+  
+  // 通用参数
+  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 [coverImage, setCoverImage] = useState(null);
+  
+  // 特殊参数
+  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 (!coverImage) {
+      alert('请选择一个 图片 文件');
+      return;
+    }
+    if (!file) {
+      alert('请选择一个 .torrent 文件');
+      return;
+    }
+
+    if (!categoryId) {
+      alert('请选择分类');
+      return;
+    }
+    
+
+    const formData = new FormData();
+    formData.append('userid', userid);
+    formData.append('file', file);
+    // Add cover image if it exists
+    formData.append('coverImage', coverImage);
+    formData.append('title', title);
+    formData.append('description', description);
+    formData.append('categoryId', categoryId);
+    formData.append('requestId', requestid);
+
+    
+    // 通用参数
+    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/fullrequest', 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-2xl mx-auto mt-10 p-6 bg-white shadow rounded">
+//   <h2 className="text-2xl font-bold mb-6 text-orange-800 text-center border-b-2 border-orange-200 pb-3">上传种子</h2>
+//   <form onSubmit={handleSubmit} className="space-y-6">
+//     {/* 封面图片 - 大型上传区域 */}
+//     <div className="form-group text-center">
+//       <label className="upload-area text-orange-800 font-medium cursor-pointer p-8 border-2 border-dashed border-orange-300 rounded-lg hover:border-orange-400 transition-colors">
+//         <svg xmlns="http://www.w3.org/2000/svg" className="mx-auto h-12 w-12 text-orange-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+//           <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" />
+//         </svg>
+//         <p className="mt-2 text-sm">点击或拖拽上传封面图片</p>
+//         <input 
+//           type="file" 
+//           accept="image/*" 
+//           onChange={(e) => setCoverImage(e.target.files[0])} 
+//           className="hidden"
+//           id="cover-image-upload"
+//         />
+//       </label>
+//       <input 
+//         type="file" 
+//         accept="image/*" 
+//         onChange={(e) => setCoverImage(e.target.files[0])} 
+//         className="sr-only"
+//         id="cover-image-upload-real"
+//       />
+//     </div>
+
+//     {/* 种子文件 - 大型上传区域 */}
+//     <div className="form-group text-center">
+//       <label className="upload-area text-orange-800 font-medium cursor-pointer p-8 border-2 border-dashed border-orange-300 rounded-lg hover:border-orange-400 transition-colors">
+//         <svg xmlns="http://www.w3.org/2000/svg" className="mx-auto h-12 w-12 text-orange-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+//           <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
+//         </svg>
+//         <p className="mt-2 text-sm">点击或拖拽上传种子文件(.torrent)</p>
+//         <input 
+//           type="file" 
+//           accept=".torrent" 
+//           onChange={(e) => setFile(e.target.files[0])} 
+//           className="hidden"
+//           id="torrent-file-upload"
+//           required
+//         />
+//       </label>
+//       <input 
+//         type="file" 
+//         accept=".torrent" 
+//         onChange={(e) => setFile(e.target.files[0])} 
+//         className="sr-only"
+//         id="torrent-file-upload-real"
+//         required
+//       />
+//     </div>
+
+//     {/* 标题 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">标题</label>
+//       <input
+//         type="text"
+//         placeholder="输入种子标题"
+//         value={title}
+//         onChange={(e) => setTitle(e.target.value)}
+//         className="form-control text-center"
+//         required
+//       />
+//     </div>
+
+//     {/* 描述 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">描述</label>
+//       <textarea
+//         placeholder="输入种子描述"
+//         value={description}
+//         onChange={(e) => setDescription(e.target.value)}
+//         className="form-control text-center"
+//         rows={3}
+//       />
+//     </div>
+
+//     {/* 分类 - 美化下拉框 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">分类</label>
+//       <div className="relative">
+//         <select
+//           value={categoryId}
+//           onChange={(e) => setCategoryId(e.target.value)}
+//           className="custom-select"
+//           required
+//         >
+//           <option value="">请选择分类</option>
+//           {categories.map(cat => (
+//             <option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</option>
+//           ))}
+//         </select>
+//         <div className="select-arrow">
+//           <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//             <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//           </svg>
+//         </div>
+//       </div>
+//     </div>
+
+//     {/* 动态字段 - 电影 */}
+//     {showMovieFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">字幕/说明</label>
+//           <input
+//             type="text"
+//             placeholder="输入字幕/说明"
+//             value={caption}
+//             onChange={(e) => setCaption(e.target.value)}
+//             className="form-control text-center"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">地区</label>
+//           <div className="relative">
+//             <select
+//               value={region}
+//               onChange={(e) => setRegion(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择地区</option>
+//               {regions.map((region) => (
+//                 <option key={region.value} value={region.value}>
+//                   {region.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">年份</label>
+//           <input
+//             type="text"
+//             placeholder="输入年份"
+//             value={year}
+//             onChange={(e) => setYear(e.target.value)}
+//             className="form-control text-center"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">类型</label>
+//           <div className="relative">
+//             <select
+//               value={genre}
+//               onChange={(e) => setGenre(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择类型</option>
+//               {genres.map((format) => (
+//                 <option key={format.value} value={format.value}>
+//                   {format.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">编码格式</label>
+//           <div className="relative">
+//             <select
+//               value={codecFormat}
+//               onChange={(e) => setCodecFormat(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择编码格式</option>
+//               {codecFormats.map((format) => (
+//                 <option key={format.value} value={format.value}>
+//                   {format.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">分辨率</label>
+//           <div className="relative">
+//             <select
+//               value={resolution}
+//               onChange={(e) => setResolution(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择分辨率</option>
+//               {resolutions.map((resolution) => (
+//                 <option key={resolution.value} value={resolution.value}>
+//                   {resolution.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 剧集 */}
+//     {showTvFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">地区</label>
+//           <select
+//             value={region}
+//             onChange={(e) => setRegion(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择地区</option>
+//             {regions.map((region) => (
+//               <option key={region.value} value={region.value}>
+//                 {region.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {genres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 游戏 */}
+//     {showGameFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">平台</label>
+//           <select
+//             value={platform}
+//             onChange={(e) => setPlatform(e.target.value)} 
+//             className="form-control"
+//           >
+//             <option value="">请选择平台</option>
+//             {platforms.map((platform) => (
+//               <option key={platform.value} value={platform.value}>
+//                 {platform.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>  
+//             {gamegenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">语言</label>
+//           <select
+//             value={language}
+//             onChange={(e) => setLanguage(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择语言</option>
+//             {languages.map((language) => (
+//               <option key={language.value} value={language.value}>
+//                 {language.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">数据类型</label>
+//           <select
+//             value={dataType}
+//             onChange={(e) => setdataType(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择数据类型</option>
+//             {dataTypes.map((dataType) => (
+//               <option key={dataType.value} value={dataType.value}>
+//                 {dataType.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 综艺 */}
+//     {showvarietyFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="flex items-center">
+//             <input
+//               type="checkbox"
+//               checked={isMainland}
+//               onChange={(e) => setIsMainland(e.target.checked)}
+//               className="mr-2"
+//             />
+//             是否大陆综艺
+//           </label>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={style}
+//             onChange={(e) => setStyle(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {varietygenres.map((style) => (
+//               <option key={style.value} value={style.value}>
+//                 {style.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 动漫 */}
+//     {showAnimeFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {anigenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {animeformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">分辨率</label>
+//           <select
+//             value={resolution}
+//             onChange={(e) => setResolution(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择分辨率</option>
+//             {resolutions.map((resolution) => (
+//               <option key={resolution.value} value={resolution.value}>
+//                 {resolution.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 学习 */}
+//     {showlearningFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {learninggenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {learningformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 软件 */}
+//     {showsoftwareFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">平台</label>
+//           <select
+//             value={platform}
+//             onChange={(e) => setPlatform(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择平台</option>
+//             {softwareplatforms.map((platform) => (
+//               <option key={platform.value} value={platform.value}>
+//                 {platform.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {softwaregenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {softwareformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 体育 */}
+//     {showsportsFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {sportsgenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">赛事类型</label>
+//           <select
+//             value={eventType}
+//             onChange={(e) => setEventType(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择赛事类型</option>
+//             {eventTypes.map((eventType) => (
+//               <option key={eventType.value} value={eventType.value}>
+//                 {eventType.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 纪录片 */}
+//     {showdocFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">年份</label>
+//           <input
+//             type="text"
+//             placeholder="如 1999, 2020"
+//             value={year}
+//             onChange={(e) => setYear(e.target.value)}
+//             className="form-control"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">视频源</label>
+//           <select
+//             value={source}
+//             onChange={(e) => setSource(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择视频源</option>
+//             {sourceTypes.map((source) => (
+//               <option key={source.value} value={source.value}>
+//                 {source.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 音乐 */}
+//     {showMusicFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {musicgenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">地区</label>
+//           <select
+//             value={region}
+//             onChange={(e) => setRegion(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择地区</option>
+//             {regions.map((region) => (
+//               <option key={region.value} value={region.value}>
+//                 {region.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">风格</label>
+//           <select
+//             value={style}
+//             onChange={(e) => setStyle(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择风格</option>
+//             {musicstyles.map((style) => (
+//               <option key={style.value} value={style.value}>
+//                 {style.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {musicformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 其他 */}
+//     {showotherFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {othergenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+
+//     {/* 其他动态字段... (保持相同的美化样式) */}
+//     {/* 这里省略了其他动态字段的代码,但它们都使用相同的自定义下拉框样式 */}
+    
+//     {/* 提交按钮 - 居中 */}
+//     <div className="text-center">
+//       <button 
+//         type="submit" 
+//         className="submit-btn"
+//       >
+//         上传种子
+//       </button>
+//     </div>
+
+//     {showSuccess && (
+//       <div className="success-message text-center">
+//         上传成功!
+//       </div>
+//     )}
+//   </form>
+// </div>
+//   );
+// }
+return (
+    <div className="container">
+      <div className="card">
+        <h2 className="title">上传种子</h2>
+        <Form
+          layout="vertical"
+          onFinish={handleSubmit}
+          className="form"
+        >
+         {/* 封面图片 - 自定义上传区域 */}
+<Form.Item
+  name="coverImage"
+   label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>封面图片</span>} 
+  rules={[{ required: true, message: '请上传封面图片' }]}
+>
+  <div 
+    className="uploadArea"
+    onClick={() => document.getElementById('cover-image-upload').click()}
+  >
+    <InboxOutlined className="uploadIcon" />
+    <p className="uploadText">点击或拖拽上传封面图片</p>
+    <input
+      type="file"
+      accept="image/*"
+      onChange={(e) => {
+        setCoverImage(e.target.files[0]);
+        form.setFieldsValue({ coverImage: e.target.files[0] });
+      }}
+      className="hiddenInput"
+      id="cover-image-upload"
+    />
+  </div>
+</Form.Item>
+
+{/* 种子文件 - 自定义上传区域 */}
+<Form.Item
+  name="torrentFile"
+   label={<span style={{ fontSize: '19px' , fontWeight: 'bold'}}>种子文件</span>} 
+  rules={[{ required: true, message: '请上传.torrent文件' }]}
+>
+  <div 
+    className="uploadArea"
+    onClick={() => document.getElementById('torrent-file-upload').click()}
+  >
+    <InboxOutlined className="uploadIcon" />
+    <p className="uploadText">点击或拖拽上传种子文件(.torrent)</p>
+    <input
+      type="file"
+      accept=".torrent"
+      onChange={(e) => {
+        setFile(e.target.files[0]);
+        form.setFieldsValue({ torrentFile: e.target.files[0] });
+      }}
+      className="hiddenInput"
+      id="torrent-file-upload"
+    />
+  </div>
+</Form.Item>
+
+          {/* 标题 */}
+          <Form.Item
+            name="title"
+            label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>标题</span>}  // 直接包裹label
+            rules={[{ required: true, message: '请输入标题' }]}
+            //labelCol={{ style: { fontSize: '30px !important ' } }} // ✅ 调整 Label 字体
+          >
+            <Input
+              placeholder="输入种子标题"
+              value={title}
+              onChange={(e) => {
+                setTitle(e.target.value);
+                form.setFieldsValue({ title: e.target.value });
+              }}
+              //style={styles.input}
+              style={{ fontSize: '19px' }} // ✅ 调整 Input 字体
+            />
+          </Form.Item>
+
+          {/* 描述 */}
+          <Form.Item
+            name="description"
+             label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>描述</span>} 
+          >
+            <TextArea
+              placeholder="输入种子描述"
+              value={description}
+              onChange={(e) => {
+                setDescription(e.target.value);
+                form.setFieldsValue({ description: e.target.value });
+              }}
+              rows={3}
+              style={styles.textArea}
+            />
+          </Form.Item>
+
+          {/* 分类 - 美化下拉框 */}
+          <Form.Item
+            name="categoryId"
+             label={<span style={{ fontSize: '19px' , fontWeight: 'bold' }}>分类</span>} 
+            rules={[{ required: true, message: '请选择分类' }]}
+          >
+            <Select
+              placeholder="请选择分类"
+              value={categoryId}
+              onChange={(value) => {
+                const stringValue = String(value);
+                setCategoryId(stringValue);
+                console.log('Selected category ID:', stringValue);
+                form.setFieldsValue({ categoryId: value });
+                // 触发分类变化后的逻辑
+                setShowMovieFields(value === '1');
+                setShowTvFields(value === '2');
+                setShowAnimeFields(value === '4');
+                setShowGameFields(value === '5');
+                setShowvarietyFields(value === '6');
+                setShowMusicFields(value === '3');
+                setShowlearningFields(value === '9');
+                setShowsoftwareFields(value === '8');
+                setShowsportsFields(value === '7');
+                setShowdocFields(value === '10');
+                setShowotherFields(value === '11');
+              }}
+              style={styles.select}
+            >
+              <Option value="">请选择分类</Option>
+              {categories.map(cat => (
+                <Option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</Option>
+              ))}
+            </Select>
+          </Form.Item>
+
+      {/* 动态字段 - 电影 */}
+      {showMovieFields && (
+        <>
+          <Form.Item
+            name="caption"
+            label="字幕/说明"
+            rules={[{ required: true, message: '请输入字幕/说明' }]}
+          >
+            <Input
+              placeholder="输入字幕/说明"
+              value={caption}
+              onChange={(e) => {
+                setCaption(e.target.value);
+                form.setFieldsValue({ caption: e.target.value });
+              }}
+              className="text-center"
+            />
+          </Form.Item>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="year"
+            label="年份"
+          >
+            <Input
+              placeholder="输入年份"
+              value={year}
+              onChange={(e) => {
+                setYear(e.target.value);
+                form.setFieldsValue({ year: e.target.value });
+              }}
+              className="text-center"
+            />
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {genres.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="codecFormat"
+            label="编码格式"
+          >
+            <Select
+              placeholder="请选择编码格式"
+              value={codecFormat}
+              onChange={(value) => {
+                setCodecFormat(value);
+                form.setFieldsValue({ codecFormat: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择编码格式</Option>
+              {codecFormats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="resolution"
+            label="分辨率"
+          >
+            <Select
+              placeholder="请选择分辨率"
+              value={resolution}
+              onChange={(value) => {
+                setResolution(value);
+                form.setFieldsValue({ resolution: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择分辨率</Option>
+              {resolutions.map((resolution) => (
+                <Option key={resolution.value} value={resolution.value}>
+                  {resolution.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 剧集 */}
+      {showTvFields && (
+        <>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {genres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 游戏 */}
+      {showGameFields && (
+        <>
+          <Form.Item
+            name="platform"
+            label="平台"
+          >
+            <Select
+              placeholder="请选择平台"
+              value={platform}
+              onChange={(value) => {
+                setPlatform(value);
+                form.setFieldsValue({ platform: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择平台</Option>
+              {platforms.map((platform) => (
+                <Option key={platform.value} value={platform.value}>
+                  {platform.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {gamegenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="language"
+            label="语言"
+          >
+            <Select
+              placeholder="请选择语言"
+              value={language}
+              onChange={(value) => {
+                setLanguage(value);
+                form.setFieldsValue({ language: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择语言</Option>
+              {languages.map((language) => (
+                <Option key={language.value} value={language.value}>
+                  {language.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="dataType"
+            label="数据类型"
+          >
+            <Select
+              placeholder="请选择数据类型"
+              value={dataType}
+              onChange={(value) => {
+                setDataType(value);
+                form.setFieldsValue({ dataType: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择数据类型</Option>
+              {dataTypes.map((dataType) => (
+                <Option key={dataType.value} value={dataType.value}>
+                  {dataType.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 综艺 */}
+      {showvarietyFields && (
+        <>
+          <Form.Item
+            name="isMainland"
+            label="是否大陆综艺"
+            valuePropName="checked"
+          >
+            <Switch 
+              checked={isMainland}
+              onChange={(checked) => {
+                setIsMainland(checked);
+                form.setFieldsValue({ isMainland: checked });
+              }}
+            />
+          </Form.Item>
+          <Form.Item
+            name="style"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={style}
+              onChange={(value) => {
+                setStyle(value);
+                form.setFieldsValue({ style: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {varietygenres.map((style) => (
+                <Option key={style.value} value={style.value}>
+                  {style.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 动漫 */}
+      {showAnimeFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {anigenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {animeformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="resolution"
+            label="分辨率"
+          >
+            <Select
+              placeholder="请选择分辨率"
+              value={resolution}
+              onChange={(value) => {
+                setResolution(value);
+                form.setFieldsValue({ resolution: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择分辨率</Option>
+              {resolutions.map((resolution) => (
+                <Option key={resolution.value} value={resolution.value}>
+                  {resolution.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 学习 */}
+      {showlearningFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {learninggenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {learningformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 软件 */}
+      {showsoftwareFields && (
+        <>
+          <Form.Item
+            name="platform"
+            label="平台"
+          >
+            <Select
+              placeholder="请选择平台"
+              value={platform}
+              onChange={(value) => {
+                setPlatform(value);
+                form.setFieldsValue({ platform: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择平台</Option>
+              {softwareplatforms.map((platform) => (
+                <Option key={platform.value} value={platform.value}>
+                  {platform.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {softwaregenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {softwareformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 体育 */}
+      {showsportsFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {sportsgenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="eventType"
+            label="赛事类型"
+          >
+            <Select
+              placeholder="请选择赛事类型"
+              value={eventType}
+              onChange={(value) => {
+                setEventType(value);
+                form.setFieldsValue({ eventType: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择赛事类型</Option>
+              {eventTypes.map((eventType) => (
+                <Option key={eventType.value} value={eventType.value}>
+                  {eventType.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 纪录片 */}
+      {showdocFields && (
+        <>
+          <Form.Item
+            name="year"
+            label="年份"
+          >
+            <Input
+              placeholder="如 1999, 2020"
+              value={year}
+              onChange={(e) => {
+                setYear(e.target.value);
+                form.setFieldsValue({ year: e.target.value });
+              }}
+              className="w-full"
+            />
+          </Form.Item>
+          <Form.Item
+            name="source"
+            label="视频源"
+          >
+            <Select
+              placeholder="请选择视频源"
+              value={source}
+              onChange={(value) => {
+                setSource(value);
+                form.setFieldsValue({ source: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择视频源</Option>
+              {sourceTypes.map((source) => (
+                <Option key={source.value} value={source.value}>
+                  {source.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 音乐 */}
+      {showMusicFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {musicgenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="style"
+            label="风格"
+          >
+            <Select
+              placeholder="请选择风格"
+              value={style}
+              onChange={(value) => {
+                setStyle(value);
+                form.setFieldsValue({ style: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择风格</Option>
+              {musicstyles.map((style) => (
+                <Option key={style.value} value={style.value}>
+                  {style.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {musicformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 其他 */}
+      {showotherFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {othergenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+ {/* 提交按钮 */}
+          <Form.Item>
+            <Button 
+              type="primary" 
+              htmlType="submit" 
+              className="submitButton"
+              onMouseOver={(e) => e.target.style.backgroundColor = '#ff7f00'}
+              onMouseOut={(e) => e.target.style.backgroundColor = '#ff8c00'}
+            >
+              上传种子
+            </Button>
+          </Form.Item>
+
+          {showSuccess && (
+            <div className="successMessage">
+              上传成功!
+            </div>
+          )}
+        </Form>
+      </div>
+    </div>
+  );
+}
+
+export default UploadTorrentFull;
+
diff --git a/src/components/upload.jsx b/src/components/upload.jsx
new file mode 100644
index 0000000..c297fa8
--- /dev/null
+++ b/src/components/upload.jsx
@@ -0,0 +1,2002 @@
+import React, { useState, useEffect } from 'react';
+import axios from 'axios';
+import "../upload.css";
+import "../uploadtorrent.css";
+import { Form, Input, Select, Button, Typography, Space, message,Switch } from 'antd';
+import { InboxOutlined } from '@ant-design/icons';
+const { TextArea } = Input;
+const { Text } = Typography;
+import Navbar from './Navbar';
+
+
+function UploadTorrent() {
+  const [userid,setuserid] = useState(1);
+  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 [form] = Form.useForm();
+  
+  // 通用参数
+  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 [coverImage, setCoverImage] = useState(null);
+  
+  // 特殊参数
+  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 (!coverImage) {
+      alert('请选择一个 图片 文件');
+      return;
+    }
+    if (!file) {
+      alert('请选择一个 .torrent 文件');
+      return;
+    }
+
+    if (!categoryId) {
+      alert('请选择分类');
+      return;
+    }
+    
+
+    const formData = new FormData();
+    formData.append('userid', userid);
+    formData.append('file', file);
+    // Add cover image if it exists
+    formData.append('coverImage', coverImage);
+    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-2xl mx-auto mt-10 p-6 bg-white shadow rounded">
+//   <h2 className="text-2xl font-bold mb-6 text-orange-800 text-center border-b-2 border-orange-200 pb-3">上传种子</h2>
+//   <form onSubmit={handleSubmit} className="space-y-6">
+//     {/* 封面图片 - 大型上传区域 */}
+//     <div className="form-group text-center">
+//       <label className="upload-area text-orange-800 font-medium cursor-pointer p-8 border-2 border-dashed border-orange-300 rounded-lg hover:border-orange-400 transition-colors">
+//         <svg xmlns="http://www.w3.org/2000/svg" className="mx-auto h-12 w-12 text-orange-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+//           <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" />
+//         </svg>
+//         <p className="mt-2 text-sm">点击或拖拽上传封面图片</p>
+//         <input 
+//           type="file" 
+//           accept="image/*" 
+//           onChange={(e) => setCoverImage(e.target.files[0])} 
+//           className="hidden"
+//           id="cover-image-upload"
+//         />
+//       </label>
+//       <input 
+//         type="file" 
+//         accept="image/*" 
+//         onChange={(e) => setCoverImage(e.target.files[0])} 
+//         className="sr-only"
+//         id="cover-image-upload-real"
+//       />
+//     </div>
+
+//     {/* 种子文件 - 大型上传区域 */}
+//     <div className="form-group text-center">
+//       <label className="upload-area text-orange-800 font-medium cursor-pointer p-8 border-2 border-dashed border-orange-300 rounded-lg hover:border-orange-400 transition-colors">
+//         <svg xmlns="http://www.w3.org/2000/svg" className="mx-auto h-12 w-12 text-orange-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+//           <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
+//         </svg>
+//         <p className="mt-2 text-sm">点击或拖拽上传种子文件(.torrent)</p>
+//         <input 
+//           type="file" 
+//           accept=".torrent" 
+//           onChange={(e) => setFile(e.target.files[0])} 
+//           className="hidden"
+//           id="torrent-file-upload"
+//           required
+//         />
+//       </label>
+//       <input 
+//         type="file" 
+//         accept=".torrent" 
+//         onChange={(e) => setFile(e.target.files[0])} 
+//         className="sr-only"
+//         id="torrent-file-upload-real"
+//         required
+//       />
+//     </div>
+
+//     {/* 标题 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">标题</label>
+//       <input
+//         type="text"
+//         placeholder="输入种子标题"
+//         value={title}
+//         onChange={(e) => setTitle(e.target.value)}
+//         className="form-control text-center"
+//         required
+//       />
+//     </div>
+
+//     {/* 描述 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">描述</label>
+//       <textarea
+//         placeholder="输入种子描述"
+//         value={description}
+//         onChange={(e) => setDescription(e.target.value)}
+//         className="form-control text-center"
+//         rows={3}
+//       />
+//     </div>
+
+//     {/* 分类 - 美化下拉框 */}
+//     <div className="form-group">
+//       <label className="form-label text-orange-800 text-center">分类</label>
+//       <div className="relative">
+//         <select
+//           value={categoryId}
+//           onChange={(e) => setCategoryId(e.target.value)}
+//           className="custom-select"
+//           required
+//         >
+//           <option value="">请选择分类</option>
+//           {categories.map(cat => (
+//             <option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</option>
+//           ))}
+//         </select>
+//         <div className="select-arrow">
+//           <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//             <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//           </svg>
+//         </div>
+//       </div>
+//     </div>
+
+//     {/* 动态字段 - 电影 */}
+//     {showMovieFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">字幕/说明</label>
+//           <input
+//             type="text"
+//             placeholder="输入字幕/说明"
+//             value={caption}
+//             onChange={(e) => setCaption(e.target.value)}
+//             className="form-control text-center"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">地区</label>
+//           <div className="relative">
+//             <select
+//               value={region}
+//               onChange={(e) => setRegion(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择地区</option>
+//               {regions.map((region) => (
+//                 <option key={region.value} value={region.value}>
+//                   {region.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">年份</label>
+//           <input
+//             type="text"
+//             placeholder="输入年份"
+//             value={year}
+//             onChange={(e) => setYear(e.target.value)}
+//             className="form-control text-center"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">类型</label>
+//           <div className="relative">
+//             <select
+//               value={genre}
+//               onChange={(e) => setGenre(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择类型</option>
+//               {genres.map((format) => (
+//                 <option key={format.value} value={format.value}>
+//                   {format.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">编码格式</label>
+//           <div className="relative">
+//             <select
+//               value={codecFormat}
+//               onChange={(e) => setCodecFormat(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择编码格式</option>
+//               {codecFormats.map((format) => (
+//                 <option key={format.value} value={format.value}>
+//                   {format.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800 text-center">分辨率</label>
+//           <div className="relative">
+//             <select
+//               value={resolution}
+//               onChange={(e) => setResolution(e.target.value)}
+//               className="custom-select"
+//             >
+//               <option value="">请选择分辨率</option>
+//               {resolutions.map((resolution) => (
+//                 <option key={resolution.value} value={resolution.value}>
+//                   {resolution.label}
+//                 </option>
+//               ))}
+//             </select>
+//             <div className="select-arrow">
+//               <svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4 text-orange-500" viewBox="0 0 20 20" fill="currentColor">
+//                 <path fillRule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clipRule="evenodd" />
+//               </svg>
+//             </div>
+//           </div>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 剧集 */}
+//     {showTvFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">地区</label>
+//           <select
+//             value={region}
+//             onChange={(e) => setRegion(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择地区</option>
+//             {regions.map((region) => (
+//               <option key={region.value} value={region.value}>
+//                 {region.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {genres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 游戏 */}
+//     {showGameFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">平台</label>
+//           <select
+//             value={platform}
+//             onChange={(e) => setPlatform(e.target.value)} 
+//             className="form-control"
+//           >
+//             <option value="">请选择平台</option>
+//             {platforms.map((platform) => (
+//               <option key={platform.value} value={platform.value}>
+//                 {platform.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>  
+//             {gamegenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">语言</label>
+//           <select
+//             value={language}
+//             onChange={(e) => setLanguage(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择语言</option>
+//             {languages.map((language) => (
+//               <option key={language.value} value={language.value}>
+//                 {language.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">数据类型</label>
+//           <select
+//             value={dataType}
+//             onChange={(e) => setdataType(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择数据类型</option>
+//             {dataTypes.map((dataType) => (
+//               <option key={dataType.value} value={dataType.value}>
+//                 {dataType.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 综艺 */}
+//     {showvarietyFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="flex items-center">
+//             <input
+//               type="checkbox"
+//               checked={isMainland}
+//               onChange={(e) => setIsMainland(e.target.checked)}
+//               className="mr-2"
+//             />
+//             是否大陆综艺
+//           </label>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={style}
+//             onChange={(e) => setStyle(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {varietygenres.map((style) => (
+//               <option key={style.value} value={style.value}>
+//                 {style.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 动漫 */}
+//     {showAnimeFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {anigenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {animeformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">分辨率</label>
+//           <select
+//             value={resolution}
+//             onChange={(e) => setResolution(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择分辨率</option>
+//             {resolutions.map((resolution) => (
+//               <option key={resolution.value} value={resolution.value}>
+//                 {resolution.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 学习 */}
+//     {showlearningFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {learninggenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {learningformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 软件 */}
+//     {showsoftwareFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">平台</label>
+//           <select
+//             value={platform}
+//             onChange={(e) => setPlatform(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择平台</option>
+//             {softwareplatforms.map((platform) => (
+//               <option key={platform.value} value={platform.value}>
+//                 {platform.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {softwaregenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {softwareformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 体育 */}
+//     {showsportsFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {sportsgenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">赛事类型</label>
+//           <select
+//             value={eventType}
+//             onChange={(e) => setEventType(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择赛事类型</option>
+//             {eventTypes.map((eventType) => (
+//               <option key={eventType.value} value={eventType.value}>
+//                 {eventType.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 纪录片 */}
+//     {showdocFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">年份</label>
+//           <input
+//             type="text"
+//             placeholder="如 1999, 2020"
+//             value={year}
+//             onChange={(e) => setYear(e.target.value)}
+//             className="form-control"
+//           />
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">视频源</label>
+//           <select
+//             value={source}
+//             onChange={(e) => setSource(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择视频源</option>
+//             {sourceTypes.map((source) => (
+//               <option key={source.value} value={source.value}>
+//                 {source.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {resolutions.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 音乐 */}
+//     {showMusicFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {musicgenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">地区</label>
+//           <select
+//             value={region}
+//             onChange={(e) => setRegion(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择地区</option>
+//             {regions.map((region) => (
+//               <option key={region.value} value={region.value}>
+//                 {region.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">风格</label>
+//           <select
+//             value={style}
+//             onChange={(e) => setStyle(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择风格</option>
+//             {musicstyles.map((style) => (
+//               <option key={style.value} value={style.value}>
+//                 {style.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">格式</label>
+//           <select
+//             value={format}
+//             onChange={(e) => setFormat(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择格式</option>
+//             {musicformats.map((format) => (
+//               <option key={format.value} value={format.value}>
+//                 {format.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+//     {/* 动态字段 - 其他 */}
+//     {showotherFields && (
+//       <>
+//         <div className="form-group">
+//           <label className="form-label text-orange-800">类型</label>
+//           <select
+//             value={genre}
+//             onChange={(e) => setGenre(e.target.value)}
+//             className="form-control"
+//           >
+//             <option value="">请选择类型</option>
+//             {othergenres.map((genre) => (
+//               <option key={genre.value} value={genre.value}>
+//                 {genre.label}
+//               </option>
+//             ))}
+//           </select>
+//         </div>
+//       </>
+//     )}
+
+
+//     {/* 其他动态字段... (保持相同的美化样式) */}
+//     {/* 这里省略了其他动态字段的代码,但它们都使用相同的自定义下拉框样式 */}
+    
+//     {/* 提交按钮 - 居中 */}
+//     <div className="text-center">
+//       <button 
+//         type="submit" 
+//         className="submit-btn"
+//       >
+//         上传种子
+//       </button>
+//     </div>
+
+//     {showSuccess && (
+//       <div className="success-message text-center">
+//         上传成功!
+//       </div>
+//     )}
+//   </form>
+// </div>
+//   );
+// }
+return (
+  <div>
+  <Navbar  style={{ width: '100%' }}/>
+    <div className="container">
+      <div className="card">
+        <h2 className="title">上传种子</h2>
+        <Form
+          layout="vertical"
+          onFinish={handleSubmit}
+          className="form"
+        >
+         {/* 封面图片 - 自定义上传区域 */}
+<Form.Item
+  name="coverImage"
+   label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>封面图片</span>} 
+  rules={[{ required: true, message: '请上传封面图片' }]}
+>
+  <div 
+    className="uploadArea"
+    onClick={() => document.getElementById('cover-image-upload').click()}
+  >
+    <InboxOutlined className="uploadIcon" />
+    <p className="uploadText">点击或拖拽上传封面图片</p>
+    <input
+      type="file"
+      accept="image/*"
+      onChange={(e) => {
+        setCoverImage(e.target.files[0]);
+        form.setFieldsValue({ coverImage: e.target.files[0] });
+      }}
+      className="hiddenInput"
+      id="cover-image-upload"
+    />
+  </div>
+</Form.Item>
+
+{/* 种子文件 - 自定义上传区域 */}
+<Form.Item
+  name="torrentFile"
+   label={<span style={{ fontSize: '19px' , fontWeight: 'bold'}}>种子文件</span>} 
+  rules={[{ required: true, message: '请上传.torrent文件' }]}
+>
+  <div 
+    className="uploadArea"
+    onClick={() => document.getElementById('torrent-file-upload').click()}
+  >
+    <InboxOutlined className="uploadIcon" />
+    <p className="uploadText">点击或拖拽上传种子文件(.torrent)</p>
+    <input
+      type="file"
+      accept=".torrent"
+      onChange={(e) => {
+        setFile(e.target.files[0]);
+        form.setFieldsValue({ torrentFile: e.target.files[0] });
+      }}
+      className="hiddenInput"
+      id="torrent-file-upload"
+    />
+  </div>
+</Form.Item>
+
+          {/* 标题 */}
+          <Form.Item
+            name="title"
+            label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>标题</span>}  // 直接包裹label
+            rules={[{ required: true, message: '请输入标题' }]}
+            //labelCol={{ style: { fontSize: '30px !important ' } }} // ✅ 调整 Label 字体
+          >
+            <Input
+              placeholder="输入种子标题"
+              value={title}
+              onChange={(e) => {
+                setTitle(e.target.value);
+                form.setFieldsValue({ title: e.target.value });
+              }}
+              //style={styles.input}
+              style={{ fontSize: '19px' }} // ✅ 调整 Input 字体
+            />
+          </Form.Item>
+
+          {/* 描述 */}
+          <Form.Item
+            name="description"
+             label={<span style={{ fontSize: '19px'  , fontWeight: 'bold'}}>描述</span>} 
+          >
+            <TextArea
+              placeholder="输入种子描述"
+              value={description}
+              onChange={(e) => {
+                setDescription(e.target.value);
+                form.setFieldsValue({ description: e.target.value });
+              }}
+              rows={3}
+              style={styles.textArea}
+            />
+          </Form.Item>
+
+          {/* 分类 - 美化下拉框 */}
+          <Form.Item
+            name="categoryId"
+             label={<span style={{ fontSize: '19px' , fontWeight: 'bold' }}>分类</span>} 
+            rules={[{ required: true, message: '请选择分类' }]}
+          >
+            <Select
+              placeholder="请选择分类"
+              value={categoryId}
+              onChange={(value) => {
+                const stringValue = String(value);
+                setCategoryId(stringValue);
+                console.log('Selected category ID:', stringValue);
+                form.setFieldsValue({ categoryId: value });
+                // 触发分类变化后的逻辑
+                setShowMovieFields(value === '1');
+                setShowTvFields(value === '2');
+                setShowAnimeFields(value === '4');
+                setShowGameFields(value === '5');
+                setShowvarietyFields(value === '6');
+                setShowMusicFields(value === '3');
+                setShowlearningFields(value === '9');
+                setShowsoftwareFields(value === '8');
+                setShowsportsFields(value === '7');
+                setShowdocFields(value === '10');
+                setShowotherFields(value === '11');
+              }}
+              style={styles.select}
+            >
+              <Option value="">请选择分类</Option>
+              {categories.map(cat => (
+                <Option key={cat.categoryid} value={cat.categoryid}>{cat.category_name}</Option>
+              ))}
+            </Select>
+          </Form.Item>
+
+      {/* 动态字段 - 电影 */}
+      {showMovieFields && (
+        <>
+          <Form.Item
+            name="caption"
+            label="字幕/说明"
+            rules={[{ required: true, message: '请输入字幕/说明' }]}
+          >
+            <Input
+              placeholder="输入字幕/说明"
+              value={caption}
+              onChange={(e) => {
+                setCaption(e.target.value);
+                form.setFieldsValue({ caption: e.target.value });
+              }}
+              className="text-center"
+            />
+          </Form.Item>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="year"
+            label="年份"
+          >
+            <Input
+              placeholder="输入年份"
+              value={year}
+              onChange={(e) => {
+                setYear(e.target.value);
+                form.setFieldsValue({ year: e.target.value });
+              }}
+              className="text-center"
+            />
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {genres.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="codecFormat"
+            label="编码格式"
+          >
+            <Select
+              placeholder="请选择编码格式"
+              value={codecFormat}
+              onChange={(value) => {
+                setCodecFormat(value);
+                form.setFieldsValue({ codecFormat: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择编码格式</Option>
+              {codecFormats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="resolution"
+            label="分辨率"
+          >
+            <Select
+              placeholder="请选择分辨率"
+              value={resolution}
+              onChange={(value) => {
+                setResolution(value);
+                form.setFieldsValue({ resolution: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择分辨率</Option>
+              {resolutions.map((resolution) => (
+                <Option key={resolution.value} value={resolution.value}>
+                  {resolution.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 剧集 */}
+      {showTvFields && (
+        <>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {genres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 游戏 */}
+      {showGameFields && (
+        <>
+          <Form.Item
+            name="platform"
+            label="平台"
+          >
+            <Select
+              placeholder="请选择平台"
+              value={platform}
+              onChange={(value) => {
+                setPlatform(value);
+                form.setFieldsValue({ platform: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择平台</Option>
+              {platforms.map((platform) => (
+                <Option key={platform.value} value={platform.value}>
+                  {platform.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {gamegenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="language"
+            label="语言"
+          >
+            <Select
+              placeholder="请选择语言"
+              value={language}
+              onChange={(value) => {
+                setLanguage(value);
+                form.setFieldsValue({ language: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择语言</Option>
+              {languages.map((language) => (
+                <Option key={language.value} value={language.value}>
+                  {language.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="dataType"
+            label="数据类型"
+          >
+            <Select
+              placeholder="请选择数据类型"
+              value={dataType}
+              onChange={(value) => {
+                setDataType(value);
+                form.setFieldsValue({ dataType: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择数据类型</Option>
+              {dataTypes.map((dataType) => (
+                <Option key={dataType.value} value={dataType.value}>
+                  {dataType.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 综艺 */}
+      {showvarietyFields && (
+        <>
+          <Form.Item
+            name="isMainland"
+            label="是否大陆综艺"
+            valuePropName="checked"
+          >
+            <Switch 
+              checked={isMainland}
+              onChange={(checked) => {
+                setIsMainland(checked);
+                form.setFieldsValue({ isMainland: checked });
+              }}
+            />
+          </Form.Item>
+          <Form.Item
+            name="style"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={style}
+              onChange={(value) => {
+                setStyle(value);
+                form.setFieldsValue({ style: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {varietygenres.map((style) => (
+                <Option key={style.value} value={style.value}>
+                  {style.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 动漫 */}
+      {showAnimeFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {anigenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {animeformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="resolution"
+            label="分辨率"
+          >
+            <Select
+              placeholder="请选择分辨率"
+              value={resolution}
+              onChange={(value) => {
+                setResolution(value);
+                form.setFieldsValue({ resolution: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择分辨率</Option>
+              {resolutions.map((resolution) => (
+                <Option key={resolution.value} value={resolution.value}>
+                  {resolution.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 学习 */}
+      {showlearningFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {learninggenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {learningformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 软件 */}
+      {showsoftwareFields && (
+        <>
+          <Form.Item
+            name="platform"
+            label="平台"
+          >
+            <Select
+              placeholder="请选择平台"
+              value={platform}
+              onChange={(value) => {
+                setPlatform(value);
+                form.setFieldsValue({ platform: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择平台</Option>
+              {softwareplatforms.map((platform) => (
+                <Option key={platform.value} value={platform.value}>
+                  {platform.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {softwaregenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {softwareformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 体育 */}
+      {showsportsFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {sportsgenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="eventType"
+            label="赛事类型"
+          >
+            <Select
+              placeholder="请选择赛事类型"
+              value={eventType}
+              onChange={(value) => {
+                setEventType(value);
+                form.setFieldsValue({ eventType: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择赛事类型</Option>
+              {eventTypes.map((eventType) => (
+                <Option key={eventType.value} value={eventType.value}>
+                  {eventType.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 纪录片 */}
+      {showdocFields && (
+        <>
+          <Form.Item
+            name="year"
+            label="年份"
+          >
+            <Input
+              placeholder="如 1999, 2020"
+              value={year}
+              onChange={(e) => {
+                setYear(e.target.value);
+                form.setFieldsValue({ year: e.target.value });
+              }}
+              className="w-full"
+            />
+          </Form.Item>
+          <Form.Item
+            name="source"
+            label="视频源"
+          >
+            <Select
+              placeholder="请选择视频源"
+              value={source}
+              onChange={(value) => {
+                setSource(value);
+                form.setFieldsValue({ source: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择视频源</Option>
+              {sourceTypes.map((source) => (
+                <Option key={source.value} value={source.value}>
+                  {source.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {resolutions.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 音乐 */}
+      {showMusicFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {musicgenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="region"
+            label="地区"
+          >
+            <Select
+              placeholder="请选择地区"
+              value={region}
+              onChange={(value) => {
+                setRegion(value);
+                form.setFieldsValue({ region: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择地区</Option>
+              {regions.map((region) => (
+                <Option key={region.value} value={region.value}>
+                  {region.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="style"
+            label="风格"
+          >
+            <Select
+              placeholder="请选择风格"
+              value={style}
+              onChange={(value) => {
+                setStyle(value);
+                form.setFieldsValue({ style: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择风格</Option>
+              {musicstyles.map((style) => (
+                <Option key={style.value} value={style.value}>
+                  {style.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+          <Form.Item
+            name="format"
+            label="格式"
+          >
+            <Select
+              placeholder="请选择格式"
+              value={format}
+              onChange={(value) => {
+                setFormat(value);
+                form.setFieldsValue({ format: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择格式</Option>
+              {musicformats.map((format) => (
+                <Option key={format.value} value={format.value}>
+                  {format.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+
+      {/* 动态字段 - 其他 */}
+      {showotherFields && (
+        <>
+          <Form.Item
+            name="genre"
+            label="类型"
+          >
+            <Select
+              placeholder="请选择类型"
+              value={genre}
+              onChange={(value) => {
+                setGenre(value);
+                form.setFieldsValue({ genre: value });
+              }}
+              className="w-full"
+            >
+              <Option value="">请选择类型</Option>
+              {othergenres.map((genre) => (
+                <Option key={genre.value} value={genre.value}>
+                  {genre.label}
+                </Option>
+              ))}
+            </Select>
+          </Form.Item>
+        </>
+      )}
+ {/* 提交按钮 */}
+          <Form.Item>
+            <Button 
+              type="primary" 
+              htmlType="submit" 
+              className="submitButton"
+              onMouseOver={(e) => e.target.style.backgroundColor = '#ff7f00'}
+              onMouseOut={(e) => e.target.style.backgroundColor = '#ff8c00'}
+            >
+              上传种子
+            </Button>
+          </Form.Item>
+
+          {showSuccess && (
+            <div className="successMessage">
+              上传成功!
+            </div>
+          )}
+        </Form>
+      </div>
+    </div>
+    </div>
+  );
+}
+
+export default UploadTorrent;
+
diff --git a/src/test/TorrentUpload.test.jsx b/src/test/TorrentUpload.test.jsx
new file mode 100644
index 0000000..482184e
--- /dev/null
+++ b/src/test/TorrentUpload.test.jsx
@@ -0,0 +1,489 @@
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+import { render, screen, fireEvent, waitFor } from '@testing-library/react';
+import { MemoryRouter } from 'react-router-dom';
+import UploadTorrent from '../components/upload';
+import { Form, Select } from 'antd';
+
+// 模拟 axios
+vi.mock('axios');
+
+// 模拟 antd 的 message
+vi.mock('antd', async () => {
+  const actual = await vi.importActual('antd');
+  return {
+    ...actual,
+    message: {
+      success: vi.fn(),
+      error: vi.fn(),
+    },
+  };
+});
+
+describe('UploadTorrent 组件', () => {
+  const mockCategories = [
+    { categoryid: '1', category_name: '电影' },
+    { categoryid: '2', category_name: '剧集' },
+    { categoryid: '3', category_name: '音乐' },
+    { categoryid: '4', category_name: '动漫' },
+    { categoryid: '5', category_name: '游戏' },
+    { categoryid: '6', category_name: '综艺' },
+    { categoryid: '7', category_name: '体育' },
+    { categoryid: '8', category_name: '软件' },
+    { categoryid: '9', category_name: '学习资料' },
+    { categoryid: '10', category_name: '纪录片' },
+    { categoryid: '11', category_name: '音乐' },
+  ];
+
+  beforeEach(() => {
+    vi.clearAllMocks();
+    // 模拟 axios.get 返回分类数据
+    vi.mocked(axios.get).mockResolvedValueOnce({ data: mockCategories });
+  });
+
+  it('应该正确渲染而不崩溃', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(screen.getByText('上传种子')).toBeInTheDocument();
+    });
+
+    // 验证一些基本元素是否存在
+    expect(screen.getByText('封面图片')).toBeInTheDocument();
+    expect(screen.getByText('种子文件')).toBeInTheDocument();
+    expect(screen.getByText('标题')).toBeInTheDocument();
+    expect(screen.getByText('描述')).toBeInTheDocument();
+    expect(screen.getByText('分类')).toBeInTheDocument();
+    expect(screen.getByText('上传种子')).toBeInTheDocument();
+  });
+
+  it('应该加载分类数据', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 验证分类下拉框是否渲染了正确的选项
+    const categorySelect = screen.getByLabelText('分类');
+    expect(categorySelect).toBeInTheDocument();
+
+    // 打开下拉菜单并检查选项
+    fireEvent.mouseDown(categorySelect);
+    mockCategories.forEach(category => {
+      expect(screen.getByText(category.category_name)).toBeInTheDocument();
+    });
+  });
+
+  it('应该在选择分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"电影"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('电影'));
+
+    // 验证电影相关的字段是否显示
+    expect(screen.getByLabelText('字幕/说明')).toBeInTheDocument();
+    expect(screen.getByLabelText('地区')).toBeInTheDocument();
+    expect(screen.getByLabelText('年份')).toBeInTheDocument();
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('编码格式')).toBeInTheDocument();
+    expect(screen.getByLabelText('分辨率')).toBeInTheDocument();
+  });
+
+  it('应该在选择"剧集"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"剧集"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('剧集'));
+
+    // 验证剧集相关的字段是否显示
+    expect(screen.getByLabelText('地区')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+  });
+
+  it('应该在选择"游戏"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"游戏"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('游戏'));
+
+    // 验证游戏相关的字段是否显示
+    expect(screen.getByLabelText('平台')).toBeInTheDocument();
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('语言')).toBeInTheDocument();
+    expect(screen.getByLabelText('数据类型')).toBeInTheDocument();
+  });
+
+  it('应该在选择"综艺"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"综艺"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('综艺'));
+
+    // 验证综艺相关的字段是否显示
+    expect(screen.getByLabelText('是否大陆综艺')).toBeInTheDocument();
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+  });
+
+  it('应该在选择"动漫"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"动漫"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('动漫'));
+
+    // 验证动漫相关的字段是否显示
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+    expect(screen.getByLabelText('分辨率')).toBeInTheDocument();
+  });
+
+  it('应该在选择"学习资料"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"学习资料"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('学习资料'));
+
+    // 验证学习资料相关的字段是否显示
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+  });
+
+  it('应该在选择"纪录片"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"纪录片"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('纪录片'));
+
+    // 验证纪录片相关的字段是否显示
+    expect(screen.getByLabelText('年份')).toBeInTheDocument();
+    expect(screen.getByLabelText('视频源')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+  });
+
+  it('应该在选择"音乐"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"音乐"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('音乐'));
+
+    // 验证音乐相关的字段是否显示
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('地区')).toBeInTheDocument();
+    expect(screen.getByLabelText('风格')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+  });
+
+  it('应该在选择"软件"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"软件"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('软件'));
+
+    // 验证软件相关的字段是否显示
+    expect(screen.getByLabelText('平台')).toBeInTheDocument();
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+  });
+
+  it('应该在选择"体育"分类后显示相应的动态字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"体育"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('体育'));
+
+    // 验证体育相关的字段是否显示
+    expect(screen.getByLabelText('类型')).toBeInTheDocument();
+    expect(screen.getByLabelText('格式')).toBeInTheDocument();
+    expect(screen.getByLabelText('赛事类型')).toBeInTheDocument();
+  });
+
+  it('应该在选择分类后正确设置状态', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择"电影"分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('电影'));
+
+    // 验证状态是否正确设置
+    // 注意:由于状态是组件内部的,我们需要通过 UI 变化来间接验证
+    // 这里我们验证电影相关的字段是否显示
+    expect(screen.getByLabelText('字幕/说明')).toBeInTheDocument();
+  });
+
+  it('应该在选择种子文件后更新状态', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 模拟文件选择
+    const fileInput = screen.getByLabelText('种子文件').querySelector('input');
+    const mockFile = new File(['torrent content'], 'test.torrent', { type: 'application/x-bittorrent' });
+    fireEvent.change(fileInput, { target: { files: [mockFile] } });
+
+    // 验证文件是否被设置(通过 UI 变化间接验证)
+    // 由于我们无法直接访问组件状态,我们可以通过表单验证状态来间接验证
+    // 这里我们只是验证文件输入是否正常工作
+    expect(fileInput).toBeInTheDocument();
+  });
+
+  it('应该在选择封面图片后更新状态', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 模拟图片选择
+    const imageInput = screen.getByLabelText('封面图片').querySelector('input');
+    const mockImage = new File(['image content'], 'test.jpg', { type: 'image/jpeg' });
+    fireEvent.change(imageInput, { target: { files: [mockImage] } });
+
+    // 验证图片是否被设置(通过 UI 变化间接验证)
+    expect(imageInput).toBeInTheDocument();
+  });
+
+  it('应该在表单提交时验证必填字段', async () => {
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 直接提交表单而不填写任何字段
+    const submitButton = screen.getByText('上传种子');
+    fireEvent.click(submitButton);
+
+    // 验证错误消息是否显示
+    // 注意:由于我们使用了 antd 的 Form,错误消息可能由 antd 内部处理
+    // 我们可以通过检查是否有错误提示来验证
+    // 这里我们只是验证表单提交被调用
+    // 更详细的验证可能需要更复杂的测试设置
+  });
+
+  it('应该在填写所有必填字段后成功提交表单', async () => {
+    // 模拟 axios.post
+    vi.mocked(axios.post).mockResolvedValueOnce({ data: {} });
+
+    render(
+      <MemoryRouter>
+        <UploadTorrent />
+      </MemoryRouter>
+    );
+
+    // 等待分类数据加载
+    await waitFor(() => {
+      expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/categories');
+    });
+
+    // 选择分类
+    const categorySelect = screen.getByLabelText('分类');
+    fireEvent.mouseDown(categorySelect);
+    fireEvent.click(screen.getByText('电影'));
+
+    // 填写标题
+    const titleInput = screen.getByLabelText('标题');
+    fireEvent.change(titleInput, { target: { value: '测试电影' } });
+
+    // 填写描述
+    const descriptionInput = screen.getByLabelText('描述');
+    fireEvent.change(descriptionInput, { target: { value: '这是一个测试电影的描述' } });
+
+    // 选择封面图片
+    const imageInput = screen.getByLabelText('封面图片').querySelector('input');
+    const mockImage = new File(['image content'], 'test.jpg', { type: 'image/jpeg' });
+    fireEvent.change(imageInput, { target: { files: [mockImage] } });
+
+    // 选择种子文件
+    const fileInput = screen.getByLabelText('种子文件').querySelector('input');
+    const mockFile = new File(['torrent content'], 'test.torrent', { type: 'application/x-bittorrent' });
+    fireEvent.change(fileInput, { target: { files: [mockFile] } });
+
+    // 填写电影相关字段
+    const captionInput = screen.getByLabelText('字幕/说明');
+    fireEvent.change(captionInput, { target: { value: '测试字幕' } });
+
+    const regionSelect = screen.getByLabelText('地区');
+    fireEvent.mouseDown(regionSelect);
+    fireEvent.click(screen.getByText('大陆'));
+
+    const yearInput = screen.getByLabelText('年份');
+    fireEvent.change(yearInput, { target: { value: '2023' } });
+
+    const genreSelect = screen.getByLabelText('类型');
+    fireEvent.mouseDown(genreSelect);
+    fireEvent.click(screen.getByText('动作'));
+
+    const codecFormatSelect = screen.getByLabelText('编码格式');
+    fireEvent.mouseDown(codecFormatSelect);
+    fireEvent.click(screen.getByText('H.264'));
+
+    const resolutionSelect = screen.getByLabelText('分辨率');
+    fireEvent.mouseDown(resolutionSelect);
+    fireEvent.click(screen.getByText('1080p'));
+
+    // 提交表单
+    const submitButton = screen.getByText('上传种子');
+    fireEvent.click(submitButton);
+
+    // 验证 axios.post 是否被调用
+    expect(axios.post).toHaveBeenCalledWith(
+      'http://localhost:8080/torrent/upload',
+      expect.any(FormData),
+      {
+        headers: { 'Content-Type': 'multipart/form-data' },
+        responseType: 'blob',
+      }
+    );
+
+    // 验证成功消息是否显示
+    expect(vi.mocked(message.success)).toHaveBeenCalledWith('上传成功!');
+  });
+});
\ No newline at end of file