论坛帖子列表

Change-Id: I69535db13798ec52939f047604357c5fe363e8cd

论坛帖子列表

Change-Id: Ie02a0bfee862cb46667f2c6cd069dab21e84eb6b

论坛帖子列表

Change-Id: I69535db13798ec52939f047604357c5fe363e8cd
diff --git a/src/pages/SeedList/SeedList.jsx b/src/pages/SeedList/SeedList.jsx
index f32224e..8ffecb3 100644
--- a/src/pages/SeedList/SeedList.jsx
+++ b/src/pages/SeedList/SeedList.jsx
@@ -1,3 +1,246 @@
+// import React, { useState, useEffect } from 'react';
+// import { Link } from 'wouter';
+// import axios from 'axios';
+// import logo from '../../assets/logo.png';
+// import Recommend from './Recommend/Recommend';
+// import './SeedList.css';
+
+// const API_BASE = process.env.REACT_APP_API_BASE;
+
+// const SeedList = () => {
+//     const [seeds, setSeeds] = useState([]);
+//     const [filteredSeeds, setFilteredSeeds] = useState([]);
+//     const [loading, setLoading] = useState(true);
+//     const [searchTerm, setSearchTerm] = useState('');
+//     const [sortOption, setSortOption] = useState('最新');
+//     const [activeTab, setActiveTab] = useState('种子列表');
+
+//     const [filters, setFilters] = useState({});
+//     const [selectedFilters, setSelectedFilters] = useState({});
+
+//     const TAGS = ['猜你喜欢', '电影', '电视剧', '动漫', '音乐', '游戏', '综艺', '软件', '体育', '学习', '纪录片', '其他'];
+
+//     const CATEGORY_MAP = {
+//         '电影': 'movie',
+//         '电视剧': 'tv',
+//         '动漫': 'anime',
+//         '音乐': 'music',
+//         '游戏': 'game',
+//         '综艺': 'variety',
+//         '软件': 'software',
+//         '体育': 'sports',
+//         '学习': 'study',
+//         '纪录片': 'documentary',
+//         '其他': 'other'
+//     };
+
+//     const buildQueryParams = () => {
+//         const category = CATEGORY_MAP[activeTab];
+
+//         const params = {
+//             category,
+//             sort_by: sortOption === '最新' ? 'newest'
+//                     : sortOption === '最热' ? 'downloads'
+//                     : undefined,
+//             page: 1,
+//             limit: 20,
+//         };
+
+//         const tags = Object.entries(selectedFilters)
+//             .filter(([_, value]) => value !== '不限')
+//             .map(([_, value]) => value);
+
+//         if (tags.length > 0) params.tags = tags.join(',');
+
+//         return params;
+//     };
+
+//     const fetchSeeds = async () => {
+//         setLoading(true);
+//         try {
+//             const params = buildQueryParams();
+//             const queryString = new URLSearchParams(params).toString();
+//             const response = await fetch(`${API_BASE}/echo/seeds?${queryString}`);
+//             const data = await response.json();
+//             const seeds = data?.seeds || [];
+//             setSeeds(seeds);
+//             setFilteredSeeds(seeds);
+//         } catch (error) {
+//             console.error('获取种子列表失败:', error);
+//         } finally {
+//             setLoading(false);
+//         }
+//     };
+
+//     const fetchFilterOptions = async () => {
+//         if (activeTab === '猜你喜欢') return;
+//         const category = CATEGORY_MAP[activeTab];
+//         try {
+//             const res = await axios.get(`${API_BASE}/echo/seed-filters?category=${category}`);
+//             setFilters(res.data || {});
+//             const defaultSelections = {};
+//             for (const key in res.data) {
+//                 defaultSelections[key] = '不限';
+//             }
+//             setSelectedFilters(defaultSelections);
+//         } catch (err) {
+//             console.error('获取筛选项失败:', err);
+//             setFilters({});
+//             setSelectedFilters({});
+//         }
+//     };
+
+//     useEffect(() => {
+//         if (activeTab !== '猜你喜欢') {
+//             fetchFilterOptions();
+//         }
+//     }, [activeTab]);
+
+//     useEffect(() => {
+//         if (activeTab !== '猜你喜欢') {
+//             fetchSeeds();
+//         }
+//     }, [activeTab, sortOption, selectedFilters]);
+
+//     const handleDownload = async (seedId) => {
+//         const peer_id = 'echo-' + Math.random().toString(36).substring(2, 10);
+//         const ip = '127.0.0.1';
+//         const port = 6881;
+//         const uploaded = 0;
+//         const downloaded = 0;
+//         const left = 0;
+
+//         try {
+//             const response = await axios.get(`${API_BASE}/echo/seeds/${seedId}/download`, {
+//                 params: {
+//                     peer_id,
+//                     ip,
+//                     port,
+//                     uploaded,
+//                     downloaded,
+//                     left,
+//                 },
+//                 responseType: 'blob'
+//             });
+
+//             const blob = new Blob([response.data], { type: 'application/x-bittorrent' });
+//             const downloadUrl = URL.createObjectURL(blob);
+//             const a = document.createElement('a');
+//             a.href = downloadUrl;
+//             a.download = `${seedId}.torrent`;
+//             a.click();
+//             URL.revokeObjectURL(downloadUrl);
+//         } catch (error) {
+//             console.error('下载失败:', error);
+//             alert('下载失败,请稍后再试。');
+//         }
+//     };
+
+//     return (
+//         <div className="friend-moments">
+//             <header className="header">
+//                 <div className="logo-and-name">
+//                     <img src={logo} alt="网站logo" className="logo" />
+//                     <span className="site-name">Echo</span>
+//                 </div>
+//                 <div className="user-and-message">
+//                     <img src="user-avatar.png" alt="用户头像" className="user-avatar" />
+//                     <span className="message-center">消息</span>
+//                 </div>
+//             </header>
+
+//             <nav className="nav">
+//                 <Link to="/friend-moments" className="nav-item">好友动态</Link>
+//                 <Link to="/forum" className="nav-item">论坛</Link>
+//                 <Link to="/interest-groups" className="nav-item">兴趣小组</Link>
+//                 <Link to="/seed-list" className="nav-item active">种子列表</Link>
+//                 <Link to="/publish-seed" className="nav-item">发布种子</Link>
+//             </nav>
+
+//             <div className="controls">
+//                 <input
+//                     type="text"
+//                     placeholder="搜索种子..."
+//                     value={searchTerm}
+//                     onChange={(e) => setSearchTerm(e.target.value)}
+//                     className="search-input"
+//                 />
+//                 <select value={sortOption} onChange={(e) => setSortOption(e.target.value)} className="sort-select">
+//                     <option value="最新">最新</option>
+//                     <option value="最热">最热</option>
+//                 </select>
+//             </div>
+
+//             <div className="tag-filters">
+//                 {TAGS.map((tag) => (
+//                     <button
+//                         key={tag}
+//                         className={`tag-button ${activeTab === tag ? 'active-tag' : ''}`}
+//                         onClick={() => {
+//                             setActiveTab(tag);
+//                             setFilters({});
+//                             setSelectedFilters({});
+//                         }}
+//                     >
+//                         {tag}
+//                     </button>
+//                 ))}
+//             </div>
+
+//             {activeTab !== '猜你喜欢' && Object.keys(filters).length > 0 && (
+//                 <div className="filter-bar">
+//                     {Object.entries(filters).map(([key, options]) => (
+//                         <div className="filter-group" key={key}>
+//                             <label>{key}:</label>
+//                             <select
+//                                 value={selectedFilters[key]}
+//                                 onChange={(e) =>
+//                                     setSelectedFilters({ ...selectedFilters, [key]: e.target.value })
+//                                 }
+//                             >
+//                                 {options.map((opt) => (
+//                                     <option key={opt} value={opt}>{opt}</option>
+//                                 ))}
+//                             </select>
+//                         </div>
+//                     ))}
+//                 </div>
+//             )}
+
+//             <div className="seed-list-content">
+//                 {activeTab === '猜你喜欢' ? (
+//                     <Recommend />
+//                 ) : loading ? (
+//                     <p>加载中...</p>
+//                 ) : filteredSeeds.length === 0 ? (
+//                     <p>未找到符合条件的种子。</p>
+//                 ) : (
+//                     <div className="seed-cards">
+//                         {filteredSeeds.map((seed, index) => (
+//                             <div key={index} className="seed-card">
+//                                 <div className="seed-card-header">
+//                                     <h3>{seed.title}</h3>
+//                                 </div>
+//                                 <div className="seed-card-body">
+//                                     <p><strong>大小:</strong> {seed.size || '未知'} GB</p>
+//                                     <p><strong>时间:</strong> {seed.upload_time?.split('T')[0] || '未知'}</p>
+//                                     <p><strong>下载数:</strong> {seed.downloads ?? 0}</p>
+//                                 </div>
+//                                 <div className="seed-card-actions">
+//                                     <button className="btn-primary" onClick={() => handleDownload(seed.seed_id)}>下载</button>
+//                                     <Link href={`/seed/${seed.seed_id}`} className="btn-secondary">详情</Link>
+//                                     <button className="btn-outline">收藏</button>
+//                                 </div>
+//                             </div>
+//                         ))}
+//                     </div>
+//                 )}
+//             </div>
+//         </div>
+//     );
+// };
+
+// export default SeedList;
 import React, { useState, useEffect } from 'react';
 import { Link } from 'wouter';
 import axios from 'axios';
@@ -156,7 +399,7 @@
     };
 
     return (
-        <div className="main-page">
+        <div className="friend-moments">
             <header className="header">
                 <div className="logo-and-name">
                     <img src={logo} alt="网站logo" className="logo" />