此指令用于在修改移动端股票图表组件前提供完整的上下文检查,包括组件结构、依赖关系、API接口和关键实现细节。
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 # 考试相关类型
StockMain (主组件) → 依赖:
// 数据获取流程
useStockQueries → RPC API调用 → 数据转换 → StockChart渲染
// 交易流程
TradePanel → useTradeRecords → 状态更新 → ProfitDisplay更新
// WebSocket流程
useStockSocket → 连接建立 → 数据推送 → 答题卡功能
GET /api/v1/stock-data/history/{code}GET /api/v1/date-notes/socket.io (答题卡功能)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;
};
}
B - 买入S - 卖出→ - 下一天ESC - 取消当前操作StockChartLib 中添加新的系列配置types/index.ts 中的类型定义StockChart.tsx 中的渲染逻辑useTradeRecords 中添加新的交易类型TradePanel 组件ProfitDisplay 显示逻辑React.memo 包装纯组件useEffect 依赖数组useCallback 和 useMemo// 使用React Query的错误处理
const { error } = useQuery({
queryKey: ['stockData'],
queryFn: fetchData,
onError: (error) => {
toast.error(`数据加载失败: ${error.message}`);
}
});
// WebSocket连接错误
socket.on('error', (err) => {
console.error('Socket error:', err);
setError(err);
});
// 股票代码验证
if (!stockCode || stockCode.trim().length !== 6) {
toast.error('请输入有效的6位股票代码');
return;
}