'use client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { useDashboardStats } from '../hooks/use-dashboard-stats'; import { formatNumber, formatDecimal, formatCompactNumber } from '@/lib/utils/format'; import { TrendingUp, TrendingDown, Users, Coins, Activity, Flame, ShoppingCart } from 'lucide-react'; import { Skeleton } from '@/components/ui/skeleton'; function StatsCardsSkeleton() { return (
{[...Array(4)].map((_, i) => ( ))}
); } export function StatsCards() { const { data: stats, isLoading } = useDashboardStats(); if (isLoading) { return ; } const priceChange = stats?.priceChange24h ?? 0; const isPriceUp = priceChange >= 0; const cards = [ { title: '当前价格', value: formatDecimal(stats?.currentPrice, 8), unit: '绿积分/股', icon: isPriceUp ? TrendingUp : TrendingDown, iconColor: isPriceUp ? 'text-green-500' : 'text-red-500', trend: `${isPriceUp ? '+' : ''}${(priceChange * 100).toFixed(2)}%`, trendUp: isPriceUp, }, { title: '全网算力', value: formatCompactNumber(stats?.networkEffectiveContribution), subValue: `层级待解锁: ${formatCompactNumber(stats?.networkLevelPending)} | 团队待解锁: ${formatCompactNumber(stats?.networkBonusPending)}`, icon: Activity, iconColor: 'text-blue-500', }, { title: '认种树总数', value: formatNumber(stats?.totalTrees), icon: Activity, iconColor: 'text-emerald-500', }, { title: '已分配积分股', value: formatCompactNumber(stats?.totalDistributed), icon: Coins, iconColor: 'text-yellow-500', }, { title: '已销毁积分股', value: formatCompactNumber(stats?.totalBurned), icon: Flame, iconColor: 'text-orange-500', }, { title: '流通池余额', value: formatCompactNumber(stats?.circulationPool), icon: ShoppingCart, iconColor: 'text-purple-500', }, { title: '认种用户数', value: formatNumber(stats?.adoptedUsers), subValue: `总用户: ${formatNumber(stats?.totalUsers)}`, icon: Users, iconColor: 'text-green-500', }, { title: '交易订单数', value: formatNumber(stats?.totalOrders), icon: ShoppingCart, iconColor: 'text-indigo-500', }, { title: '成交笔数', value: formatNumber(stats?.totalTrades), icon: Activity, iconColor: 'text-pink-500', }, ]; return (
{cards.map((card) => ( {card.title}
{card.value}
{card.unit &&

{card.unit}

} {card.subValue &&

{card.subValue}

} {card.trend && (

{card.trend} 较昨日

)}
))}
); }