diff --git a/frontend/src/pages/YichensBoard.jsx b/frontend/src/pages/YichensBoard.jsx index f01b819..6d59a1b 100644 --- a/frontend/src/pages/YichensBoard.jsx +++ b/frontend/src/pages/YichensBoard.jsx @@ -1,7 +1,7 @@ /** * YichensBoard - 一尘看板页面 - * Version: 0.0.2 - * 更新:新增号码特色筛选按钮(带4、无4、无47等) + * Version: 1.2.70x + * 更新: */ import React, { useState, useEffect } from 'react' @@ -96,3 +96,196 @@ export default function YichensBoard() { } } // 确保data是数组 + if (!Array.isArray(data)) { + data = data.posts || data.data || [] + } + console.log('YichensBoard: posts data count', data.length) + if (currentCat && Array.isArray(data)) { + if (currentCat === '龙') { + data = data.filter(p => p.category && (p.category.includes('龙') || p.category.includes('纪念钞'))) + } else if (currentCat === '蛇') { + data = data.filter(p => p.category && p.category.includes('蛇')) + } else if (currentCat === '马') { + data = data.filter(p => p.category && p.category.includes('马')) + } else if (currentCat === '其他') { + data = data.filter(p => p.category && !p.category.includes('龙') && !p.category.includes('纪念钞') && !p.category.includes('蛇') && !p.category.includes('马')) + } + } + // 支持新格式 {posts:[], total:xxx} 或旧格式 [{},{}] + const postsArray = Array.isArray(data) ? data : (data.posts || []) + const totalCount = data.total || todayStats.total || postsArray.length + setPosts(postsArray) + setTotalPosts(totalCount) + } catch(e) { + console.error('YichensBoard: fetchPosts error', e) + setError(e.message) + setPosts([]) + } finally { + setLoading(false) + } + } + + useEffect(() => { + if (todayStats.total > 0) { + fetchPosts(1, categoryFilter, searchKeyword) + } + }, [todayStats, categoryFilter, postTypeFilter, numberFilter]) + + useEffect(() => { + setPage(1) + fetchPosts(1, categoryFilter, searchKeyword) + }, [searchKeyword, numberFilter]) + + const togglePost = id => setExpandedPosts(p => ({ ...p, [id]: !p[id] })) + + const StatCard = ({ label, value, color, onClick }) => ( +
{ setLoading(true); if (onClick) onClick(); }} + style={{ + background: 'linear-gradient(145deg, #1f2937 0%, #111827 100%)', + borderRadius: 12, padding: '12px 8px', border: '1px solid #374151', + cursor: onClick ? 'pointer' : 'default', + textAlign: 'center' + }}> +
{label}
+
{value}
+
+ ) + + if (error) { + return ( +
+
加载失败: {error}
+ +
+ ) + } + + return ( +
+
+
+ 📈 连体钞/纪念钞 {dateStr} +
+
+ { setPostTypeFilter('all'); setCategoryFilter(''); setPage(1); }} /> + { setPostTypeFilter('deal'); setCategoryFilter(''); setPage(1); }} /> + { setPostTypeFilter('want'); setCategoryFilter(''); setPage(1); }} /> + { setPostTypeFilter('other'); setCategoryFilter(''); setPage(1); }} /> +
+
+ +
+
📊 今日分类统计
+
龙: {todayStats.dragons || 0} | 马: {todayStats.horses || 0} | 蛇: {todayStats.snakes || 0} | 天马: {todayStats.tianma || 0}
+
+ +
+
+ { const kw = e.target.value; setSearchKeyword(kw); setPage(1); fetchPosts(1, '', kw) }} + style={{ flex: 1, padding: '10px 14px', borderRadius: 8, border: '1px solid #374151', background: '#1f2937', color: '#fff', fontSize: 13, outline: 'none' }} + /> + +
+ {searchKeyword &&
搜索: "{searchKeyword}",共找到 {totalPosts} 条结果
} +
+ +
+ {[{key:'all',label:'全部'},{key:'deal',label:'出售'},{key:'want',label:'求购'},{key:'other',label:'其他'}].map(k => ( + + ))} +
+ +
+ {[{key:'',label:'全部'},{key:'龙',label:'龙钞'},{key:'蛇',label:'蛇钞'},{key:'马',label:'马钞'},{key:'其他',label:'其他'}].map(k => ( + + ))} +
+ +
+ {[{key:'',label:'全部'},{key:'带4',label:'带4'},{key:'无4',label:'无4'},{key:'无47',label:'无47'},{key:'无247',label:'无247'},{key:'无347',label:'无347'},{key:'年份',label:'年份'},{key:'特色',label:'其他'}].map(k => ( + + ))} +
+ + {loading ?
加载中...
: ( +
+
+ {posts.length === 0 ? ( +
暂无帖子数据
+ ) : ( + posts.map(post => ( +
+
togglePost(post.post_id)} style={{ cursor: 'pointer' }}> +
+ {post.title||'无标题'} +
+ + {post.post_type==='deal'?'出售':post.post_type==='want'?'求购':post.post_type==='normal'?'其他':'普通'} + + + {post.category || '-'} + +
+
+
+ {post.author_username||'未知'} + {post.post_time?.substring(0,16)||''} +
+
+ {expandedPosts[post.post_id] && post.content && ( +
+
+ {post.content} +
+ {post.url && 查看原帖} +
+ )} +
+ )) + )} +
+ +
+
+ 共 {totalPosts} 条结果,{Math.ceil(totalPosts / 390)} 页,当前第 {page} 页 +
+
+ {page > 1 ? ( + + ) : ( + 上一页 + )} + {posts.length >= 390 && totalPosts > page * 390 ? ( + + ) : ( + 下一页 + )} +
+
+
+ )} +
+ ) +}