| # Next.js 重构计划 |
|
|
| ## 1. 后端功能评估 |
|
|
| 根据代码库,后端提供以下核心功能: |
| - **策略管理**:创建/更新/删除量化策略 (`/api/v1/strategies`) |
| - **股票数据**:获取股票基本信息 (`/api/v1/stocks`) |
| - **回测功能**:运行策略回测 (`/api/v1/backtest`) |
| - **选股功能**:执行选股策略 (`/api/v1/stock-selection`) |
| - **投资组合**:管理虚拟投资组合 (`/api/v1/portfolios`) |
|
|
| ## 2. Next.js 重构计划 |
|
|
| ### 项目结构 |
| ``` |
| qsss-web/ |
| ├── app/ |
| │ ├── dashboard/ # 首页仪表盘 |
| │ ├── strategies/ # 策略管理 |
| │ ├── backtest/ # 回测分析 |
| │ ├── selection/ # 选股结果 |
| │ └── api/ # API路由 |
| ├── components/ # 共享组件 |
| ├── lib/ # 工具函数 |
| ├── types/ # TypeScript类型定义 |
| └── public/ # 静态资源 |
| ``` |
|
|
| ### 核心功能设计 |
|
|
| 1. **仪表盘页面** (`/dashboard`) |
| * **数据源**: 后端 API (`/api/v1/market-data`, `/api/v1/strategies/summary`, `/api/v1/portfolios/summary`) |
| * **组件**: |
| * `MarketIndicators.tsx`: 展示上证、深证、创业板、北交所指数,使用 `recharts` 或 `nivo` 进行趋势图可视化。 |
| * `HotNewsFeed.tsx`: 抓取外部财经新闻(通过后端代理或直接抓取),提供可点击的外部链接。 |
| * `StrategyPerformanceSummary.tsx`: 展示热门策略的简要表现,链接到策略详情页。 |
| * `PortfolioOverview.tsx`: 用户投资组合的简要概览。 |
| * **交互**: 指数卡片点击可查看详情,新闻点击跳转外部链接,策略卡片点击跳转策略详情。 |
|
|
| 2. **策略管理** (`/strategies`) |
| * **数据源**: 后端 API (`/api/v1/strategies`, `/api/v1/strategy-instances`) |
| * **组件**: |
| * `StrategyList.tsx`: 展示所有策略,支持搜索、过滤、排序、分页。 |
| * `StrategyForm.tsx`: 创建/编辑策略的表单,包含参数配置(JSON Schema 动态生成表单)。 |
| * `StrategyInstanceList.tsx`: 展示策略实例(运行中的策略)。 |
| * **交互**: 策略列表项点击进入详情,创建/编辑策略,启动/停止策略实例。 |
|
|
| 3. **回测分析** (`/backtest`) |
| * **数据源**: 后端 API (`/api/v1/backtest`, `/api/v1/backtest-results`) |
| * **组件**: |
| * `BacktestForm.tsx`: 设置回测参数(策略ID、股票池、时间范围、初始资金等)。 |
| * `EquityCurveChart.tsx`: 使用 `recharts` 或 `nivo` 绘制资金曲线。 |
| * `BacktestMetricsTable.tsx`: 展示回测关键指标(夏普比率、最大回撤等)。 |
| * `TradeList.tsx`: 展示回测期间的交易详情。 |
| * **交互**: 提交回测任务,查看回测进度,分析回测结果。 |
|
|
| 4. **选股结果** (`/selection`) |
| * **数据源**: 后端 API (`/api/v1/stock-selection`, `/api/v1/stocks`) |
| * **组件**: |
| * `StockSelectionForm.tsx`: 设置选股条件(基于策略或自定义条件)。 |
| * `SelectedStockTable.tsx`: 展示选股结果,支持排序、过滤。 |
| * `StockDetailModal.tsx`: 股票详细信息弹窗。 |
| * **交互**: 提交选股任务,查看选股结果,点击股票查看详情。 |
|
|
| ### 技术栈选择 |
| - **框架**: Next.js 14 (App Router) - 强调 Server Components 和 Client Components 的合理划分。 |
| - **UI库**: Shadcn UI + Tailwind CSS - 提供可定制的、无障碍的组件。 |
| - **状态管理**: Zustand - 用于客户端的轻量级全局状态管理。 |
| - **数据获取**: React Query (TanStack Query) - 用于客户端数据缓存、同步和更新。 |
| - **API层**: Next.js API Routes (或 Server Actions) 作为后端 API 的代理层,处理认证和数据转换。 |
| - **可视化**: Recharts (或 Nivo) - 用于图表绘制。 |
| - **表单处理**: React Hook Form + Zod - 用于表单验证和提交。 |
| - **类型安全**: TypeScript - 全面类型检查。 |
|
|
| ## 3. 实施路线图 |
|
|
| ### 阶段1:项目初始化与基础架构 (1-2天) |
| 1. 创建 Next.js 项目 (`npx create-next-app@latest qsss-web --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"`)。 |
| 2. 配置 `tailwind.config.ts` 和 `globals.css`。 |
| 3. 集成 Shadcn UI (`npx shadcn-ui@latest init` & `npx shadcn-ui@latest add button card form input label table ...`)。 |
| 4. 设置 `lib/api.ts` (Axios 实例) 和 `app/api/proxy/route.ts` (Next.js API Route 作为后端代理)。 |
| 5. 创建 `components/shared/Layout.tsx` (包含侧边栏导航和顶部Header)。 |
| 6. 定义 `types/` 目录下的核心数据模型类型。 |
|
|
| ### 阶段2:核心功能开发 (5-7天) |
| 1. **仪表盘页面** (`app/dashboard/page.tsx`) |
| * 实现 `MarketIndicators.tsx` (模拟数据,后期集成实时API)。 |
| * 实现 `HotNewsFeed.tsx` (模拟数据,后期集成外部API)。 |
| * 集成后端 API 获取策略和投资组合摘要数据。 |
| 2. **策略管理页面** (`app/strategies/page.tsx` & `app/strategies/[id]/page.tsx`) |
| * 实现 `StrategyList.tsx`,通过 React Query 获取策略列表。 |
| * 实现 `StrategyForm.tsx`,使用 React Hook Form 和 Zod 进行表单验证和提交。 |
| * 实现策略的创建、编辑、删除功能。 |
| 3. **回测分析页面** (`app/backtest/page.tsx`) |
| * 实现 `BacktestForm.tsx`。 |
| * 集成后端 API 触发回测任务。 |
| * 实现 `EquityCurveChart.tsx` 和 `BacktestMetricsTable.tsx`。 |
| 4. **选股结果页面** (`app/selection/page.tsx`) |
| * 实现 `StockSelectionForm.tsx`。 |
| * 集成后端 API 获取选股结果。 |
| * 实现 `SelectedStockTable.tsx`。 |
|
|
| ### 阶段3:高级功能与优化 (3-5天) |
| 1. **认证集成**: 如果后端有认证,集成 NextAuth.js 或手动实现认证流程。 |
| 2. **实时数据**: 探索 WebSocket 或 Server-Sent Events (SSE) 实现实时数据更新。 |
| 3. **性能优化**: |
| * 使用 Next.js 的 Image 组件优化图片。 |
| * 代码分割和懒加载。 |
| * Server Components 的合理使用。 |
| 4. **错误处理与加载状态**: 全局错误边界,友好的加载和错误提示。 |
| 5. **用户体验优化**: 动画、微交互。 |
|
|
| ### 阶段4:测试与部署 (1-2天) |
| 1. **单元测试**: 使用 Jest/React Testing Library 对组件进行单元测试。 |
| 2. **端到端测试**: 使用 Playwright 或 Cypress 进行端到端测试。 |
| 3. **Docker容器化**: 为 Next.js 应用创建 Dockerfile,优化镜像大小。 |
| 4. **Hugging Face Space部署**: 调整 `Dockerfile` 和 `app.py` (如果需要) 以适应 Hugging Face Space 的部署环境,确保路由和静态文件服务正确。 |
|
|
| ## 风险与挑战 |
| - **Hugging Face Space 路由限制**: 之前遇到的首页问题可能需要通过 Next.js 的 `basePath` 或自定义服务器配置来解决,这在免费层可能有限制。 |
| - **后端 API 性能**: 如果后端 API 响应慢,会直接影响前端体验。 |
| - **数据量**: 大量股票数据和回测结果可能导致前端渲染性能问题,需要虚拟化列表等优化。 |
| - **TA-Lib 兼容性**: 确保后端环境中的 TA-Lib 库与 Python 版本兼容。 |
|
|
| ## 评估标准 |
| - 所有核心功能在 Next.js 前端正常工作。 |
| - 页面加载速度快,用户体验流畅。 |
| - 代码结构清晰,易于维护和扩展。 |
| - 成功部署到 Hugging Face Space 并可访问。 |