diff --git a/src/pages/SeedList/SeedList.css b/src/pages/SeedList/SeedList.css
index cdbf651..a850dfd 100644
--- a/src/pages/SeedList/SeedList.css
+++ b/src/pages/SeedList/SeedList.css
@@ -216,4 +216,8 @@
   border-radius: 8px;
   margin-bottom: 12px;
   box-shadow: 0 4px 12px rgb(107 79 59 / 0.2);
-}
\ No newline at end of file
+}
+a {
+    color: inherit; /* 使用父元素颜色 */
+    text-decoration: none; /* 去掉下划线 */
+}
diff --git a/src/pages/SeedList/SeedList.jsx b/src/pages/SeedList/SeedList.jsx
index 45b9f8c..18a0587 100644
--- a/src/pages/SeedList/SeedList.jsx
+++ b/src/pages/SeedList/SeedList.jsx
@@ -40,9 +40,18 @@
         '种子列表': '',
     };
 
+    const formatBytes = (bytes) => {
+    if (bytes === 0 || bytes === null || bytes === undefined) return '0 B';
+    const k = 1024;
+    const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
+    const i = Math.floor(Math.log(bytes) / Math.log(k));
+    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+    };
+
+
     const buildQueryParams = () => {
         const category = CATEGORY_MAP[activeTab] || '';
-        const orderKey = sortOption === '最新' ? 'upload_time' : (sortOption === '最热' ? 'downloads' : 'upload_time');
+        const orderKey = sortOption === '最新' ? 'create_time' : (sortOption === '最热' ? 'leechers' : 'create_time');
         const params = {
             page: 1,
             size: 20,
@@ -51,7 +60,7 @@
         };
 
         if (searchTerm.trim()) {
-            params.title = searchTerm.trim();
+            params.keyword = searchTerm.trim();
         }
         if (category) {
             params.category = category;
@@ -69,6 +78,7 @@
         return params;
     };
 
+
     const fetchSeeds = async () => {
         if (activeTab === '猜你喜欢') return;
         setLoading(true);
@@ -121,9 +131,30 @@
         try {
             const response = await axios.get(`/seeds/${seedId}/download`, {
                 params: { passkey: user.userId },
-                responseType: 'blob'
+                responseType: 'blob',
+                validateStatus: () => true  // 允许处理非 2xx 响应
             });
 
+            if (response.data && response.data.type === 'application/json') {
+                // 服务端返回的是 JSON 而不是 torrent 文件，尝试解析内容
+                const reader = new FileReader();
+                reader.onload = () => {
+                    try {
+                        const json = JSON.parse(reader.result);
+                        if (json.code === 403 && json.msg === '您没有权限') {
+                            toast.error('您已被封禁，如有疑问请联系管理员');
+                        } else {
+                            toast.error(json.msg || '下载失败，请稍后再试。');
+                        }
+                    } catch {
+                        toast.error('下载失败，请稍后再试。');
+                    }
+                };
+                reader.readAsText(response.data);
+                return;
+            }
+
+            // 如果是 torrent 文件
             const blob = new Blob([response.data], { type: 'application/x-bittorrent' });
             const downloadUrl = URL.createObjectURL(blob);
             const a = document.createElement('a');
@@ -137,6 +168,7 @@
         }
     };
 
+
     const handleFilterChange = (key, value) => {
         setSelectedFilters(prev => ({ ...prev, [key]: value }));
     };
@@ -161,16 +193,15 @@
                     <option value="最新">最新</option>
                     <option value="最热">最热</option>
                 </select>
-                <select value={tagMode} onChange={(e) => setTagMode(e.target.value)} className="tag-mode-select">
+                {/* <select value={tagMode} onChange={(e) => setTagMode(e.target.value)} className="tag-mode-select">
                     <option value="any">包含任意标签</option>
                     <option value="all">包含所有标签</option>
-                </select>
+                </select> */}
             </div>
 
             <div className="tag-filters">
                 {TAGS.map(tag => (
-                     <button
-                        // roles={["test"]}
+                    <button
                         key={tag}
                         className={`tag-button ${activeTab === tag ? 'active-tag' : ''}`}
                         onClick={() => {
@@ -240,7 +271,8 @@
                                 }
 
                                 return (
-                                    <Link to={`/seed/${seed.id}`} key={index} className="seed-item-link">
+                                    // <Link to={`/seed/${seed.id}`} key={index} className="seed-item-link">
+                                     <Link to={`/seed/${seed.id}`} key={seed.id} className="seed-item-link">
                                         <div className="seed-item">
                                             {seed.imageUrl && (
                                                 <img src={seed.imageUrl} alt={seed.title} className="seed-item-cover" />
@@ -255,12 +287,34 @@
                                                     </div>
                                                 </div>
                                             </div>
-                                            <div className="seed-item-size">{seed.size || '未知'}</div>
-                                            <div className="seed-item-upload-time">{seed.upload_time?.split('T')[0] || '未知'}</div>
+                                            {/* <div className="seed-item-size">{seed.size || '未知'}</div> */}
+                                            <div className="seed-item-size">{seed.size ? formatBytes(seed.size) : '未知'}</div>
+
+                                                <div className="seed-item-upload-time">
+                                                    {
+                                                        (() => {
+                                                        if (!seed.createdTime || !Array.isArray(seed.createdTime)) return '未知';
+                                                        const [year, month, day, hour, minute, second] = seed.createdTime;
+                                                        if ([year, month, day, hour, minute, second].some(v => typeof v !== 'number')) return '未知';
+
+                                                        const date = new Date(year, month - 1, day, hour, minute, second);
+                                                        if (isNaN(date.getTime())) return '未知';
+
+                                                        // 格式化为 yyyy-mm-dd
+                                                        const yyyy = date.getFullYear();
+                                                        const mm = String(date.getMonth() + 1).padStart(2, '0');  // 月份要加1，补0
+                                                        const dd = String(date.getDate()).padStart(2, '0');
+
+                                                        return `${yyyy}-${mm}-${dd}`;
+                                                        })()
+                                                    }
+                                                </div>
+
+
                                             <div className="seed-item-downloads">{seed.leechers ?? 0} 次下载</div>
                                             <div className="seed-item-actions" onClick={e => e.stopPropagation()}>
                                                 <AuthButton
-                                                roles={["cookie", "chocolate", "ice-cream"]}
+                                                    roles={["cookie", "chocolate", "ice-cream"]}
                                                     className="btn-primary"
                                                     onClick={e => {
                                                         e.preventDefault();
