QSSS_new / docs /nextjs_refactor_plan.md
misonL's picture
feat: 初始化Next.js项目并添加核心功能
be48fac
|
Raw
History Blame Contribute Delete
7.51 kB
# 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 并可访问。