refactor(TradeDataPanel): 原子设计模式拆分重构
- 将 TradeDataPanel.tsx (382行) 拆分为 8 个 TypeScript 文件 - 创建 3 个原子组件: MinuteStats、TradeAnalysis、EmptyState - 创建 3 个业务组件: KLineChart、MinuteKLineSection、TradeTable - 主入口组件精简至 ~50 行,降低 87% - 更新 panels/index.ts 导出子组件 - 更新 STRUCTURE.md 文档 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Company 目录结构说明
|
||||
|
||||
> 最后更新:2025-12-12
|
||||
> 最后更新:2025-12-16
|
||||
|
||||
## 目录结构
|
||||
|
||||
@@ -69,7 +69,7 @@ src/views/Company/
|
||||
│ ├── MarketDataView/ # Tab: 股票行情(TypeScript)
|
||||
│ │ ├── index.tsx # 主组件入口(~285 行,Tab 容器)
|
||||
│ │ ├── types.ts # 类型定义
|
||||
│ │ ├── constants.ts # 主题配置、常量
|
||||
│ │ ├── constants.ts # 主题配置、常量(含黑金主题 darkGoldTheme)
|
||||
│ │ ├── services/
|
||||
│ │ │ └── marketService.ts # API 服务层
|
||||
│ │ ├── hooks/
|
||||
@@ -81,11 +81,31 @@ src/views/Company/
|
||||
│ │ ├── index.ts # 组件导出
|
||||
│ │ ├── ThemedCard.tsx # 主题化卡片
|
||||
│ │ ├── MarkdownRenderer.tsx # Markdown 渲染
|
||||
│ │ ├── StockSummaryCard.tsx # 股票概览卡片
|
||||
│ │ ├── AnalysisModal.tsx # 涨幅分析模态框
|
||||
│ │ ├── StockSummaryCard/ # 股票概览卡片(黑金主题 4 列布局)
|
||||
│ │ │ ├── index.tsx # 主组件(4 列 SimpleGrid 布局)
|
||||
│ │ │ ├── StockHeaderCard.tsx # 股票信息卡片(名称、价格、涨跌幅)
|
||||
│ │ │ ├── MetricCard.tsx # 指标卡片模板
|
||||
│ │ │ ├── utils.ts # 状态计算工具函数
|
||||
│ │ │ └── atoms/ # 原子组件
|
||||
│ │ │ ├── index.ts # 原子组件导出
|
||||
│ │ │ ├── DarkGoldCard.tsx # 黑金主题卡片容器
|
||||
│ │ │ ├── CardTitle.tsx # 卡片标题(图标+标题+副标题)
|
||||
│ │ │ ├── MetricValue.tsx # 核心数值展示
|
||||
│ │ │ ├── PriceDisplay.tsx # 价格显示(价格+涨跌箭头)
|
||||
│ │ │ └── StatusTag.tsx # 状态标签(活跃/健康等)
|
||||
│ │ └── panels/ # Tab 面板组件
|
||||
│ │ ├── index.ts # 面板组件统一导出
|
||||
│ │ ├── TradeDataPanel.tsx # 交易数据(K线图、分钟图、表格)
|
||||
│ │ ├── TradeDataPanel/ # 交易数据面板(原子设计模式)
|
||||
│ │ │ ├── index.tsx # 主入口组件(~50 行)
|
||||
│ │ │ ├── KLineChart.tsx # 日K线图组件(~40 行)
|
||||
│ │ │ ├── MinuteKLineSection.tsx # 分钟K线区域(~95 行)
|
||||
│ │ │ ├── TradeTable.tsx # 交易明细表格(~75 行)
|
||||
│ │ │ └── atoms/ # 原子组件
|
||||
│ │ │ ├── index.ts # 统一导出
|
||||
│ │ │ ├── MinuteStats.tsx # 分钟数据统计(~80 行)
|
||||
│ │ │ ├── TradeAnalysis.tsx # 成交分析(~65 行)
|
||||
│ │ │ └── EmptyState.tsx # 空状态组件(~35 行)
|
||||
│ │ ├── FundingPanel.tsx # 融资融券面板
|
||||
│ │ ├── BigDealPanel.tsx # 大宗交易面板
|
||||
│ │ ├── UnusualPanel.tsx # 龙虎榜面板
|
||||
@@ -834,4 +854,149 @@ MarketDataView/components/panels/
|
||||
**设计原则**:
|
||||
- **职责分离**:主组件只负责 Tab 容器和状态管理
|
||||
- **组件复用**:面板组件可独立测试和维护
|
||||
- **类型安全**:每个面板组件有独立的 Props 类型定义
|
||||
- **类型安全**:每个面板组件有独立的 Props 类型定义
|
||||
|
||||
### 2025-12-16 StockSummaryCard 黑金主题重构
|
||||
|
||||
**改动概述**:
|
||||
- `StockSummaryCard.tsx` 从单文件重构为**原子设计模式**的目录结构
|
||||
- 布局从 **1+3**(头部+三卡片)改为 **4 列横向排列**
|
||||
- 新增**黑金主题**(`darkGoldTheme`)
|
||||
- 提取 **5 个原子组件** + **2 个业务组件**
|
||||
|
||||
**拆分后文件结构**:
|
||||
```
|
||||
StockSummaryCard/
|
||||
├── index.tsx # 主组件(4 列 SimpleGrid 布局)
|
||||
├── StockHeaderCard.tsx # 股票信息卡片(名称、价格、涨跌幅、走势)
|
||||
├── MetricCard.tsx # 指标卡片模板组件
|
||||
├── utils.ts # 状态计算工具函数
|
||||
└── atoms/ # 原子组件
|
||||
├── index.ts # 统一导出
|
||||
├── DarkGoldCard.tsx # 黑金主题卡片容器(渐变背景、金色边框)
|
||||
├── CardTitle.tsx # 卡片标题(图标+标题+副标题)
|
||||
├── MetricValue.tsx # 核心数值展示(标签+数值+后缀)
|
||||
├── PriceDisplay.tsx # 价格显示(价格+涨跌箭头+百分比)
|
||||
└── StatusTag.tsx # 状态标签(活跃/健康/警惕等)
|
||||
```
|
||||
|
||||
**4 列布局设计**:
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ 股票信息 │ │ 交易热度 │ │ 估值VS安全 │ │ 情绪与风险 │
|
||||
│ 平安银行 │ │ (流动性) │ │ (便宜否) │ │ (资金面) │
|
||||
│ (000001) │ │ │ │ │ │ │
|
||||
│ 13.50 ↗+1.89%│ │ 成交额 46.79亿│ │ PE 4.96 │ │ 融资 58.23亿 │
|
||||
│ 走势:小幅上涨 │ │ 成交量|换手率 │ │ 质押率(健康) │ │ 融券 1.26亿 │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
**黑金主题配置**(`constants.ts`):
|
||||
```typescript
|
||||
export const darkGoldTheme = {
|
||||
bgCard: 'linear-gradient(135deg, #1a1a2e 0%, #0f0f1a 100%)',
|
||||
border: 'rgba(212, 175, 55, 0.3)',
|
||||
gold: '#D4AF37',
|
||||
orange: '#FF9500',
|
||||
green: '#00C851',
|
||||
red: '#FF4444',
|
||||
textPrimary: '#FFFFFF',
|
||||
textMuted: 'rgba(255, 255, 255, 0.6)',
|
||||
};
|
||||
```
|
||||
|
||||
**状态计算工具**(`utils.ts`):
|
||||
| 函数 | 功能 |
|
||||
|------|------|
|
||||
| `getTrendDescription` | 根据涨跌幅返回走势描述(强势上涨/小幅下跌等) |
|
||||
| `getTurnoverStatus` | 换手率状态(≥3% 活跃, ≥1% 正常, <1% 冷清) |
|
||||
| `getPEStatus` | 市盈率估值评级(极低估值/合理/偏高/泡沫风险) |
|
||||
| `getPledgeStatus` | 质押率健康状态(<10% 健康, <30% 正常, <50% 偏高, ≥50% 警惕) |
|
||||
| `getPriceColor` | 根据涨跌返回颜色(红涨绿跌) |
|
||||
|
||||
**原子组件说明**:
|
||||
| 组件 | 行数 | 用途 | 可复用场景 |
|
||||
|------|------|------|-----------|
|
||||
| `DarkGoldCard` | ~40 | 黑金主题卡片容器 | 任何需要黑金风格的卡片 |
|
||||
| `CardTitle` | ~30 | 卡片标题行 | 带图标的标题展示 |
|
||||
| `MetricValue` | ~45 | 核心数值展示 | 各种指标数值展示 |
|
||||
| `PriceDisplay` | ~55 | 价格+涨跌幅 | 股票价格展示 |
|
||||
| `StatusTag` | ~20 | 状态标签 | 各种状态文字标签 |
|
||||
|
||||
**响应式断点**:
|
||||
- `lg` (≥992px): 4 列
|
||||
- `md` (≥768px): 2 列
|
||||
- `base` (<768px): 1 列
|
||||
|
||||
**类型定义更新**(`types.ts`):
|
||||
- `StockSummaryCardProps.theme` 改为可选参数,组件内置使用 `darkGoldTheme`
|
||||
|
||||
**优化效果**:
|
||||
| 指标 | 优化前 | 优化后 | 改善 |
|
||||
|------|--------|--------|------|
|
||||
| 主文件行数 | ~350 | ~115 | -67% |
|
||||
| 文件数量 | 1 | 8 | 原子设计模式 |
|
||||
| 可复用组件 | 0 | 5 原子 + 2 业务 | 提升 |
|
||||
| 主题支持 | 依赖传入 | 内置黑金主题 | 独立 |
|
||||
|
||||
**设计原则**:
|
||||
- **原子设计模式**:atoms(基础元素)→ 业务组件(MetricCard、StockHeaderCard)→ 页面组件(index.tsx)
|
||||
- **主题独立**:StockSummaryCard 使用内置黑金主题,不依赖外部传入
|
||||
- **职责分离**:状态计算逻辑提取到 `utils.ts`,UI 与逻辑解耦
|
||||
- **组件复用**:原子组件可在其他黑金主题场景复用
|
||||
|
||||
### 2025-12-16 TradeDataPanel 原子设计模式拆分
|
||||
|
||||
**改动概述**:
|
||||
- `TradeDataPanel.tsx` 从 **382 行** 拆分为 **8 个 TypeScript 文件**
|
||||
- 采用**原子设计模式**组织代码
|
||||
- 提取 **3 个原子组件** + **3 个业务组件**
|
||||
|
||||
**拆分后文件结构**:
|
||||
```
|
||||
TradeDataPanel/
|
||||
├── index.tsx # 主入口组件(~50 行,组合 3 个子组件)
|
||||
├── KLineChart.tsx # 日K线图组件(~40 行)
|
||||
├── MinuteKLineSection.tsx # 分钟K线区域(~95 行,含加载/空状态处理)
|
||||
├── TradeTable.tsx # 交易明细表格(~75 行)
|
||||
└── atoms/ # 原子组件
|
||||
├── index.ts # 统一导出
|
||||
├── MinuteStats.tsx # 分钟数据统计(~80 行,4 个 Stat 卡片)
|
||||
├── TradeAnalysis.tsx # 成交分析(~65 行,活跃时段/平均价格等)
|
||||
└── EmptyState.tsx # 空状态组件(~35 行,可复用)
|
||||
```
|
||||
|
||||
**组件依赖关系**:
|
||||
```
|
||||
index.tsx
|
||||
├── KLineChart # 日K线图(ECharts)
|
||||
├── MinuteKLineSection # 分钟K线区域
|
||||
│ ├── MinuteStats (atom) # 开盘/当前/最高/最低价统计
|
||||
│ ├── TradeAnalysis (atom) # 成交数据分析
|
||||
│ └── EmptyState (atom) # 空状态提示
|
||||
└── TradeTable # 交易明细表格(最近 10 天)
|
||||
```
|
||||
|
||||
**组件职责**:
|
||||
| 组件 | 行数 | 功能 |
|
||||
|------|------|------|
|
||||
| `index.tsx` | ~50 | 主入口,组合 3 个子组件 |
|
||||
| `KLineChart` | ~40 | 日K线图渲染,支持图表点击事件 |
|
||||
| `MinuteKLineSection` | ~95 | 分钟K线区域,含加载状态、空状态、统计数据 |
|
||||
| `TradeTable` | ~75 | 最近 10 天交易明细表格 |
|
||||
| `MinuteStats` | ~80 | 分钟数据四宫格统计(开盘/当前/最高/最低价) |
|
||||
| `TradeAnalysis` | ~65 | 成交数据分析(活跃时段、平均价格、数据点数) |
|
||||
| `EmptyState` | ~35 | 通用空状态组件(可配置标题和描述) |
|
||||
|
||||
**优化效果**:
|
||||
| 指标 | 优化前 | 优化后 | 改善 |
|
||||
|------|--------|--------|------|
|
||||
| 主文件行数 | 382 | ~50 | -87% |
|
||||
| 文件数量 | 1 | 8 | 原子设计模式 |
|
||||
| 可复用组件 | 0 | 3 原子 + 3 业务 | 提升 |
|
||||
|
||||
**设计原则**:
|
||||
- **原子设计模式**:atoms(MinuteStats、TradeAnalysis、EmptyState)→ 业务组件(KLineChart、MinuteKLineSection、TradeTable)→ 主组件
|
||||
- **职责分离**:图表、统计、表格各自独立
|
||||
- **组件复用**:EmptyState 可在其他场景复用
|
||||
- **类型安全**:完整的 Props 类型定义和导出
|
||||
Reference in New Issue
Block a user