diff --git a/front/src/AnimePage.js b/front/src/AnimePage.js
index d17f3cc..97bf453 100644
--- a/front/src/AnimePage.js
+++ b/front/src/AnimePage.js
@@ -30,17 +30,16 @@
 ];
 
 const areaTabs = [
-  { label: "国创", icon: <EmojiPeopleIcon fontSize="small" /> },
-  { label: "日漫", icon: <EmailIcon fontSize="small" /> },
-  { label: "欧美动漫", icon: <PersonIcon fontSize="small" /> },
-  { label: "韩漫", icon: <EmojiPeopleIcon fontSize="small" /> },
-  // { label: "其他", icon: <PersonIcon fontSize="small" /> },
+  { label: "大陆", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "港台", icon: <EmailIcon fontSize="small" /> },
+  { label: "欧美", icon: <PersonIcon fontSize="small" /> },
+  { label: "日韩", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "其他", icon: <PersonIcon fontSize="small" /> },
 ];
 
 export default function AnimePage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [animeList, setAnimeList] = React.useState([]);
 
   // 每个tab对应的动漫类型
   const animeTypesList = [
@@ -52,15 +51,6 @@
   ];
   const animeTypes = animeTypesList[activeTab] || [];
 
-  React.useEffect(() => {
-    // 假设后端接口为 /api/animes?area=大陆
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => setAnimeList(data))
-      .catch(() => setAnimeList([]));
-  }, [activeTab]);
-
   return (
     <div className="container">
       {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
@@ -118,39 +108,21 @@
             </tr>
           </thead>
           <tbody>
-            {animeList.length > 0 ? (
-              animeList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              animeTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {animeTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td>发布者{index + 1}</td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/App.js b/front/src/App.js
index 240f958..225689e 100644
--- a/front/src/App.js
+++ b/front/src/App.js
@@ -1,5 +1,5 @@
 import React from "react";
-import { BrowserRouter as Router, Routes, Route, useNavigate, Link } from "react-router-dom";
+import { BrowserRouter as Router, Routes, Route, useNavigate, Link, Navigate } from "react-router-dom";
 import MovieIcon from "@mui/icons-material/Movie";
 import EmailIcon from "@mui/icons-material/Email";
 import MusicNoteIcon from "@mui/icons-material/MusicNote";
@@ -19,6 +19,8 @@
 import UserProfile from "./UserProfile";
 import PublishPage from "./PublishPage";
 import TorrentDetailPage from './TorrentDetailPage';
+import LoginPage from './LoginPage';
+import RegisterPage from './RegisterPage';
 
 const navItems = [
   { label: "电影", icon: <MovieIcon />, path: "/movie" },
@@ -142,7 +144,9 @@
   return (
     <Router>
       <Routes>
-        <Route path="/" element={<Home />} />
+        <Route path="/login" element={<LoginPage />} />
+        <Route path="/register" element={<RegisterPage />} />
+        <Route path="/" element={<Navigate to="/login" replace />} />
         <Route path="/movie" element={<MoviePage />} />
         <Route path="/tv" element={<TVPage />} />
         <Route path="/music" element={<MusicPage />} />
diff --git a/front/src/GamePage.js b/front/src/GamePage.js
index 2528acd..23383b6 100644
--- a/front/src/GamePage.js
+++ b/front/src/GamePage.js
@@ -21,13 +21,7 @@
   { label: "发布", icon: <AccountCircleIcon />, path: "/publish" }, // Added Publish option
 ];
 
-const gameTypesList = [
-  ["PC"],
-  ["主机"],
-  ["移动"],
-  ["掌机"],
-  ["视频"]
-];
+const gameTypes = ["PC", "主机", "移动", "掌机", "视频"];
 
 const areaTabs = [
   { label: "PC", icon: <MovieIcon fontSize="small" /> },
@@ -37,20 +31,15 @@
   { label: "视频", icon: <PersonIcon fontSize="small" /> },
 ];
 
+const exampleTorrents = [
+  { type: "RPG", title: "实例1", id: 1 },
+  { type: "Shooter", title: "实例2", id: 2 },
+  { type: "Adventure", title: "实例3", id: 3 },
+];
+
 export default function GamePage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = useState(0);
-  const [gameList, setGameList] = useState([]);
-
-  const gameTypes = gameTypesList[activeTab] || [];
-
-  React.useEffect(() => {
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => setGameList(data))
-      .catch(() => setGameList([]));
-  }, [activeTab]);
 
   return (
     <div className="container">
@@ -164,39 +153,27 @@
             </tr>
           </thead>
           <tbody>
-            {gameList.length > 0 ? (
-              gameList.map((item, idx) => (
-                <tr key={item.id || idx}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              gameTypes.map((type, idx) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      种子{idx + 1}
-                    </a>
-                  </td>
-                  <td></td>
-                </tr>
-              ))
-            )}
+            {gameTypes.map((type, idx) => (
+              <tr key={type}>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    种子{idx + 1}
+                  </a>
+                </td>
+                <td></td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/InfoPage.js b/front/src/InfoPage.js
index 755d922..1e00527 100644
--- a/front/src/InfoPage.js
+++ b/front/src/InfoPage.js
@@ -40,7 +40,6 @@
 export default function InfoPage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [infoList, setInfoList] = React.useState(0);
 
   // 每个tab对应的资料类型
   const infoTypesList = [
@@ -52,18 +51,6 @@
   ];
   const infoTypes = infoTypesList[activeTab] || [];
 
-  React.useEffect(() => {
-    // 这里假设后端接口为 /api/get-seed-list-by-tag?tag=大陆
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => {
-        console.log('资料区返回数据:', data);
-        setInfoList(data);
-      })
-      .catch(() => setInfoList([]));
-  }, [activeTab]);
-
   return (
     <div className="container">
       {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
@@ -176,39 +163,27 @@
             </tr>
           </thead>
           <tbody>
-            {infoList.length > 0 ? (
-              infoList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              infoTypesList.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {infoTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td>发布者{index + 1}</td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/LoginPage.js b/front/src/LoginPage.js
new file mode 100644
index 0000000..59a1b2b
--- /dev/null
+++ b/front/src/LoginPage.js
@@ -0,0 +1,100 @@
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { Input } from 'antd';
+import './App.css';
+
+const LoginPage = () => {
+  const [formData, setFormData] = useState({ username: '', password: '' });
+  const [errorMessage, setErrorMessage] = useState('');
+  const navigate = useNavigate();
+
+  const handleChange = (e) => {
+    const { name, value } = e.target;
+    setFormData({ ...formData, [name]: value });
+  };
+
+  const handleLogin = () => {
+    if (formData.password.length < 8) {
+      setErrorMessage('密码必须至少包含八位字符！');
+      return;
+    }
+
+    // Simulate successful login
+    setErrorMessage('');
+    navigate('/');
+  };
+
+  const handleRegister = () => {
+    navigate('/register');
+  };
+
+  // 自动填充注册信息
+  React.useEffect(() => {
+    const regUser = sessionStorage.getItem('registeredUser');
+    if (regUser) {
+      try {
+        const { username, password } = JSON.parse(regUser);
+        setFormData({ username, password });
+        sessionStorage.removeItem('registeredUser');
+      } catch {}
+    }
+  }, []);
+
+  return (
+    <div className="login-page" style={{ minHeight: '100vh', background: 'linear-gradient(135deg, #e0e7ff 0%, #f0f8ff 100%)', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
+      <div className="login-form-container" style={{ width: 360, padding: '40px 32px 80px 32px', borderRadius: 18, boxShadow: '0 8px 32px rgba(60, 80, 180, 0.10)', background: '#fff', position: 'relative' }}>
+        <h1 style={{ textAlign: 'center', marginBottom: 32, color: '#222', fontWeight: 700, fontSize: 32, letterSpacing: 2 }}>欢迎登录</h1>
+        <form className="login-form">
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="username" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>用户名</label>
+            <Input
+              placeholder="请输入用户名"
+              id="username"
+              name="username"
+              value={formData.username}
+              onChange={handleChange}
+              required
+              style={{ width: '100%', padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+            />
+          </div>
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="password" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>密码</label>
+            <div style={{ display: 'flex', alignItems: 'center' }}>
+              <Input
+                placeholder="请输入密码"
+                type="password"
+                id="password"
+                name="password"
+                value={formData.password}
+                onChange={handleChange}
+                required
+                style={{ flex: 1, padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+              />
+            </div>
+          </div>
+          {errorMessage && <p style={{ color: '#e53935', textAlign: 'center', marginBottom: 18, fontWeight: 500 }}>{errorMessage}</p>}
+          <div className="form-row button-row" style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', marginTop: 32, position: 'static', gap: 16 }}>
+            <button
+              type="button"
+              className="login-button"
+              onClick={handleLogin}
+              style={{ width: 120, padding: '10px 0', borderRadius: 8, border: 'none', background: 'linear-gradient(90deg, #34c759 0%, #5be584 100%)', color: '#fff', fontWeight: 600, fontSize: 16, cursor: 'pointer', boxShadow: '0 2px 8px #b2eac2', marginBottom: 12 }}
+            >
+              登录
+            </button>
+            <button
+              type="button"
+              className="register-button"
+              onClick={handleRegister}
+              style={{ width: 120, padding: '10px 0', borderRadius: 8, border: 'none', background: 'linear-gradient(90deg, #4f8cff 0%, #6ad1ff 100%)', color: '#fff', fontWeight: 600, fontSize: 16, cursor: 'pointer', boxShadow: '0 2px 8px #b2d8ea' }}
+            >
+              注册
+            </button>
+          </div>
+        </form>
+      </div>
+    </div>
+  );
+};
+
+export default LoginPage;
diff --git a/front/src/MoviePage.js b/front/src/MoviePage.js
index c84797b..20e4a4f 100644
--- a/front/src/MoviePage.js
+++ b/front/src/MoviePage.js
@@ -26,7 +26,7 @@
   { label: "港台", icon: <EmailIcon fontSize="small" /> },
   { label: "欧美", icon: <PersonIcon fontSize="small" /> },
   { label: "日韩", icon: <EmojiPeopleIcon fontSize="small" /> },
-  // { label: "其他", icon: <PersonIcon fontSize="small" /> },
+  { label: "其他", icon: <PersonIcon fontSize="small" /> },
 ];
 
 const exampleTorrents = [
@@ -38,7 +38,6 @@
 export default function MoviePage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [movieList, setMovieList] = React.useState([]);
 
   // 每个tab对应的电影类型
   const movieTypesList = [
@@ -50,18 +49,6 @@
   ];
   const movieTypes = movieTypesList[activeTab] || [];
 
-  React.useEffect(() => {
-    // 这里假设后端接口为 /api/get-seed-list-by-tag?tag=大陆
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => {
-        console.log('电影区返回数据:', data);
-        setMovieList(data);
-      })
-      .catch(() => setMovieList([]));
-  }, [activeTab]);
-
   return (
     <div className="container">
       {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
@@ -119,39 +106,21 @@
             </tr>
           </thead>
           <tbody>
-            {movieList.length > 0 ? (
-              movieList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              movieTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {movieTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td>发布者{index + 1}</td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/MusicPage.js b/front/src/MusicPage.js
index b39b0ee..4a9c465 100644
--- a/front/src/MusicPage.js
+++ b/front/src/MusicPage.js
@@ -22,11 +22,11 @@
 ];
 
 const areaTabs = [
-  { label: "古典音乐", icon: <MovieIcon fontSize="small" /> },
-  { label: "流行音乐", icon: <EmailIcon fontSize="small" /> },
-  { label: "摇滚", icon: <PersonIcon fontSize="small" /> },
-  { label: "电子音乐", icon: <EmojiPeopleIcon fontSize="small" /> },
-  { label: "说唱", icon: <PersonIcon fontSize="small" /> },
+  { label: "大陆", icon: <MovieIcon fontSize="small" /> },
+  { label: "港台", icon: <EmailIcon fontSize="small" /> },
+  { label: "欧美", icon: <PersonIcon fontSize="small" /> },
+  { label: "日韩", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "其他", icon: <PersonIcon fontSize="small" /> },
 ];
 
 const exampleTorrents = [
@@ -38,7 +38,6 @@
 export default function MusicPage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [musicList, setMusicList] = React.useState([]);
 
   // 每个tab对应的音乐类型
   const musicTypesList = [
@@ -50,15 +49,6 @@
   ];
   const musicTypes = musicTypesList[activeTab] || [];
 
-  React.useEffect(() => {
-    // 假设后端接口为 /api/musics?area=大陆
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => setMusicList(data))
-      .catch(() => setMusicList([]));
-  }, [activeTab]);
-
   return (
     <div className="container music-bg">
       {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
@@ -116,39 +106,21 @@
             </tr>
           </thead>
           <tbody>
-            {musicList.length > 0 ? (
-              musicList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              musicTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {musicTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td>发布者{index + 1}</td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/PublishPage.js b/front/src/PublishPage.js
index a1a0e8f..81ac790 100644
--- a/front/src/PublishPage.js
+++ b/front/src/PublishPage.js
@@ -9,17 +9,6 @@
     title: '',
     subtitle: ''
   });
-  const [subType, setSubType] = useState('');
-
-  const typeOptions = {
-    '电影': ['大陆', '港台', '欧美', '日韩'],
-    '剧集': ['国产电视剧', '港剧', '欧美剧', '日韩剧'],
-    '音乐': ['古典音乐', '流行音乐', '摇滚', '电子音乐', '说唱'],
-    '动漫': ['国创', '日漫', '欧美动漫', '韩漫'],
-    '游戏': ['PC', '主机', '移动', '掌机', '视频'],
-    '体育': ['篮球', '足球', '羽毛球', '排球', '电竞'],
-    '资料': ['出版物', '学习教程', '素材模板', '演讲交流', '日常娱乐'],
-  };
 
   const handleChange = (e) => {
     const { name, value } = e.target;
@@ -36,37 +25,9 @@
     }
   };
 
-  const handleSubmit = async (e) => {
+  const handleSubmit = (e) => {
     e.preventDefault();
-    // 假设userid和tag可以从表单或用户信息中获取，这里用示例数据
-    const userid = '550e8400-e29b-41d4-a716-446655440000';
-    const tag = formData.type ? formData.type : '高清';
-    if (!formData.torrentFile) {
-      alert('请上传.torrent文件');
-      return;
-    }
-    const data = new FormData();
-    data.append('userid', userid);
-    data.append('title', formData.title);
-    data.append('tag', subType);
-    data.append('file', formData.torrentFile);
-    data.append('subtitle', formData.subtitle);
-    // data.append('subtype', subType);
-    // console.log(data.get('tag'));
-
-    try {
-      const response = await fetch('http://192.168.5.9:8080/api/save-torrent', {
-        method: 'POST',
-        body: data,
-      });
-      if (response.ok) {
-        alert('上传成功！');
-      } else {
-        alert('上传失败');
-      }
-    } catch (err) {
-      alert('网络错误');
-    }
+    console.log('Form Data Submitted:', formData);
   };
 
   return (
@@ -75,7 +36,7 @@
       <form onSubmit={handleSubmit} className="publish-form">
         <div className="form-row">
           <label htmlFor="type">类型</label>
-          <select name="type" id="type" value={formData.type} onChange={e => { handleChange(e); setSubType(''); }} required>
+          <select name="type" id="type" value={formData.type} onChange={handleChange} required>
             <option value="">请选择类型</option>
             <option value="电影">电影</option>
             <option value="剧集">剧集</option>
@@ -86,17 +47,6 @@
             <option value="资料">资料</option>
           </select>
         </div>
-        {formData.type && typeOptions[formData.type] && (
-          <div className="form-row">
-            <label htmlFor="subtype">具体类型</label>
-            <select name="subtype" id="subtype" value={subType} onChange={e => setSubType(e.target.value)} required>
-              <option value="">请选择具体类型</option>
-              {typeOptions[formData.type].map(opt => (
-                <option key={opt} value={opt}>{opt}</option>
-              ))}
-            </select>
-          </div>
-        )}
 
         <div className="form-row">
           <label htmlFor="torrentFile">种子文件</label>
@@ -123,7 +73,7 @@
         </div>
 
         <div className="form-row">
-          <label htmlFor="subtitle">副标题</label>
+          <label htmlFor="subtitle">种子简介</label>
           <input
             type="text"
             id="subtitle"
diff --git a/front/src/RegisterPage.js b/front/src/RegisterPage.js
new file mode 100644
index 0000000..ffd11a4
--- /dev/null
+++ b/front/src/RegisterPage.js
@@ -0,0 +1,109 @@
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { Input } from 'antd';
+import './App.css';
+
+const RegisterPage = () => {
+  const [formData, setFormData] = useState({ username: '', password: '', inviteCode: '', confirmPassword: '' });
+  const [errorMessage, setErrorMessage] = useState('');
+  const navigate = useNavigate();
+
+  const handleChange = (e) => {
+    const { name, value } = e.target;
+    setFormData({ ...formData, [name]: value });
+  };
+
+  const handleRegister = () => {
+    if (formData.password.length !== 8) {
+      setErrorMessage('密码必须为八位字符！');
+      return;
+    }
+
+    if (formData.password !== formData.confirmPassword) {
+      setErrorMessage('两次输入的密码不匹配！');
+      return;
+    }
+
+    // Simulate successful registration
+    setErrorMessage('');
+    // 存储注册信息到 sessionStorage
+    sessionStorage.setItem('registeredUser', JSON.stringify({ username: formData.username, password: formData.password }));
+    alert('注册成功！');
+    navigate('/login');
+  };
+
+  return (
+    <div className="register-page" style={{ minHeight: '100vh', background: 'linear-gradient(135deg, #e0e7ff 0%, #f0f8ff 100%)', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
+      <div className="register-form-container" style={{ width: 360, padding: '40px 32px 64px 32px', borderRadius: 18, boxShadow: '0 8px 32px rgba(60, 80, 180, 0.10)', background: '#fff', position: 'relative' }}>
+        <h1 style={{ textAlign: 'center', marginBottom: 32, color: '#222', fontWeight: 700, fontSize: 32, letterSpacing: 2 }}>欢迎注册</h1>
+        <form className="register-form">
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="inviteCode" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>被邀请邮箱</label>
+            <Input
+              placeholder="请输入被邀请邮箱"
+              id="inviteCode"
+              name="inviteCode"
+              value={formData.inviteCode || ''}
+              onChange={handleChange}
+              required
+              style={{ width: '100%', padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+            />
+          </div>
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="username" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>用户名</label>
+            <Input
+              placeholder="请输入用户名"
+              id="username"
+              name="username"
+              value={formData.username}
+              onChange={handleChange}
+              required
+              style={{ width: '100%', padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+            />
+          </div>
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="password" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>密码</label>
+            <div style={{ display: 'flex', alignItems: 'center' }}>
+              <Input
+                placeholder="请输入密码"
+                type="password"
+                id="password"
+                name="password"
+                value={formData.password}
+                onChange={handleChange}
+                required
+                style={{ flex: 1, padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+              />
+            </div>
+          </div>
+          <div className="form-row" style={{ marginBottom: 24 }}>
+            <label htmlFor="confirmPassword" style={{ display: 'block', marginBottom: 8, color: '#333', fontWeight: 500, fontSize: 16 }}>确认密码</label>
+            <Input
+              placeholder="请再次输入密码"
+              type="password"
+              id="confirmPassword"
+              name="confirmPassword"
+              value={formData.confirmPassword || ''}
+              onChange={handleChange}
+              required
+              style={{ width: '100%', padding: '12px', borderRadius: 8, fontSize: 16, background: '#f7faff' }}
+            />
+          </div>
+          {errorMessage && <p style={{ color: '#e53935', textAlign: 'center', marginBottom: 18, fontWeight: 500 }}>{errorMessage}</p>}
+          <div className="form-row button-row" style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', position: 'absolute', left: 0, right: 0, bottom: 24 }}>
+            <button
+              type="button"
+              className="register-button"
+              onClick={handleRegister}
+              style={{ width: 120, padding: '10px 0', borderRadius: 8, border: 'none', background: 'linear-gradient(90deg, #4f8cff 0%, #6ad1ff 100%)', color: '#fff', fontWeight: 600, fontSize: 16, cursor: 'pointer', boxShadow: '0 2px 8px #b2d8ea' }}
+            >
+              注册
+            </button>
+          </div>
+        </form>
+      </div>
+    </div>
+  );
+};
+
+export default RegisterPage;
diff --git a/front/src/SportPage.js b/front/src/SportPage.js
index 3299a93..569f022 100644
--- a/front/src/SportPage.js
+++ b/front/src/SportPage.js
@@ -40,7 +40,6 @@
 export default function SportPage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [sportList, setSportList] = React.useState([]);
 
   // 每个tab对应的运动类型
   const sportTypesList = [
@@ -52,15 +51,6 @@
   ];
   const sportTypes = sportTypesList[activeTab] || [];
 
-  React.useEffect(() => {
-    // 假设后端接口为 /api/sports?area=篮球
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => setSportList(data))
-      .catch(() => setSportList([]));
-  }, [activeTab]);
-
   return (
     <div className="container">
       {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
@@ -173,39 +163,27 @@
             </tr>
           </thead>
           <tbody>
-            {sportList.length > 0 ? (
-              sportList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              sportTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: "#1a237e", textDecoration: "none" }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {sportTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a
+                    href={`/torrent/${type}`}
+                    style={{ color: "#1a237e", textDecoration: "none" }}
+                  >
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td>发布者{index + 1}</td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/TVPage.js b/front/src/TVPage.js
index bf1db6c..13b7391 100644
--- a/front/src/TVPage.js
+++ b/front/src/TVPage.js
@@ -21,37 +21,40 @@
   { label: "发布", icon: <AccountCircleIcon />, path: "/publish" }, // Added Publish option
 ];
 
-const tvTypesList = [
-  ["华语剧集（大陆）", "欧美剧集", "日韩剧集", "港台剧集", "其他"], // 大陆
-  ["港台都市", "港台爱情", "港台悬疑", "港台其他"], // 港台
-  ["欧美悬疑", "欧美历史", "欧美其他"], // 欧美
-  ["日韩青春", "日韩家庭", "日韩其他"], // 日韩
-  ["其他类型1", "其他类型2"] // 其他
+const tvTypes = [
+  "华语剧集（大陆）",
+  "欧美剧集",
+  "日韩剧集",
+  "港台剧集",
+  "其他"
 ];
 
 const areaTabs = [
-  { label: "国产电视剧", icon: <MovieIcon fontSize="small" /> },
-  { label: "港剧", icon: <EmailIcon fontSize="small" /> },
-  { label: "欧美剧", icon: <PersonIcon fontSize="small" /> },
-  { label: "日韩剧", icon: <EmojiPeopleIcon fontSize="small" /> },
-  // { label: "其他", icon: <PersonIcon fontSize="small" /> },
+  { label: "大陆", icon: <MovieIcon fontSize="small" /> },
+  { label: "港台", icon: <EmailIcon fontSize="small" /> },
+  { label: "欧美", icon: <PersonIcon fontSize="small" /> },
+  { label: "日韩", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "其他", icon: <PersonIcon fontSize="small" /> },
+];
+
+const exampleTorrents = [
+  { type: "Drama", title: "实例1", id: 1 },
+  { type: "Comedy", title: "实例2", id: 2 },
+  { type: "Sci-Fi", title: "实例3", id: 3 },
 ];
 
 export default function TVPage() {
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = React.useState(0);
-  const [tvList, setTvList] = React.useState([]);
-
-  React.useEffect(() => {
-    // 假设后端接口为 /api/tvs?area=大陆
-    const area = areaTabs[activeTab].label;
-    fetch(`http://192.168.5.9:8080/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
-      .then(res => res.json())
-      .then(data => setTvList(data))
-      .catch(() => setTvList([]));
-  }, [activeTab]);
 
   // 每个tab对应的剧集类型
+  const tvTypesList = [
+    ["华语剧集（大陆）", "欧美剧集", "日韩剧集", "港台剧集", "其他"], // 大陆
+    ["港台都市", "港台爱情", "港台悬疑", "港台其他"], // 港台
+    ["欧美悬疑", "欧美历史", "欧美其他"], // 欧美
+    ["日韩青春", "日韩家庭", "日韩其他"], // 日韩
+    ["其他类型1", "其他类型2"] // 其他
+  ];
   const tvTypes = tvTypesList[activeTab] || [];
 
   return (
@@ -111,39 +114,21 @@
             </tr>
           </thead>
           <tbody>
-            {tvList.length > 0 ? (
-              tvList.map((item, index) => (
-                <tr key={item.id || index}>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.seedtag}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${item.seedid}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {item.title}
-                    </a>
-                  </td>
-                  <td>{item.user.username}</td>
-                </tr>
-              ))
-            ) : (
-              tvTypes.map((type, index) => (
-                <tr key={type}>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      {type}
-                    </a>
-                  </td>
-                  <td>
-                    <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
-                      种子{index + 1}
-                    </a>
-                  </td>
-                  <td>发布者{index + 1}</td>
-                </tr>
-              ))
-            )}
+            {tvTypes.map((type, index) => (
+              <tr key={type}>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    {type}
+                  </a>
+                </td>
+                <td>
+                  <a href={`/torrent/${type}`} style={{ color: '#1a237e', textDecoration: 'none' }}>
+                    种子{index + 1}
+                  </a>
+                </td>
+                <td></td>
+              </tr>
+            ))}
           </tbody>
         </table>
       </div>
diff --git a/front/src/TorrentDetailPage.js b/front/src/TorrentDetailPage.js
index 8d3ee43..a23dce7 100644
--- a/front/src/TorrentDetailPage.js
+++ b/front/src/TorrentDetailPage.js
@@ -4,81 +4,14 @@
 
 export default function TorrentDetailPage() {
   const { torrentId } = useParams();
-  const [detail, setDetail] = React.useState(null);
-  const [loading, setLoading] = React.useState(true);
-  const [error, setError] = React.useState(null);
-  // 假设你从某个地方获取了 userId（例如登录状态、localStorage 等）
-  const [userId] = React.useState('user1550e8400-e29b-41d4-a716-44665544000023'); // 替换为实际的用户 ID
-
-  const handleClick = () => {
-    // 构造下载 URL，包含 userId 和 torrentId 参数
-    console.log(torrentId)
-    const downloadUrl = `http://192.168.5.9:8080/api/get-torrent?userId=${encodeURIComponent(userId)}&torrentId=${encodeURIComponent(torrentId)}`;
-    
-    // 发起 GET 请求下载文件
-    fetch(downloadUrl)
-      .then(response => {
-        if (!response.ok) {
-          throw new Error('下载失败');
-        }
-        return response.blob();
-      })
-      .then(blob => {
-        // 创建下载链接并触发下载
-        const url = window.URL.createObjectURL(blob);
-        const a = document.createElement('a');
-        a.href = url;
-        a.download = `torrent-${torrentId}.torrent`;
-        document.body.appendChild(a);
-        a.click();
-        window.URL.revokeObjectURL(url);
-        document.body.removeChild(a);
-      })
-      .catch(error => {
-        console.error('下载错误:', error);
-        alert('下载失败: ' + error.message);
-      });
-  };
-
-  React.useEffect(() => {
-    setLoading(true);
-    setError(null);
-    fetch(`http://192.168.5.9:8080/api/torrent-detail?id=${encodeURIComponent(torrentId)}`)
-      .then(res => {
-        if (!res.ok) throw new Error('网络错误');
-        return res.json();
-      })
-      .then(data => {
-        setDetail(data);
-        setLoading(false);
-      })
-      .catch(err => {
-        setError(err.message);
-        setLoading(false);
-      });
-  }, [torrentId]);
-
-  if (loading) return <div className="container"><h1>加载中...</h1></div>;
-  if (error) return <div className="container"><h1>加载失败: {error}</h1></div>;
-  if (!detail) return <div className="container"><h1>未找到详情</h1></div>;
 
   return (
     <div className="container">
       <h1>种子详情页</h1>
-      <h2 style={{ fontSize: 'inherit', fontWeight: 'normal', textAlign: 'left' }}>标题: {detail.title || `种子${torrentId}`}</h2>
-      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: {detail.description || `这是种子${torrentId}的详细信息。`}</p>
+      <h2 style={{ fontSize: 'inherit', fontWeight: 'normal', textAlign: 'left' }}>标题: 种子{torrentId}</h2>
+      <p style={{ fontSize: 'inherit', textAlign: 'left' }}>简介: 这是种子{torrentId}的详细信息。</p>
       <div style={{ textAlign: 'center', marginTop: '20px' }}>
-        <button 
-          style={{ 
-            padding: '10px 20px', 
-            fontSize: '16px', 
-            cursor: 'pointer', 
-            backgroundColor: '#d3f0ff', 
-            border: 'none', 
-            borderRadius: '4px' 
-          }} 
-          onClick={handleClick}
-        >
+        <button style={{ padding: '10px 20px', fontSize: '16px', cursor: 'pointer', backgroundColor: '#d3f0ff', border: 'none', borderRadius: '4px' }}>
           下载
         </button>
       </div>
diff --git a/front/src/UserProfile.js b/front/src/UserProfile.js
index 4737033..0269723 100644
--- a/front/src/UserProfile.js
+++ b/front/src/UserProfile.js
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from "react";
+import React, { useState } from "react";
 import AccountCircleIcon from "@mui/icons-material/AccountCircle";
 import { useNavigate } from "react-router-dom";
 import "./App.css";
@@ -6,109 +6,21 @@
 export default function UserProfile() {
   const navigate = useNavigate();
   const [userInfo, setUserInfo] = useState({
-    avatar_url: "",
     username: "示例用户",
     email: "user@example.com",
-    invite_left: "",
+    company: "",
     school: "",
-    account_status: "",
-    gender: "",
+    birthday: "",
   });
   const [tempUserInfo, setTempUserInfo] = useState({ ...userInfo });
-  const [userSeeds, setUserSeeds] = useState([]);
-  const [userStats, setUserStats] = useState({
-    magic: 0,
-    upload: 0,
-    download: 0,
-    ratio: 0,
-  });
-
-  // 新增：根据userid从后端获取用户信息
-  useEffect(() => {
-    const fetchUserInfo = async () => {
-      // 假设userid存储在localStorage或其他地方
-      // const userid = localStorage.getItem("userid");
-      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
-      if (!userid) return;
-      try {
-        const res = await fetch(`/api/user-profile?userid=${userid}`);
-        if (res.ok) {
-          const data = await res.json();
-          setUserInfo(data);
-          setTempUserInfo(data);
-        }
-      } catch (err) {
-        // 可以根据需要处理错误
-        console.error("获取用户信息失败", err);
-      }
-    };
-    fetchUserInfo();
-  }, []);
-
-  // 动态加载用户上传种子列表
-  useEffect(() => {
-    const fetchUserSeeds = async () => {
-      // const userid = localStorage.getItem("userid");
-      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
-      if (!userid) return;
-      try {
-        const res = await fetch(`/api/user-seeds?userid=${userid}`);
-        if (res.ok) {
-          const data = await res.json();
-          setUserSeeds(data);
-        }
-      } catch (err) {
-        console.error("获取种子列表失败", err);
-      }
-    };
-    fetchUserSeeds();
-  }, []);
-
-  // 动态加载用户活跃度信息
-  useEffect(() => {
-    const fetchUserStats = async () => {
-      // const userid = localStorage.getItem("userid");
-      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
-      if (!userid) return;
-      try {
-        const res = await fetch(`/api/user-stats?userid=${userid}`);
-        if (res.ok) {
-          const data = await res.json();
-          setUserStats(data);
-        }
-      } catch (err) {
-        console.error("获取活跃度信息失败", err);
-      }
-    };
-    fetchUserStats();
-  }, []);
 
   const handleInputChange = (field, value) => {
     setTempUserInfo({ ...tempUserInfo, [field]: value });
   };
 
-  const handleSave = async () => {
+  const handleSave = () => {
     setUserInfo({ ...tempUserInfo });
-    // 获取userid
-    // const userid = localStorage.getItem("userid");
-    const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
-    try {
-      const res = await fetch('/api/change-profile', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({ userid, ...tempUserInfo }),
-      });
-      if (res.ok) {
-        alert("信息已保存！");
-      } else {
-        alert("保存失败，请重试。");
-      }
-    } catch (err) {
-      alert("保存失败，请检查网络连接。");
-      console.error("保存用户信息失败", err);
-    }
+    alert("信息已保存！");
   };
 
   const handleAvatarClick = () => {
@@ -127,7 +39,7 @@
             <AccountCircleIcon style={{ fontSize: 90, color: '#1a237e', marginBottom: 12 }} />
             {tempUserInfo.avatar && (
               <img
-                src={tempUserInfo.avatar_url}
+                src={tempUserInfo.avatar}
                 alt="用户头像"
                 style={{
                   position: 'absolute',
@@ -155,19 +67,21 @@
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
             <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>邮箱：</b>
-            <span
-              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15, backgroundColor: '#f5f5f5', color: '#888' }}
-            >
-              {tempUserInfo.email}
-            </span>
+            <input
+              type="email"
+              value={tempUserInfo.email}
+              onChange={(e) => handleInputChange("email", e.target.value)}
+              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15 }}
+            />
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
-            <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>邀请剩余：</b>
-            <span
-              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15, backgroundColor: '#f5f5f5', color: '#888' }}
-            >
-              {tempUserInfo.invite_left}
-            </span>
+            <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>公司：</b>
+            <input
+              type="text"
+              value={tempUserInfo.company}
+              onChange={(e) => handleInputChange("company", e.target.value)}
+              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15 }}
+            />
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
             <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>学校：</b>
@@ -179,21 +93,22 @@
             />
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
-            <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>账号状态：</b>
-            <span
-              style={{ flex: 1, display: 'flex', alignItems: 'center', padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15, backgroundColor: '#f5f5f5', color: '#888' }}
-            >
-              {tempUserInfo.account_status === 1 || tempUserInfo.account_status === "1" ? "封禁" : "正常"}
-              <span style={{
-                display: 'inline-block',
-                width: 12,
-                height: 12,
-                borderRadius: '50%',
-                backgroundColor: tempUserInfo.account_status === 1 || tempUserInfo.account_status === "1" ? '#e53935' : '#43a047',
-                marginLeft: 10,
-                border: '1px solid #b2b2b2',
-              }} />
-            </span>
+            <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>生日：</b>
+            <input
+              type="date"
+              value={tempUserInfo.birthday}
+              onChange={(e) => handleInputChange("birthday", e.target.value)}
+              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15 }}
+            />
+          </div>
+          <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
+            <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>密码：</b>
+            <input
+              type="password"
+              value={tempUserInfo.password || ""}
+              onChange={(e) => handleInputChange("password", e.target.value)}
+              style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15 }}
+            />
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
             <b style={{ width: 72, textAlign: 'left', marginRight: 0, fontSize: 16 }}>性别：</b>
@@ -272,61 +187,15 @@
       {/* 上传种子列表 */}
       <div style={{ gridColumn: '2 / 3', gridRow: '1 / 2', background: '#fff', borderRadius: 18, boxShadow: '0 4px 24px #e0e7ff', padding: '20px' }}>
         <h3 style={{ color: '#1a237e', fontSize: 22, marginBottom: 18 }}>个人上传种子列表</h3>
-        <div style={{ border: '1px dashed #b2b2b2', borderRadius: 12, minHeight: 60, padding: 12 }}>
-          {userSeeds.length === 0 ? (
-            <div style={{ color: '#b2b2b2', fontSize: 18, textAlign: 'center' }}>（暂无上传种子）</div>
-          ) : (
-            <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>
-              {userSeeds.map((seed, idx) => (
-                <li
-                  key={seed.seed_id || idx}
-                  style={{ display: 'flex', alignItems: 'center', padding: '10px 0', borderBottom: '1px solid #e0e7ff', cursor: 'pointer' }}
-                  onClick={e => {
-                    // 阻止点击删除按钮时跳转
-                    if (e.target.classList.contains('delete-btn')) return;
-                    navigate(`/torrent/${seed.seed_id}`);
-                  }}
-                >
-                  <span style={{ flex: 2, fontWeight: 500, color: '#1a237e', textDecoration: 'underline' }}>{seed.title}</span>
-                  <span style={{ flex: 1, color: '#5c6bc0' }}>{seed.tags}</span>
-                  <span style={{ flex: 1, color: '#ff9800', textAlign: 'right' }}>人气: {seed.popularity}</span>
-                  <button
-                    className="delete-btn"
-                    style={{ marginLeft: 18, background: '#e53935', color: '#fff', border: 'none', borderRadius: 6, padding: '4px 14px', cursor: 'pointer', fontSize: 14 }}
-                    onClick={async (e) => {
-                      e.stopPropagation();
-                      // const userid = localStorage.getItem("userid");
-                      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
-                      try {
-                        const res = await fetch('/api/delete-seed', {
-                          method: 'POST',
-                          headers: { 'Content-Type': 'application/json' },
-                          body: JSON.stringify({ seed_id: seed.seed_id, userid }),
-                        });
-                        if (res.ok) {
-                          setUserSeeds(userSeeds.filter((s, i) => (s.seed_id || i) !== (seed.seed_id || idx)));
-                        } else {
-                          alert('删除失败，请重试');
-                        }
-                      } catch (err) {
-                        alert('删除失败，请检查网络');
-                      }
-                    }}
-                  >删除</button>
-                </li>
-              ))}
-            </ul>
-          )}
+        <div style={{ border: '1px dashed #b2b2b2', borderRadius: 12, height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#b2b2b2', fontSize: 18 }}>
+          （此处显示上传种子列表）
         </div>
       </div>
       {/* 活跃度模块 */}
       <div style={{ gridColumn: '2 / 3', gridRow: '2 / 3', background: '#fff', borderRadius: 18, boxShadow: '0 4px 24px #e0e7ff', padding: '20px' }}>
         <h3 style={{ color: '#1a237e', fontSize: 22, marginBottom: 18 }}>活跃度</h3>
-        <div style={{ border: '1px dashed #b2b2b2', borderRadius: 12, minHeight: 60, padding: 18, display: 'flex', flexDirection: 'column', gap: 12, fontSize: 18 }}>
-          <div>魔力值：<b style={{ color: '#1976d2' }}>{userStats.magic}</b></div>
-          <div>上传量：<b style={{ color: '#43a047' }}>{userStats.upload} GB</b></div>
-          <div>下载量：<b style={{ color: '#e53935' }}>{userStats.download} GB</b></div>
-          <div>上传/下载值：<b style={{ color: '#ff9800' }}>{userStats.ratio}</b></div>
+        <div style={{ border: '1px dashed #b2b2b2', borderRadius: 12, height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#b2b2b2', fontSize: 18 }}>
+          （此处显示活跃度信息）
         </div>
       </div>
     </div>
