diff --git a/src/pages/SeedList/SeedList.jsx b/src/pages/SeedList/SeedList.jsx
index adb2bb3..4f558fc 100644
--- a/src/pages/SeedList/SeedList.jsx
+++ b/src/pages/SeedList/SeedList.jsx
@@ -1,3 +1,4 @@
+// export default SeedList;
 import React, { useState, useEffect } from 'react';
 import { Link } from 'wouter';
 import axios from 'axios';
@@ -18,28 +19,28 @@
     const [errorMsg, setErrorMsg] = useState('');
     const { user } = useUser();
 
-
     const TAGS = ['猜你喜欢', '电影', '电视剧', '动漫', '音乐', '游戏', '综艺', '软件', '体育', '学习', '纪录片', '其他'];
 
-    const CATEGORY_MAP = {
-        '电影': '电影',
-        '电视剧': '电视剧',
-        '动漫': '动漫',
-        '音乐': '音乐',
-        '游戏': '游戏',
-        '综艺': '综艺',
-        '软件': '软件',
-        '体育': '体育',
-        '学习': '学习',
-        '纪录片': '纪录片',
-        '其他': '其他',
+const CATEGORY_MAP = {
+        '电影': 'movie',
+        '电视剧': 'tv',
+        '动漫': 'anime',
+        '音乐': 'music',
+        '游戏': 'game',
+        '综艺': 'variety',
+        '软件': 'software',
+        '体育': 'sports',
+        '学习': 'study',
+        '纪录片': 'documentary',
+        '其他': 'other',
         '猜你喜欢': '',        
         '种子列表': '',        
-    };
+};
+
 
     const buildQueryParams = () => {
         const category = CATEGORY_MAP[activeTab] || '';
-        const orderKey = sortOption === '最新' ? ['upload_time'] : (sortOption === '最热' ? ['downloads'] : ['upload_time']);
+        const orderKey = sortOption === '最新' ? 'upload_time' : (sortOption === '最热' ? 'downloads' : 'upload_time');
         const params = {
             page: 1,
             size: 20,
@@ -72,8 +73,7 @@
         setErrorMsg('');
         try {
             const params = buildQueryParams();
-            const response = await axios.get('/seeds/list', params);
-            // const response = await axios.get('/seeds/list', { params });
+            const response = await axios.get('/seeds/list', { params });
 
             const data = response.data;
 
@@ -119,7 +119,6 @@
         fetchSeeds();
     }, [activeTab, sortOption, selectedFilters, tagMode, searchTerm]);
 
-    // ✅ 修改后的下载函数
     const handleDownload = async (seedId) => {
         if (!user || !user.userId) {
             alert('请先登录再下载种子文件');
@@ -254,7 +253,6 @@
                         </div>
                         <div className="seed-list-body">
                             {seeds.map((seed, index) => {
-                                // 处理 tags 字段，兼容字符串和数组
                                 let tagsArray = [];
                                 if (seed.tags) {
                                     if (Array.isArray(seed.tags)) {
@@ -263,18 +261,15 @@
                                         try {
                                             tagsArray = JSON.parse(seed.tags);
                                             if (!Array.isArray(tagsArray)) {
-                                                // 解析后不是数组，按逗号分割
                                                 tagsArray = seed.tags.split(',').map(t => t.trim()).filter(t => t);
                                             }
                                         } catch {
-                                            // 解析失败，按逗号分割
                                             tagsArray = seed.tags.split(',').map(t => t.trim()).filter(t => t);
                                         }
                                     }
                                 }
 
                                 return (
-                                    
                                    <Link to={`/seed/${seed.id}`} key={index} className="seed-item-link">
                                         <div className="seed-item">
                                             {seed.imageUrl && (
@@ -300,7 +295,7 @@
                                             <div className="seed-item-downloads">{seed.downloads ?? 0} 次下载</div>
                                             <div
                                                 className="seed-item-actions"
-                                                onClick={e => e.stopPropagation()} // 阻止事件冒泡，避免跳转
+                                                onClick={e => e.stopPropagation()}
                                             >
                                                 <button
                                                     className="btn-primary"
@@ -313,35 +308,34 @@
                                                     下载
                                                 </button>
                                                 <button
-    className="btn-outline"
-    onClick={async (e) => {
-        e.preventDefault();
-        e.stopPropagation();
+                                                    className="btn-outline"
+                                                    onClick={async (e) => {
+                                                        e.preventDefault();
+                                                        e.stopPropagation();
 
-        if (!user || !user.userId) {
-            alert('请先登录再收藏');
-            return;
-        }
+                                                        if (!user || !user.userId) {
+                                                            alert('请先登录再收藏');
+                                                            return;
+                                                        }
 
-        try {
-            const res = await axios.post(`/seeds/${seed.id}/favorite-toggle`, null, {
-                params: { user_id: user.userId },
-            });
+                                                        try {
+                                                            const res = await axios.post(`/seeds/${seed.id}/favorite-toggle`, null, {
+                                                                params: { user_id: user.userId },
+                                                            });
 
-            if (res.data.code === 0) {
-                alert('操作成功'); // 你可以改成 toast 或 icon 状态提示
-            } else {
-                alert(res.data.msg || '操作失败');
-            }
-        } catch (err) {
-            console.error('收藏失败:', err);
-            alert('收藏失败，请稍后再试。');
-        }
-    }}
->
-    收藏
-</button>
-
+                                                            if (res.data.code === 0) {
+                                                                alert('操作成功');
+                                                            } else {
+                                                                alert(res.data.msg || '操作失败');
+                                                            }
+                                                        } catch (err) {
+                                                            console.error('收藏失败:', err);
+                                                            alert('收藏失败，请稍后再试。');
+                                                        }
+                                                    }}
+                                                >
+                                                    收藏
+                                                </button>
                                             </div>
                                         </div>
                                     </Link>
