--- description: "移动端股票图表检查指令" --- 此指令用于在修改移动端股票图表组件前提供完整的上下文检查,包括组件结构、依赖关系、API接口和关键实现细节。 ## 当前组件结构 ### 1. 主要文件结构 ``` src/client/mobile/components/stock/ ├── stock_main.tsx # 主入口组件 ├── hooks/ │ └── useStockSocketClient.ts # WebSocket连接hook ├── components/ │ └── stock-chart/ # 股票图表核心组件 │ ├── mod.ts # 模块导出文件 │ └── src/ │ ├── components/ # UI组件 │ │ ├── StockChart.tsx # 主图表组件 │ │ ├── MemoToggle.tsx # 备忘录显示切换 │ │ ├── TradePanel.tsx # 交易面板 │ │ ├── ProfitDisplay.tsx # 收益显示 │ │ └── DrawingToolbar.tsx # 画线工具栏 │ ├── hooks/ # 自定义hooks │ │ ├── useStockQueries.ts # 数据查询hook │ │ ├── useTradeRecords.ts # 交易记录hook │ │ ├── useProfitCalculator.ts # 收益计算hook │ │ └── useStockDataFilter.ts # 数据过滤hook │ ├── lib/ # 核心库 │ │ ├── index.ts # 主库入口 │ │ ├── StockChart.ts # 图表逻辑 │ │ ├── DateMemoHandler.ts # 日期备忘录处理 │ │ ├── config/ChartBaseConfig.ts # 图表配置 │ │ ├── drawing/ # 绘图工具 │ │ └── data/DataProcessor.ts # 数据处理 │ └── types/ # 类型定义 │ └── index.ts # 所有类型定义 └── types/ └── exam.ts # 考试相关类型 ``` ### 2. 核心组件依赖关系 **StockMain (主组件) → 依赖:** - useStockSocket: WebSocket连接 - useStockQueries: 数据查询 - useStockDataFilter: 数据过滤 - useTradeRecords: 交易记录 - useProfitCalculator: 收益计算 - StockChart: 主图表显示 - TradePanel: 交易操作 - ProfitDisplay: 收益显示 - DrawingToolbar: 画线工具 ### 3. 关键技术栈 - **图表库**: ECharts - **状态管理**: React Query (TanStack Query) - **路由**: React Router - **样式**: Tailwind CSS - **WebSocket**: Socket.io-client - **表单**: React Hook Form - **通知**: React Toastify ## 关键实现细节 ### 1. 数据流架构 ```typescript // 数据获取流程 useStockQueries → RPC API调用 → 数据转换 → StockChart渲染 // 交易流程 TradePanel → useTradeRecords → 状态更新 → ProfitDisplay更新 // WebSocket流程 useStockSocket → 连接建立 → 数据推送 → 答题卡功能 ``` ### 2. 主要API接口 - **股票历史数据**: `GET /api/v1/stock-data/history/{code}` - **日期备忘录**: `GET /api/v1/date-notes` - **WebSocket连接**: `/socket.io` (答题卡功能) ### 3. 核心类型定义 ```typescript interface StockData { o: string; // 开盘价 c: string; // 收盘价 h: string; // 最高价 l: string; // 最低价 v: string; // 成交量 d: string; // 日期 zd: string; // 涨跌幅 } interface TradeRecord { type: 'BUY' | 'SELL'; price: number; timestamp: number; date: string; } interface ProfitSummary { totalProfit: number; dailyStats: { date: string; open: number; high: number; close: number; low: number; change: number; }; } ``` ### 4. 绘图功能支持 - **水平线绘制**: ActiveType.HORIZONTAL - **趋势线绘制**: ActiveType.TREND - **扩展趋势线**: ActiveType.TREND_EXTENDED - **线条管理**: 显示/隐藏/清除 ### 5. 快捷键支持 - `B` - 买入 - `S` - 卖出 - `→` - 下一天 - `ESC` - 取消当前操作 ## 修改前检查清单 ### ✅ 架构一致性检查 - [ ] 是否遵循现有的组件分层结构? - [ ] 是否保持类型定义的完整性? - [ ] 是否兼容现有的数据流模式? ### ✅ 功能影响评估 - [ ] 修改是否会影响交易功能? - [ ] 修改是否会影响图表渲染? - [ ] 修改是否会影响WebSocket连接? ### ✅ 性能考虑 - [ ] 修改是否引入不必要的重渲染? - [ ] 修改是否影响图表性能? - [ ] 修改是否增加内存使用? ### ✅ 兼容性检查 - [ ] 修改是否向后兼容? - [ ] 修改是否影响移动端适配? - [ ] 修改是否影响现有的快捷键功能? ## 常见修改场景 ### 1. 添加新的图表类型 - 需要在 `StockChartLib` 中添加新的系列配置 - 更新 `types/index.ts` 中的类型定义 - 修改 `StockChart.tsx` 中的渲染逻辑 ### 2. 添加新的交易功能 - 在 `useTradeRecords` 中添加新的交易类型 - 更新 `TradePanel` 组件 - 修改 `ProfitDisplay` 显示逻辑 ### 3. 优化性能 - 使用 `React.memo` 包装纯组件 - 优化 `useEffect` 依赖数组 - 使用 `useCallback` 和 `useMemo` ## 错误处理规范 ### 1. API错误处理 ```typescript // 使用React Query的错误处理 const { error } = useQuery({ queryKey: ['stockData'], queryFn: fetchData, onError: (error) => { toast.error(`数据加载失败: ${error.message}`); } }); ``` ### 2. WebSocket错误处理 ```typescript // WebSocket连接错误 socket.on('error', (err) => { console.error('Socket error:', err); setError(err); }); ``` ### 3. 用户输入验证 ```typescript // 股票代码验证 if (!stockCode || stockCode.trim().length !== 6) { toast.error('请输入有效的6位股票代码'); return; } ```