import { useEffect, useState } from 'react' import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts' import { Card, List, NavBar } from 'antd-mobile' import { api } from '../../api/client.js' import TrendBadge, { calcTrend } from '../../components/TrendBadge.jsx' // 策略研究 // 列表态 (默认): 列出所有策略, 每行显示主指标 (债务/GDP) 最新值 + 趋势 // 详情态: 顶部 NavBar (返回) + 4 张图 (debt/gdp/debtToGdp/interestToGdp) + 表格 const SERIES = [ { key: 'debt', label: '政府债务 (万亿美元)', color: '#8884d8' }, { key: 'gdp', label: 'GDP (万亿美元)', color: '#3cb44b' }, { key: 'debtToGdp', label: '债务/GDP (%)', color: '#4363d8' }, { key: 'interestToGdp', label: '债务利息/GDP (%)', color: '#f58231' }, ] // 取最后一个有效数据点 function lastRow(rows) { for (let i = rows.length - 1; i >= 0; i--) { if (rows[i] && typeof rows[i].debtToGdp === 'number') return rows[i] } return null } export default function StrategyView() { const [strategies, setStrategies] = useState([]) const [err, setErr] = useState('') const [loading, setLoading] = useState(true) const [selected, setSelected] = useState(null) useEffect(() => { let cancelled = false setLoading(true) api('/strategies') .then((data) => { if (!cancelled) setStrategies(data.strategies || []) }) .catch((e) => !cancelled && setErr(e.message)) .finally(() => !cancelled && setLoading(false)) return () => { cancelled = true } }, []) if (loading) return
| 年份 | 债务 | GDP | 债务/GDP | 利息/GDP |
|---|---|---|---|---|
| {r.year} | {r.debt} | {r.gdp} | {r.debtToGdp} | {r.interestToGdp} |