feat: Implement initial backend API server with various endpoints and background services, including an error account cleaner.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { Users, CheckCircle, XCircle, AlertTriangle, Zap, Activity, TrendingUp } from 'lucide-react'
|
||||
import { Users, CheckCircle, XCircle, AlertTriangle, Zap, Activity } from 'lucide-react'
|
||||
import type { DashboardStats } from '../../types'
|
||||
import StatsCard from './StatsCard'
|
||||
|
||||
@@ -78,17 +78,15 @@ export default function PoolStatus({ stats, loading, error }: PoolStatusProps) {
|
||||
color="slate"
|
||||
loading={loading}
|
||||
/>
|
||||
{/* RPM 卡片 - 显示当前 RPM 和今日最高 */}
|
||||
<div className="relative">
|
||||
<StatsCard title="RPM" value={stats?.rpm ?? 0} icon={Zap} color="blue" loading={loading} />
|
||||
{/* 今日最高 RPM 显示在卡片下方 */}
|
||||
{maxRpm > 0 && (
|
||||
<div className="absolute -bottom-5 left-0 right-0 flex items-center justify-center gap-1 text-xs text-slate-500 dark:text-slate-400">
|
||||
<TrendingUp className="h-3 w-3 text-orange-500" />
|
||||
<span>今日最高: <span className="font-semibold text-orange-500">{maxRpm}</span></span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<StatsCard
|
||||
title="RPM"
|
||||
value={stats?.rpm ?? 0}
|
||||
icon={Zap}
|
||||
color="blue"
|
||||
loading={loading}
|
||||
subtitle={maxRpm > 0 ? `📈 今日最高: ${maxRpm}` : undefined}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ interface StatsCardProps {
|
||||
trendValue?: string
|
||||
color?: 'blue' | 'green' | 'yellow' | 'red' | 'slate'
|
||||
loading?: boolean
|
||||
subtitle?: string
|
||||
subtitleColor?: string
|
||||
}
|
||||
|
||||
export default function StatsCard({
|
||||
@@ -20,6 +22,8 @@ export default function StatsCard({
|
||||
trendValue,
|
||||
color = 'blue',
|
||||
loading = false,
|
||||
subtitle,
|
||||
subtitleColor = 'text-orange-500',
|
||||
}: StatsCardProps) {
|
||||
const colorStyles = {
|
||||
blue: {
|
||||
@@ -80,6 +84,11 @@ export default function StatsCard({
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
{subtitle && (
|
||||
<p className={`mt-1 text-xs font-medium ${subtitleColor}`}>
|
||||
{subtitle}
|
||||
</p>
|
||||
)}
|
||||
{trend && trendValue && TrendIcon && (
|
||||
<div className={`mt-2 flex items-center gap-1 text-sm ${trendStyles[trend].color}`}>
|
||||
<TrendIcon className="h-4 w-4" />
|
||||
@@ -94,3 +103,4 @@ export default function StatsCard({
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user