"use client"; import { useEffect, useState, useCallback } from "react"; import { authFetch, useAuth } from "@/lib/auth"; import Link from "next/link"; import { TrendingUp, TrendingDown, Clock, Activity, RotateCcw } from "lucide-react"; interface DeprecatedStrategy { strategy_id: string; display_name: string; symbol: string; status: string; started_at: number; deprecated_at: number | null; initial_balance: number; current_balance: number; net_usdt: number; net_r: number; trade_count: number; win_rate: number; avg_win_r: number; avg_loss_r: number; pnl_usdt_24h: number; last_trade_at: number | null; } function formatTime(ms: number | null): string { if (!ms) return "—"; return new Date(ms).toLocaleString("zh-CN", { timeZone: "Asia/Shanghai", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hour12: false, }); } export default function DeprecatedStrategiesPage() { useAuth(); const [strategies, setStrategies] = useState([]); const [loading, setLoading] = useState(true); const [restoring, setRestoring] = useState(null); const fetchData = useCallback(async () => { try { const res = await authFetch("/api/strategies?include_deprecated=true"); const data = await res.json(); const deprecated = (data.strategies || []).filter( (s: DeprecatedStrategy) => s.status === "deprecated" ); setStrategies(deprecated); } catch (e) { console.error(e); } finally { setLoading(false); } }, []); useEffect(() => { fetchData(); }, [fetchData]); const handleRestore = async (sid: string, name: string) => { if (!confirm(`确认重新启用策略「${name}」?将继续使用原有余额和历史数据。`)) return; setRestoring(sid); try { await authFetch(`/api/strategies/${sid}/restore`, { method: "POST" }); await fetchData(); } catch (e) { console.error(e); } finally { setRestoring(null); } }; if (loading) { return (
加载中...
); } return (

废弃策略

数据永久保留,可随时重新启用

← 返回策略广场
{strategies.length === 0 ? (
暂无废弃策略
) : (
{strategies.map((s) => { const isProfit = s.net_usdt >= 0; const is24hProfit = s.pnl_usdt_24h >= 0; const balancePct = ((s.current_balance / s.initial_balance) * 100).toFixed(1); return (
{/* Header */}

{s.display_name}

已废弃
{s.symbol.replace("USDT", "")}
{/* PnL */}
废弃时余额
{s.current_balance.toLocaleString()} USDT
累计盈亏
{isProfit ? "+" : ""}{s.net_usdt.toLocaleString()} U
{/* Balance bar */}
{balancePct}% {s.initial_balance.toLocaleString()} USDT 初始
{/* Stats */}
胜率
{s.win_rate}%
净R
= 0 ? "text-emerald-600" : "text-red-500"}`}> {s.net_r >= 0 ? "+" : ""}{s.net_r}R
交易数
{s.trade_count}
{/* Footer */}
{is24hProfit ? : } 废弃于 {formatTime(s.deprecated_at)}
); })}
)}
); }