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/ # 静态资源
核心功能设计
仪表盘页面 (
/dashboard)- 数据源: 后端 API (
/api/v1/market-data,/api/v1/strategies/summary,/api/v1/portfolios/summary) - 组件:
MarketIndicators.tsx: 展示上证、深证、创业板、北交所指数,使用recharts或nivo进行趋势图可视化。HotNewsFeed.tsx: 抓取外部财经新闻(通过后端代理或直接抓取),提供可点击的外部链接。StrategyPerformanceSummary.tsx: 展示热门策略的简要表现,链接到策略详情页。PortfolioOverview.tsx: 用户投资组合的简要概览。
- 交互: 指数卡片点击可查看详情,新闻点击跳转外部链接,策略卡片点击跳转策略详情。
- 数据源: 后端 API (
策略管理 (
/strategies)- 数据源: 后端 API (
/api/v1/strategies,/api/v1/strategy-instances) - 组件:
StrategyList.tsx: 展示所有策略,支持搜索、过滤、排序、分页。StrategyForm.tsx: 创建/编辑策略的表单,包含参数配置(JSON Schema 动态生成表单)。StrategyInstanceList.tsx: 展示策略实例(运行中的策略)。
- 交互: 策略列表项点击进入详情,创建/编辑策略,启动/停止策略实例。
- 数据源: 后端 API (
回测分析 (
/backtest)- 数据源: 后端 API (
/api/v1/backtest,/api/v1/backtest-results) - 组件:
BacktestForm.tsx: 设置回测参数(策略ID、股票池、时间范围、初始资金等)。EquityCurveChart.tsx: 使用recharts或nivo绘制资金曲线。BacktestMetricsTable.tsx: 展示回测关键指标(夏普比率、最大回撤等)。TradeList.tsx: 展示回测期间的交易详情。
- 交互: 提交回测任务,查看回测进度,分析回测结果。
- 数据源: 后端 API (
选股结果 (
/selection)- 数据源: 后端 API (
/api/v1/stock-selection,/api/v1/stocks) - 组件:
StockSelectionForm.tsx: 设置选股条件(基于策略或自定义条件)。SelectedStockTable.tsx: 展示选股结果,支持排序、过滤。StockDetailModal.tsx: 股票详细信息弹窗。
- 交互: 提交选股任务,查看选股结果,点击股票查看详情。
- 数据源: 后端 API (
技术栈选择
- 框架: 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天)
- 创建 Next.js 项目 (
npx create-next-app@latest qsss-web --typescript --tailwind --eslint --app --src-dir --import-alias "@/*")。 - 配置
tailwind.config.ts和globals.css。 - 集成 Shadcn UI (
npx shadcn-ui@latest init&npx shadcn-ui@latest add button card form input label table ...)。 - 设置
lib/api.ts(Axios 实例) 和app/api/proxy/route.ts(Next.js API Route 作为后端代理)。 - 创建
components/shared/Layout.tsx(包含侧边栏导航和顶部Header)。 - 定义
types/目录下的核心数据模型类型。
阶段2:核心功能开发 (5-7天)
- 仪表盘页面 (
app/dashboard/page.tsx)- 实现
MarketIndicators.tsx(模拟数据,后期集成实时API)。 - 实现
HotNewsFeed.tsx(模拟数据,后期集成外部API)。 - 集成后端 API 获取策略和投资组合摘要数据。
- 实现
- 策略管理页面 (
app/strategies/page.tsx&app/strategies/[id]/page.tsx)- 实现
StrategyList.tsx,通过 React Query 获取策略列表。 - 实现
StrategyForm.tsx,使用 React Hook Form 和 Zod 进行表单验证和提交。 - 实现策略的创建、编辑、删除功能。
- 实现
- 回测分析页面 (
app/backtest/page.tsx)- 实现
BacktestForm.tsx。 - 集成后端 API 触发回测任务。
- 实现
EquityCurveChart.tsx和BacktestMetricsTable.tsx。
- 实现
- 选股结果页面 (
app/selection/page.tsx)- 实现
StockSelectionForm.tsx。 - 集成后端 API 获取选股结果。
- 实现
SelectedStockTable.tsx。
- 实现
阶段3:高级功能与优化 (3-5天)
- 认证集成: 如果后端有认证,集成 NextAuth.js 或手动实现认证流程。
- 实时数据: 探索 WebSocket 或 Server-Sent Events (SSE) 实现实时数据更新。
- 性能优化:
- 使用 Next.js 的 Image 组件优化图片。
- 代码分割和懒加载。
- Server Components 的合理使用。
- 错误处理与加载状态: 全局错误边界,友好的加载和错误提示。
- 用户体验优化: 动画、微交互。
阶段4:测试与部署 (1-2天)
- 单元测试: 使用 Jest/React Testing Library 对组件进行单元测试。
- 端到端测试: 使用 Playwright 或 Cypress 进行端到端测试。
- Docker容器化: 为 Next.js 应用创建 Dockerfile,优化镜像大小。
- 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 并可访问。