# 智能期货期权分析系统 - 前端组件文档 ## 组件总览 | 组件名称 | 文件路径 | 功能描述 | 复杂度 | |---------|---------|---------|--------| | Navbar | `components/Navbar.tsx` | 顶部导航栏 | ⭐⭐ | | MarketOverview | `components/MarketOverview.tsx` | 市场概览仪表盘 | ⭐⭐⭐ | | HotEvents | `components/HotEvents.tsx` | 热点事件分析 | ⭐⭐⭐ | | ProductCard | `components/ProductCard.tsx` | 品种卡片 | ⭐⭐ | | ProductDetail | `components/ProductDetail.tsx` | 品种详情页 | ⭐⭐⭐⭐ | | KLineChart | `components/KLineChart.tsx` | K线图表 | ⭐⭐⭐⭐⭐ | | RiskAlerts | `components/RiskAlerts.tsx` | 风险提醒 | ⭐⭐ | --- ## Navbar 导航栏 ### Props ```typescript interface NavbarProps { activeTab: string; // 当前激活的标签 onTabChange: (tab: string) => void; // 标签切换回调 } ``` ### 功能特性 - 固定顶部导航 - 响应式设计(桌面/移动端) - 实时时钟显示 - 滚动时添加阴影效果 ### 使用示例 ```tsx import { Navbar } from '@/components/Navbar'; function App() { const [activeTab, setActiveTab] = useState('overview'); return ( ); } ``` --- ## MarketOverview 市场概览 ### Props ```typescript interface MarketOverviewProps { data: MarketOverview; } interface MarketOverview { heatIndex: number; // 市场热度指数 heatChange: number; // 热度变化 upCount: number; // 上涨品种数 downCount: number; // 下跌品种数 capitalFlow: number; // 资金流向 volatilityIndex: number; // 波动率指数 volatilityChange: number; // 波动率变化 } ``` ### 功能特性 - 数字滚动动画 - 迷你趋势图 - 涨跌颜色区分 - 卡片悬停效果 ### 使用示例 ```tsx import { MarketOverviewPanel } from '@/components/MarketOverview'; const data = { heatIndex: 78.5, heatChange: 5.2, upCount: 156, downCount: 89, capitalFlow: 28.5, volatilityIndex: 23.8, volatilityChange: -1.2, }; ``` --- ## HotEvents 热点事件 ### Props ```typescript interface HotEventsProps { events: HotEvent[]; } interface HotEvent { id: string; title: string; time: string; summary: string; affectedProducts: string[]; impact: 'bullish' | 'bearish' | 'neutral'; impactLevel: 1 | 2 | 3 | 4 | 5; analysis: string; risks: string[]; } ``` ### 功能特性 - 事件列表与详情联动 - 影响等级星级显示 - 利多/利空标签 - 响应式布局 ### 使用示例 ```tsx import { HotEventsPanel } from '@/components/HotEvents'; const events = [ { id: '1', title: '地缘政治风险升级', time: '2025-03-02', summary: '美以袭伊朗,海上油阀被关', affectedProducts: ['原油', '黄金'], impact: 'bullish', impactLevel: 5, analysis: '地缘政治风险急剧升温...', risks: ['冲突升级', '供应中断'], }, ]; ``` --- ## ProductCard 品种卡片 ### Props ```typescript interface ProductCardProps { product: FuturesProduct; onClick?: () => void; } interface FuturesProduct { id: string; name: string; code: string; category: string; price: number; change: number; changePercent: number; trendScore: number; successRate: number; cycles: { m5: TrendDirection; m15: TrendDirection; m30: TrendDirection; m60: TrendDirection; }; keyLevels: { resistance: number[]; support: number[]; }; recommendation: 'long' | 'short' | 'wait'; recommendationReason: string; } ``` ### 功能特性 - 多周期趋势标签 - 成功率进度条 - 关键点位显示 - 悬停放大效果 ### 使用示例 ```tsx import { ProductCard } from '@/components/ProductCard'; const product = { id: '1', name: '原油', code: 'SC', price: 528.6, change: 12.1, changePercent: 2.35, // ... 其他字段 }; console.log('clicked')} /> ``` --- ## ProductDetail 品种详情 ### Props ```typescript interface ProductDetailProps { product: FuturesProduct; onBack: () => void; } ``` ### 功能特性 - 周期切换(5/15/30/60分钟) - K线图展示 - 技术指标汇总 - 交易建议 - 多周期一致性分析 ### 子组件 #### PeriodButton 周期切换按钮 ```typescript interface PeriodButtonProps { label: string; isActive: boolean; onClick: () => void; } ``` #### IndicatorCard 指标卡片 ```typescript interface IndicatorCardProps { title: string; value: string; status: string; signal?: 'positive' | 'negative' | 'neutral'; } ``` #### KeyLevelRow 关键点位行 ```typescript interface KeyLevelRowProps { label: string; value: number; type: 'resistance' | 'support'; } ``` ### 使用示例 ```tsx import { ProductDetail } from '@/components/ProductDetail'; setSelectedProduct(null)} /> ``` --- ## KLineChart K线图表 ### Props ```typescript interface KLineChartProps { klineData: KLineData[]; // K线数据 macdData: MACDData[]; // MACD数据 resistance: number[]; // 压力位数组 support: number[]; // 支撑位数组 height?: number; // 图表高度,默认500 } interface KLineData { time: string; open: number; high: number; low: number; close: number; volume: number; } interface MACDData { time: string; dif: number; dea: number; macd: number; } ``` ### 功能特性 - 三图联动(K线+成交量+MACD) - 鼠标悬停十字光标 - 压力位/支撑位标注 - 移动平均线(MA5/MA10/MA20) - 数据缩放与平移 - 自定义Tooltip ### ECharts配置 图表使用ECharts实现,主要配置包括: ```typescript const option: echarts.EChartsOption = { // 三个grid分别对应K线、成交量、MACD grid: [ { top: '5%', height: '50%' }, // K线 { top: '58%', height: '15%' }, // 成交量 { top: '76%', height: '18%' }, // MACD ], // 三个x轴联动 xAxis: [ { type: 'category', gridIndex: 0 }, { type: 'category', gridIndex: 1 }, { type: 'category', gridIndex: 2 }, ], // 三个y轴 yAxis: [ { scale: true, gridIndex: 0 }, { scale: true, gridIndex: 1 }, { scale: true, gridIndex: 2 }, ], // 数据系列 series: [ { type: 'candlestick', name: 'K线' }, { type: 'line', name: 'MA5' }, { type: 'line', name: 'MA10' }, { type: 'line', name: 'MA20' }, { type: 'bar', name: '成交量' }, { type: 'bar', name: 'MACD' }, { type: 'line', name: 'DIF' }, { type: 'line', name: 'DEA' }, ], }; ``` ### 使用示例 ```tsx import { KLineChart } from '@/components/KLineChart'; const klineData = [ { time: '2025-03-03T10:00:00Z', open: 525, high: 528, low: 524, close: 527, volume: 12580 }, // ... 更多数据 ]; const macdData = [ { time: '2025-03-03T10:00:00Z', dif: 0.52, dea: 0.41, macd: 0.22 }, // ... 更多数据 ]; ``` --- ## RiskAlerts 风险提醒 ### Props ```typescript interface RiskAlertsProps { alerts: RiskAlert[]; } interface RiskAlert { id: string; title: string; affectedProducts: string[]; riskLevel: 'high' | 'medium' | 'low'; description: string; suggestion: string; time: string; } ``` ### 功能特性 - 风险等级颜色区分 - 影响品种标签 - 操作建议显示 ### 使用示例 ```tsx import { RiskAlertsPanel } from '@/components/RiskAlerts'; const alerts = [ { id: '1', title: '中东地缘风险急剧升温', affectedProducts: ['原油', '黄金'], riskLevel: 'high', description: '美以与伊朗冲突升级', suggestion: '控制仓位,设置止损', time: '2025-03-02 14:30', }, ]; ``` --- ## 自定义Hooks ### useMarketData 市场数据订阅Hook(待实现) ```typescript function useMarketData(symbols: string[]) { const [data, setData] = useState>(new Map()); useEffect(() => { // WebSocket连接 const ws = new WebSocket('wss://api.example.com/ws'); ws.onmessage = (event) => { const tick = JSON.parse(event.data); setData(prev => new Map(prev).set(tick.symbol, tick)); }; return () => ws.close(); }, [symbols]); return data; } ``` ### useKLineData K线数据获取Hook(待实现) ```typescript function useKLineData(symbol: string, period: string) { const [data, setData] = useState([]); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); fetch(`/api/v1/products/${symbol}/kline?period=${period}`) .then(res => res.json()) .then(result => { setData(result.data); setLoading(false); }); }, [symbol, period]); return { data, loading }; } ``` --- ## 样式规范 ### Tailwind自定义配置 ```javascript // tailwind.config.js module.exports = { theme: { extend: { colors: { background: '#09090b', primary: '#7dd75a', secondary: '#0d5d1b', accent: '#e6e6e6', up: '#7dd75a', down: '#ef4444', neutral: '#a1a1aa', warning: '#f59e0b', }, fontFamily: { sans: ['Inter', 'sans-serif'], mono: ['JetBrains Mono', 'monospace'], }, }, }, }; ``` ### 常用样式组合 ```css /* 卡片样式 */ .card { @apply p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]; } /* 悬停效果 */ .card-hover { @apply hover:border-[#7dd75a]/50 transition-all duration-300; } /* 上涨文字 */ .text-up { @apply text-[#7dd75a]; } /* 下跌文字 */ .text-down { @apply text-[#ef4444]; } ```