import React, { useState, useEffect } from 'react' import { api } from '../services/api' import './TradeList.css' const TradeList = () => { const [trades, setTrades] = useState([]) const [stats, setStats] = useState(null) const [loading, setLoading] = useState(true) // 筛选状态 const [period, setPeriod] = useState(null) // '1d', '7d', '30d', null const [startDate, setStartDate] = useState('') const [endDate, setEndDate] = useState('') const [symbol, setSymbol] = useState('') const [status, setStatus] = useState('') const [useCustomDate, setUseCustomDate] = useState(false) useEffect(() => { loadData() }, []) const loadData = async () => { setLoading(true) try { const params = { limit: 100 } // 如果使用快速时间段筛选 if (!useCustomDate && period) { params.period = period } else if (useCustomDate) { // 使用自定义日期 if (startDate) params.start_date = startDate if (endDate) params.end_date = endDate } if (symbol) params.symbol = symbol if (status) params.status = status const [tradesData, statsData] = await Promise.all([ api.getTrades(params), api.getTradeStats(params) ]) setTrades(tradesData.trades || []) setStats(statsData) } catch (error) { console.error('Failed to load trades:', error) } finally { setLoading(false) } } const handlePeriodChange = (newPeriod) => { setPeriod(newPeriod) setUseCustomDate(false) setStartDate('') setEndDate('') } const handleCustomDateToggle = () => { setUseCustomDate(!useCustomDate) if (!useCustomDate) { setPeriod(null) } } const handleReset = () => { setPeriod(null) setStartDate('') setEndDate('') setSymbol('') setStatus('') setUseCustomDate(false) } if (loading) return
加载中...
return (

交易记录

{/* 筛选面板 */}
{useCustomDate && (
setStartDate(e.target.value)} placeholder="开始日期" /> setEndDate(e.target.value)} placeholder="结束日期" min={startDate} />
)}
setSymbol(e.target.value)} placeholder="如: BTCUSDT" style={{ width: '150px' }} />
{stats && (
总交易数
{stats.total_trades}
胜率
{stats.win_rate.toFixed(2)}%
总盈亏
= 0 ? 'positive' : 'negative'}`}> {stats.total_pnl.toFixed(2)} USDT
平均盈亏
= 0 ? 'positive' : 'negative'}`}> {stats.avg_pnl.toFixed(2)} USDT
)} {trades.length === 0 ? (
暂无交易记录
) : ( {trades.map(trade => ( ))}
交易对 方向 数量 入场价 出场价 盈亏 状态 时间
{trade.symbol} {trade.side} {parseFloat(trade.quantity).toFixed(4)} {parseFloat(trade.entry_price).toFixed(4)} {trade.exit_price ? parseFloat(trade.exit_price).toFixed(4) : '-'} = 0 ? 'positive' : 'negative'}> {parseFloat(trade.pnl).toFixed(2)} USDT {trade.status} {new Date(trade.entry_time).toLocaleString('zh-CN')}
)}
) } export default TradeList