# 智能期货期权分析系统 - 前端组件文档

## 组件总览

| 组件名称 | 文件路径 | 功能描述 | 复杂度 |
|---------|---------|---------|--------|
| 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 (
    <Navbar 
      activeTab={activeTab} 
      onTabChange={setActiveTab} 
    />
  );
}
```

---

## 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,
};

<MarketOverviewPanel data={data} />
```

---

## 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: ['冲突升级', '供应中断'],
  },
];

<HotEventsPanel events={events} />
```

---

## 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,
  // ... 其他字段
};

<ProductCard 
  product={product} 
  onClick={() => 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';

<ProductDetail 
  product={product} 
  onBack={() => 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 },
  // ... 更多数据
];

<KLineChart
  klineData={klineData}
  macdData={macdData}
  resistance={[535, 542]}
  support={[518, 510]}
  height={500}
/>
```

---

## 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',
  },
];

<RiskAlertsPanel alerts={alerts} />
```

---

## 自定义Hooks

### useMarketData

市场数据订阅Hook（待实现）

```typescript
function useMarketData(symbols: string[]) {
  const [data, setData] = useState<Map<string, TickData>>(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<KLineData[]>([]);
  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];
}
```
