修改种子列表
Change-Id: I1f9d57092ca3ae2381da2b8dd137e2743782642d
diff --git a/src/pages/SeedList/SeedList.jsx b/src/pages/SeedList/SeedList.jsx
index 39a7615..2831434 100644
--- a/src/pages/SeedList/SeedList.jsx
+++ b/src/pages/SeedList/SeedList.jsx
@@ -1,4 +1,3 @@
-
import React, { useState, useEffect } from 'react';
import { Link } from 'wouter';
import axios from 'axios';
@@ -50,8 +49,8 @@
if (searchTerm.trim()) params.search = searchTerm.trim();
const tags = Object.entries(selectedFilters)
- .filter(([_, value]) => value !== '不限')
- .map(([_, value]) => value);
+ .filter(([_, value]) => value!== '不限')
+ .map(([_, value]) => value);
if (tags.length > 0) {
params.tags = tags.join(',');
@@ -70,7 +69,7 @@
const response = await fetch(`${API_BASE}/echo/seeds?${queryString}`);
const data = await response.json();
- if (data.status !== 'success') throw new Error(data.message || '获取失败');
+ if (data.status!== 'success') throw new Error(data.message || '获取失败');
const seeds = data.seeds || [];
setSeeds(seeds);
setFilteredSeeds(seeds);
@@ -105,13 +104,13 @@
};
useEffect(() => {
- if (activeTab !== '猜你喜欢') {
+ if (activeTab!== '猜你喜欢') {
fetchFilterOptions();
}
}, [activeTab]);
useEffect(() => {
- if (activeTab !== '猜你喜欢') {
+ if (activeTab!== '猜你喜欢') {
fetchSeeds();
}
}, [activeTab, sortOption, selectedFilters, tagMode, searchTerm]);
@@ -145,14 +144,14 @@
const handleFilterChange = (key, value) => {
setSelectedFilters((prev) => ({
- ...prev,
+ ...prev,
[key]: value
}));
};
const clearFilter = (key) => {
setSelectedFilters((prev) => ({
- ...prev,
+ ...prev,
[key]: '不限'
}));
};
@@ -183,7 +182,7 @@
{TAGS.map((tag) => (
<button
key={tag}
- className={`tag-button ${activeTab === tag ? 'active-tag' : ''}`}
+ className={`tag-button ${activeTab === tag? 'active-tag' : ''}`}
onClick={() => {
setActiveTab(tag);
setFilters({});
@@ -195,7 +194,7 @@
))}
</div>
- {activeTab !== '猜你喜欢' && Object.keys(filters).length > 0 && (
+ {activeTab!== '猜你喜欢' && Object.keys(filters).length > 0 && (
<div className="filter-bar">
{Object.entries(filters).map(([key, options]) => (
<div className="filter-group" key={key}>
@@ -208,7 +207,7 @@
<option key={opt} value={opt}>{opt}</option>
))}
</select>
- {selectedFilters[key] !== '不限' && (
+ {selectedFilters[key]!== '不限' && (
<button className="clear-filter-btn" onClick={() => clearFilter(key)}>✕</button>
)}
</div>
@@ -217,47 +216,73 @@
)}
<div className="seed-list-content">
- {activeTab === '猜你喜欢' ? (
+ {activeTab === '猜你喜欢'? (
<Recommend />
- ) : loading ? (
+ ) : loading? (
<p>加载中...</p>
- ) : errorMsg ? (
+ ) : errorMsg? (
<p className="error-text">{errorMsg}</p>
- ) : filteredSeeds.length === 0 ? (
+ ) : filteredSeeds.length === 0? (
<p>未找到符合条件的种子。</p>
) : (
- <div className="seed-cards">
- {filteredSeeds.map((seed, index) => (
- <div key={index} className="seed-card">
- {seed.image_url && (
- <img src={seed.image_url} alt={seed.title} className="seed-cover" />
- )}
- <div className="seed-card-header">
- <h3>{seed.title}</h3>
- </div>
-
- <div className="seed-card-body">
- <div className="seed-info">
- <span>{seed.size || '未知'} GB</span>
- <span>{seed.upload_time?.split('T')[0] || '未知'}</span>
- <span>{seed.downloads ?? 0} 次下载</span>
- </div>
- {seed.tags && seed.tags.length > 0 && (
- <div className="seed-card-tags">
- {seed.tags.map((tag, i) => (
- <span key={i} className="tag-label">{tag}</span>
- ))}
+ <div className="seed-list-card">
+ <div className="seed-list-header">
+ <div className="seed-header-cover"></div>
+ <div className="seed-header-title">种子名称</div>
+ <div className="seed-header-size">大小</div>
+ <div className="seed-header-upload-time">上传时间</div>
+ <div className="seed-header-downloads">下载次数</div>
+ <div className="seed-header-actions">操作</div>
+ </div>
+ <div className="seed-list-body">
+ {filteredSeeds.map((seed, index) => (
+ <Link href={`/seed/${seed.seed_id}`} key={index} className="seed-item-link">
+ <div className="seed-item">
+ {seed.image_url && (
+ <img src={seed.image_url} alt={seed.title} className="seed-item-cover" />
+ )}
+ <div className="seed-item-title">
+ <div className="seed-title-row">
+ <h3 className="seed-title">{seed.title}</h3>
+ <div className="seed-tags">
+ {seed.tags && seed.tags.map((tag, i) => (
+ <span key={i} className="tag-label">{tag}</span>
+ ))}
+ </div>
+ </div>
</div>
- )}
- </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 className="seed-item-size">{seed.size || '未知'}</div>
+ <div className="seed-item-upload-time">{seed.upload_time?.split('T')[0] || '未知'}</div>
+ <div className="seed-item-downloads">{seed.downloads?? 0} 次下载</div>
+ <div
+ className="seed-item-actions"
+ onClick={(e) => e.stopPropagation()} // 阻止事件冒泡,避免跳转
+ >
+ <button
+ className="btn-primary"
+ onClick={(e) => {
+ e.preventDefault(); // 阻止跳转
+ e.stopPropagation();
+ handleDownload(seed.seed_id);
+ }}
+ >
+ 下载
+ </button>
+ <button
+ className="btn-outline"
+ onClick={(e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ // TODO: 收藏操作
+ }}
+ >
+ 收藏
+ </button>
+ </div>
+ </div>
+ </Link>
+ ))}
+ </div>
</div>
)}
</div>
@@ -266,3 +291,4 @@
};
export default SeedList;
+