项目名称: Revival AI Fund Management System
技术栈: React 19 + Express + SQLite + JWT + Mock AI
复杂度: Large (10 大模块 + 全量持仓 + 调仓跟踪 + 标的分析)
生成日期: 2026-06-09
一、架构总览
┌───────────────────────────────────────────────────────────────────┐
│ Frontend (React 19) │
│ ┌──────────┬───────────┬────────────┬───────────┬──────────────┐ │
│ │Dashboard │ Funds │ Portfolio │ Analysis │ Holdings │ │
│ │ │ Products │ (User) │ AI │ & Assets │ │
│ ├──────────┼───────────┼────────────┼───────────┼──────────────┤ │
│ │Users │ Settings │ Notif │ Transact │ Rebalance │ │
│ │(Admin) │ │ Center │ History │ Timeline │ │
│ └──────────┴───────────┴────────────┴───────────┴──────────────┘ │
│ ↓ REST API │
├───────────────────────────────────────────────────────────────────┤
│ Backend (Express + Better-SQLite3) │
│ ┌──────┬────────┬──────────┬──────┬──────┬──────┬─────────────┐ │
│ │ Auth │ Funds │ Portfolio│ Trans│ AI │ Admin│ Holdings │ │
│ │ JWT │ CRUD │ Mgmt │ Log │ Mock │ Mgmt │ & Assets │ │
│ └──────┴────────┴──────────┴──────┴──────┴──────┴─────────────┘ │
│ ↓ SQLite │
└───────────────────────────────────────────────────────────────────┘
二、系统模块(10 大模块)
| # |
模块 |
说明 |
| 1 |
用户认证 |
注册、邮箱验证、登录、JWT 刷新、密码重置 |
| 2 |
基金产品管理 |
基金 CRUD、净值更新、分类标签、搜索筛选 |
| 3 |
基金持仓明细 |
每只基金全量持仓(实时快照)、行业分布、持仓详情 |
| 4 |
调仓记录跟踪 |
每次调仓的变动日志、历史回溯、持仓变化对比 |
| 5 |
底层标的跟踪 |
标的详情、价格走势、跨基金持仓分析、相关性 |
| 6 |
用户投资组合 |
用户持仓、申购赎回、收益计算、组合再平衡 |
| 7 |
交易记录 |
申购/赎回流水、历史查询、导出 CSV |
| 8 |
AI 智能分析 |
基金评分、风险评级、持仓诊断、标的研究 |
| 9 |
仪表盘 |
总资产概览、收益曲线、持仓分布、最近交易 |
| 10 |
通知中心 |
系统通知、交易确认、净值变动、调仓提醒 |
三、数据库 Schema 设计
3.1 用户与认证
CREATE TABLE users (
id TEXT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
name TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'user' CHECK(role IN ('user','admin')),
email_verified_at TEXT,
email_verify_token TEXT,
reset_password_token TEXT,
reset_password_expires TEXT,
avatar_url TEXT,
is_active INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
3.2 基金产品
CREATE TABLE funds (
id TEXT PRIMARY KEY,
code TEXT UNIQUE NOT NULL, -- 基金代码
name TEXT NOT NULL, -- 基金名称
type TEXT NOT NULL CHECK(type IN ('equity','bond','hybrid','money_market','index','other')),
risk_level INTEGER NOT NULL CHECK(risk_level BETWEEN 1 AND 5),
fund_manager TEXT, -- 基金经理
description TEXT,
nav REAL NOT NULL DEFAULT 0, -- 最新净值
nav_date TEXT, -- 净值日期
total_assets REAL DEFAULT 0, -- 资产规模
established_date TEXT, -- 成立日期
management_fee REAL DEFAULT 0, -- 管理费率
status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open','closed','pending')),
is_active INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE fund_nav_history (
id TEXT PRIMARY KEY,
fund_id TEXT NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
nav REAL NOT NULL,
nav_date TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_nav_fund_date ON fund_nav_history(fund_id, nav_date);
3.3 基金持仓明细(实时快照)
CREATE TABLE fund_holdings (
id TEXT PRIMARY KEY,
fund_id TEXT NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
asset_id TEXT NOT NULL REFERENCES underlying_assets(id),
asset_name TEXT NOT NULL, -- 标的名称(冗余,方便查询)
asset_code TEXT, -- 标的代码
asset_type TEXT NOT NULL CHECK(asset_type IN ('stock','bond','fund','derivative','cash','other')),
shares REAL NOT NULL DEFAULT 0, -- 持有数量
market_value REAL NOT NULL DEFAULT 0, -- 市值
cost_price REAL, -- 成本价
current_price REAL, -- 当前价格
weight REAL NOT NULL DEFAULT 0, -- 占基金净值比例 %
change_direction TEXT CHECK(change_direction IN ('increase','decrease','new','unchanged','exited')),
change_shares REAL DEFAULT 0, -- 较上次调仓变动数量
is_active INTEGER NOT NULL DEFAULT 1, -- 是否仍在持仓
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(fund_id, asset_id) -- 一只基金对同一标的只有一条当前持仓
);
CREATE INDEX idx_holdings_fund ON fund_holdings(fund_id);
CREATE INDEX idx_holdings_asset ON fund_holdings(asset_id);
-- 行业分布(实时快照)
CREATE TABLE fund_sector_allocation (
id TEXT PRIMARY KEY,
fund_id TEXT NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
sector TEXT NOT NULL, -- 行业名称
weight REAL NOT NULL, -- 占比 %
market_value REAL DEFAULT 0, -- 行业市值
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(fund_id, sector)
);
CREATE INDEX idx_sector_fund ON fund_sector_allocation(fund_id);
3.4 调仓记录(变动日志)
CREATE TABLE rebalance_records (
id TEXT PRIMARY KEY,
fund_id TEXT NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
rebalance_date TEXT NOT NULL, -- 调仓日期
description TEXT, -- 调仓说明
operator TEXT, -- 操作人
total_changed_count INTEGER, -- 变动标的总数
total_turnover REAL, -- 调仓换手率
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_rebalance_fund ON rebalance_records(fund_id);
-- 调仓明细:每条记录一个标的的变动
CREATE TABLE rebalance_details (
id TEXT PRIMARY KEY,
rebalance_id TEXT NOT NULL REFERENCES rebalance_records(id) ON DELETE CASCADE,
asset_id TEXT NOT NULL REFERENCES underlying_assets(id),
asset_name TEXT NOT NULL,
asset_type TEXT NOT NULL,
previous_shares REAL NOT NULL DEFAULT 0, -- 调仓前份额
new_shares REAL NOT NULL DEFAULT 0, -- 调仓后份额
previous_weight REAL NOT NULL DEFAULT 0, -- 调仓前权重
new_weight REAL NOT NULL DEFAULT 0, -- 调仓后权重
change_type TEXT NOT NULL CHECK(change_type IN ('increase','decrease','new','exit','unchanged')),
change_amount REAL DEFAULT 0, -- 变动金额
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_rebalance_detail_rid ON rebalance_details(rebalance_id);
CREATE INDEX idx_rebalance_detail_asset ON rebalance_details(asset_id);
3.5 底层标的资产
CREATE TABLE underlying_assets (
id TEXT PRIMARY KEY,
code TEXT UNIQUE NOT NULL, -- 标的代码
name TEXT NOT NULL, -- 标的名称
type TEXT NOT NULL CHECK(type IN ('stock','bond','index','commodity','fund','other')),
sector TEXT, -- 所属行业
exchange TEXT, -- 交易所
current_price REAL DEFAULT 0, -- 当前价格
price_change_pct REAL DEFAULT 0, -- 涨跌幅 %
market_cap REAL DEFAULT 0, -- 市值
pe_ratio REAL, -- 市盈率
pb_ratio REAL, -- 市净率
dividend_yield REAL, -- 股息率
description TEXT,
is_active INTEGER NOT NULL DEFAULT 1,
last_updated TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE asset_price_history (
id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL REFERENCES underlying_assets(id) ON DELETE CASCADE,
price REAL NOT NULL,
price_date TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_price_asset_date ON asset_price_history(asset_id, price_date);
3.6 用户投资组合
CREATE TABLE portfolios (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name TEXT NOT NULL,
description TEXT,
total_invested REAL DEFAULT 0,
current_value REAL DEFAULT 0,
total_return REAL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE portfolio_holdings (
id TEXT PRIMARY KEY,
portfolio_id TEXT NOT NULL REFERENCES portfolios(id) ON DELETE CASCADE,
fund_id TEXT NOT NULL REFERENCES funds(id),
shares REAL NOT NULL DEFAULT 0,
cost_basis REAL DEFAULT 0,
current_value REAL DEFAULT 0,
return_amount REAL DEFAULT 0,
return_percentage REAL DEFAULT 0,
weight REAL DEFAULT 0,
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(portfolio_id, fund_id)
);
3.7 交易记录
CREATE TABLE transactions (
id TEXT PRIMARY KEY,
portfolio_id TEXT NOT NULL REFERENCES portfolios(id) ON DELETE CASCADE,
fund_id TEXT NOT NULL REFERENCES funds(id),
user_id TEXT NOT NULL REFERENCES users(id),
type TEXT NOT NULL CHECK(type IN ('buy','sell')),
shares REAL NOT NULL,
nav REAL NOT NULL,
amount REAL NOT NULL,
fee REAL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'completed' CHECK(status IN ('pending','completed','failed')),
note TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_trans_user ON transactions(user_id);
CREATE INDEX idx_trans_portfolio ON transactions(portfolio_id);
3.8 通知
CREATE TABLE notifications (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
type TEXT NOT NULL CHECK(type IN ('transaction','nav_update','system','risk_warning','rebalance','holding_change')),
title TEXT NOT NULL,
message TEXT,
is_read INTEGER NOT NULL DEFAULT 0,
related_id TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
read_at TEXT
);
CREATE INDEX idx_notif_user ON notifications(user_id, is_read);
3.9 系统日志
CREATE TABLE system_logs (
id TEXT PRIMARY KEY,
user_id TEXT,
action TEXT NOT NULL,
resource TEXT NOT NULL,
resource_id TEXT,
detail TEXT, -- JSON
ip_address TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_logs_action ON system_logs(action, created_at);
四、核心业务流程
4.1 基金持仓与调仓流程
基金调仓事件触发
│
├── 1. 写入 rebalance_records(调仓主记录)
│
├── 2. 写入 rebalance_details(每个标的变动明细)
│ ├── 记录变动前/后的份额、权重
│ └── 标记 change_type: increase/decrease/new/exit
│
├── 3. 更新 fund_holdings(实时持仓快照)
│ ├── 新增标的 → INSERT
│ ├── 退出标的 → is_active=0
│ ├── 存量调整 → UPDATE shares, weight, change_direction
│ └── 行业分布同步更新
│
└── 4. 生成通知(持仓变动提醒)
4.2 历史回溯方式
- 当前持仓 → 直接查询
fund_holdings WHERE is_active=1
- 特定日期持仓 → 通过
rebalance_records + rebalance_details 向前推算快照
- 调仓时间线 →
rebalance_records 按日期排序,展示每次调仓概况
- 两次调仓对比 → 对比两次
rebalance_details 中同一标的的权重变化
五、API 路由设计
5.1 认证
POST /api/auth/register
POST /api/auth/verify-email
POST /api/auth/login
POST /api/auth/refresh
POST /api/auth/forgot-password
POST /api/auth/reset-password
GET /api/auth/me
PUT /api/auth/me
5.2 基金产品
GET /api/funds — 列表(分页+搜索+筛选)
GET /api/funds/:id — 详情(含基本信息)
GET /api/funds/:id/nav-history — 净值历史
POST /api/funds — 创建 (admin)
PUT /api/funds/:id — 更新 (admin)
DELETE /api/funds/:id — 删除 (admin)
5.3 基金持仓明细
GET /api/funds/:id/holdings — 当前全量持仓
GET /api/funds/:id/holdings/top — 按权重排序前列
GET /api/funds/:id/sectors — 行业分布
GET /api/funds/:id/holdings/summary — 持仓汇总(总市值、数量等)
5.4 调仓记录
GET /api/funds/:id/rebalances — 调仓时间线列表
GET /api/funds/:id/rebalances/:rid — 单次调仓详情(含明细)
GET /api/funds/:id/rebalances/compare — 最近两次调仓对比
GET /api/funds/:id/holdings/history — 特定标的的持仓变化历史
5.5 底层标的跟踪
GET /api/assets — 标的列表(分页+搜索)
GET /api/assets/:id — 标的详情
GET /api/assets/:id/price-history — 价格历史
GET /api/assets/:id/funds — 持有该标的的基金列表
GET /api/assets/compare — 多标的对比
GET /api/assets/correlation — 标的相关性矩阵
GET /api/assets/top-held — 被持有最多的标的排行
5.6 用户投资组合
GET /api/portfolios
POST /api/portfolios
GET /api/portfolios/:id
PUT /api/portfolios/:id
DELETE /api/portfolios/:id
GET /api/portfolios/:id/holdings
POST /api/portfolios/:id/rebalance
5.7 交易
POST /api/transactions/buy
POST /api/transactions/sell
GET /api/transactions
GET /api/transactions/:id
5.8 AI 分析
GET /api/analysis/fund-score/:fundId
GET /api/analysis/portfolio-diagnosis/:portfolioId
GET /api/analysis/holding-analysis/:fundId — 持仓诊断
GET /api/analysis/asset-insight/:assetId — 标的研究报告
GET /api/analysis/rebalance-suggestion/:fundId — 调仓建议
GET /api/analysis/market-trend
POST /api/analysis/simulate
5.9 仪表盘
GET /api/dashboard/summary
GET /api/dashboard/returns
GET /api/dashboard/distribution
GET /api/dashboard/recent-transactions
5.10 通知
GET /api/notifications
PUT /api/notifications/:id/read
PUT /api/notifications/read-all
DELETE /api/notifications/:id
5.11 管理
GET /api/admin/users
PUT /api/admin/users/:id/role
GET /api/admin/logs
GET /api/admin/stats
六、前端路由与页面
/login — 登录
/register — 注册
/verify-email?token=xxx — 邮箱验证
/forgot-password — 忘记密码
/reset-password?token=xxx — 重置密码
/dashboard — 仪表盘
/funds — 基金列表
/funds/:id — 基金详情(含基本信息 Tab)
└─ Tab: 持仓明细 全部持仓表格
└─ Tab: 行业分布 行业配置图
└─ Tab: 调仓记录 调仓时间线
└─ Tab: 净值走势 净值曲线
/funds/:id/holdings — 基金全量持仓(含排序、筛选、搜索)
/funds/:id/rebalances — 调仓历史列表
/funds/:id/rebalances/:rid — 单次调仓详情(变动对比)
/funds/:id/rebalances/compare — 两次调仓对比视图
/assets — 标的资产总览
/assets/:id — 标的研究详情(价格走势 + 持有基金)
/assets/compare — 标的对比工具
/assets/correlation — 相关性矩阵
/portfolios — 我的投资组合
/portfolios/:id — 组合详情
/portfolios/:id/rebalance — 组合再平衡
/transactions — 交易记录
/analysis — AI 分析中心
/notifications — 通知中心
/settings — 个人设置
/admin/users — 用户管理 (admin)
/admin/logs — 操作日志 (admin)
七、前端组件树
src/
├── components/
│ ├── layout/
│ │ ├── AppLayout.tsx
│ │ ├── Sidebar.tsx
│ │ ├── Topbar.tsx
│ │ └── AuthLayout.tsx
│ │
│ ├── ui/
│ │ ├── Button.tsx
│ │ ├── Card.tsx
│ │ ├── Modal.tsx
│ │ ├── Table.tsx
│ │ ├── FormField.tsx
│ │ ├── Badge.tsx
│ │ ├── Tabs.tsx
│ │ ├── EmptyState.tsx
│ │ ├── LoadingSpinner.tsx
│ │ ├── Skeleton.tsx
│ │ └── ErrorBoundary.tsx
│ │
│ ├── dashboard/
│ │ ├── SummaryCards.tsx
│ │ ├── ReturnChart.tsx
│ │ ├── DistributionPie.tsx
│ │ └── RecentTransactions.tsx
│ │
│ ├── funds/
│ │ ├── FundCard.tsx
│ │ ├── FundList.tsx
│ │ ├── FundDetail.tsx
│ │ └── FundNavChart.tsx
│ │
│ ├── holdings/ ★ 核心模块
│ │ ├── HoldingsTable.tsx — 全量持仓表格(可排序/筛选)
│ │ ├── HoldingRow.tsx — 单行(含涨跌色、变动方向图标)
│ │ ├── HoldingsSummary.tsx — 持仓汇总卡片(总市值/标的数/集中度)
│ │ ├── SectorAllocationChart.tsx — 行业分布图(饼图/玫瑰图)
│ │ └── ConcentrationGauge.tsx — 集中度仪表盘
│ │
│ ├── rebalance/ ★ 核心模块
│ │ ├── RebalanceTimeline.tsx — 调仓时间线
│ │ ├── RebalanceDetail.tsx — 单次调仓详情
│ │ ├── RebalanceCompare.tsx — 调仓前后对比视图
│ │ ├── ChangeRow.tsx — 单条变动行(增/减/新进/退出)
│ │ └── TurnoverIndicator.tsx — 换手率指示器
│ │
│ ├── assets/ ★ 核心模块
│ │ ├── AssetCard.tsx
│ │ ├── AssetList.tsx
│ │ ├── AssetDetail.tsx
│ │ ├── AssetPriceChart.tsx
│ │ ├── AssetFundTable.tsx — 持有该标的的基金列表
│ │ ├── AssetCompareTool.tsx — 多标对比
│ │ └── CorrelationMatrix.tsx — 相关性热力图
│ │
│ ├── portfolio/
│ │ ├── PortfolioCard.tsx
│ │ ├── PortfolioDetail.tsx
│ │ ├── PortfolioHoldingsTable.tsx
│ │ └── RebalancePanel.tsx
│ │
│ ├── transactions/
│ │ ├── BuyForm.tsx
│ │ ├── SellForm.tsx
│ │ └── TransactionTable.tsx
│ │
│ ├── analysis/
│ │ ├── FundScoreCard.tsx
│ │ ├── PortfolioDiagnosis.tsx
│ │ ├── HoldingAnalysis.tsx — 持仓 AI 诊断
│ │ ├── AssetInsight.tsx — 标的研究报告
│ │ ├── MarketTrendChart.tsx
│ │ └── SimulationForm.tsx
│ │
│ └── notifications/
│ ├── NotificationList.tsx
│ └── NotificationBell.tsx
│
├── hooks/
│ ├── useAuth.ts
│ ├── useFunds.ts
│ ├── useHoldings.ts ★
│ ├── useRebalances.ts ★
│ ├── useAssets.ts ★
│ ├── usePortfolio.ts
│ └── useNotifications.ts
│
├── lib/
│ ├── api.ts
│ ├── auth.ts
│ └── utils.ts
│
├── stores/
│ └── authStore.ts
│
├── styles/
│ ├── tokens.css
│ └── global.css
│
├── App.tsx
└── main.tsx
八、实施阶段与任务
Phase 1: 项目脚手架(2 天)
| # |
任务 |
产出 |
| 1.1 |
初始化 monorepo 结构 |
/server, /client 目录 |
| 1.2 |
后端 Express 框架 |
middleware 链 + 错误处理 + 日志 |
| 1.3 |
数据库全部 Schema |
10 张表 DDL + 索引 |
| 1.4 |
种子数据脚本 |
基金、标的、持仓、调仓、净值全量种子 |
| 1.5 |
前端 Vite 搭建 |
React 19 + Router + Tailwind + Zustand |
| 1.6 |
API 客户端封装 |
Axios 实例 + 拦截器 |
Phase 2: 用户认证(1.5 天)
| # |
任务 |
说明 |
| 2.1 |
注册/登录/刷新 API |
JWT + bcrypt |
| 2.2 |
邮箱验证流程 |
令牌生成 + 验证端点 |
| 2.3 |
密码重置流程 |
Forgot/Reset + 过期机制 |
| 2.4 |
前端认证页面 |
登录、注册、验证、重置 |
| 2.5 |
Auth Guard |
路由保护 + 角色鉴权 |
Phase 3: 基金产品(1.5 天)
| # |
任务 |
说明 |
| 3.1 |
基金 CRUD API |
列表(分页+搜索+筛选)、详情、管理 |
| 3.2 |
净值 API |
历史数据查询 |
| 3.3 |
基金列表页 |
卡片网格 + 筛选栏 |
| 3.4 |
基金详情页 |
净值曲线 + Tab 导航 |
Phase 4: 基金持仓明细(2 天)
| # |
任务 |
说明 |
| 4.1 |
持仓 API |
全量查询、按权重/类型排序、汇总统计 |
| 4.2 |
行业分布 API |
行业占比、行业市值 |
| 4.3 |
管理端持仓管理 |
添加/编辑/删除持仓 |
| 4.4 |
持仓明细页 |
全量持仓表格(列:标的代码、名称、类型、份额、市值、权重、变动方向、占比) |
| 4.5 |
行业分布图 |
玫瑰图/饼图 + 行业列表 |
| 4.6 |
持仓汇总卡片 |
总标的数、总市值、前 3 大权重和、集中度指标 |
| 4.7 |
持仓排序与筛选 |
按类型/权重/市值排序,按资产类型筛选 |
Phase 5: 调仓记录跟踪(1.5 天)
| # |
任务 |
说明 |
| 5.1 |
调仓记录 API |
调仓列表、单次详情、变动明细 |
| 5.2 |
调仓对比 API |
两次调仓的标的变动对比 |
| 5.3 |
管理端创建调仓 |
录入调仓记录(含批量变更明细) |
| 5.4 |
调仓时间线页 |
按时间轴展示所有调仓事件 |
| 5.5 |
调仓详情页 |
单次调仓的标的变动列表(增/减/新进/退出) |
| 5.6 |
调仓对比视图 |
前后权重对比(条形图 + 表格) |
| 5.7 |
持仓变化跟踪 |
单个标的在多次调仓中的权重变化曲线 |
Phase 6: 底层标的跟踪(2 天)
| # |
任务 |
说明 |
| 6.1 |
标的 CRUD API |
列表、详情、价格历史 |
| 6.2 |
跨基金查询 API |
持有某标的的所有基金、被持有排行 |
| 6.3 |
对比 & 相关性 API |
多标对比、相关性矩阵计算 |
| 6.4 |
标的总览页 |
卡片网格 + 搜索 + 热门排行 |
| 6.5 |
标的研究页 |
价格走势 + 财务指标 + 持有基金列表 |
| 6.6 |
标的对比工具 |
并排对比多个标的 |
| 6.7 |
相关性矩阵 |
热力图可视化 |
Phase 7: 用户投资组合与交易(1.5 天)
| # |
任务 |
说明 |
| 7.1 |
投资组合 CRUD API |
增删改查 |
| 7.2 |
持仓管理 API |
持仓查询、权重计算 |
| 7.3 |
交易 API |
申购/赎回、记录查询 |
| 7.4 |
前端组合管理 |
组合列表、详情、申购/赎回 |
Phase 8: 仪表盘(1 天)
| # |
任务 |
说明 |
| 8.1 |
仪表盘 API |
汇总数据、收益曲线、分布 |
| 8.2 |
仪表盘页面 |
卡片 + 图表 + 最近交易 |
Phase 9: AI 智能分析(1.5 天)
| # |
任务 |
说明 |
| 9.1 |
Mock AI 引擎 |
评分、风险、持仓诊断、标的研究、调仓建议 |
| 9.2 |
AI 分析 API |
全部分析端点 |
| 9.3 |
AI 分析页面 |
评分、诊断、趋势、模拟 |
| 9.4 |
持仓 AI 诊断 |
持仓合理性、风险提示、集中度预警 |
| 9.5 |
标的 AI 洞察 |
研究报告生成 |
| 9.6 |
调仓建议面板 |
AI 辅助调仓建议 |
Phase 10: 通知 & 管理(1 天)
| # |
任务 |
说明 |
| 10.1 |
通知 API + 前端 |
列表、已读、铃铛 |
| 10.2 |
管理 API + 前端 |
用户管理、日志 |
Phase 11: 打磨优化(1 天)
| # |
任务 |
说明 |
| 11.1 |
响应式适配 |
移动端持仓表格优化 |
| 11.2 |
错误/加载/空状态 |
全面覆盖 |
| 11.3 |
设计质量检查 |
对照设计质量标准验收 |
九、种子数据规划
| 数据 |
数量 |
说明 |
| 用户 |
2 |
admin + user |
| 基金产品 |
8-10 只 |
覆盖 equity/bond/hybrid/index 类型 |
| 底层标的 |
25-35 个 |
股票(A股知名标的)+ 债券 + 其他 |
| 基金持仓 |
每只 6-15 个 |
全量持仓,含不同资产类型 |
| 调仓记录 |
每只基金 2-3 次 |
含不同时间段,展示调仓变化 |
| 调仓明细 |
每次 2-6 条变动 |
增/减/新进/退出混合 |
| 行业分布 |
每只 4-6 个行业 |
覆盖主要行业分类 |
| 净值历史 |
每只 ~250 条 |
近 1 年日净值 |
| 价格历史 |
每标的 ~250 条 |
近 1 年日价格 |
| 用户组合 |
2-3 个 |
不同风格 |
| 交易记录 |
15-20 条 |
含买入/卖出 |
| 通知 |
10+ 条 |
各类型混合 |
十、技术选型
| 层面 |
技术 |
| 前端框架 |
React 19 + Vite |
| 路由 |
React Router v7 |
| 状态管理 |
Zustand |
| UI 样式 |
TailwindCSS 4 |
| 图表 |
Recharts |
| HTTP 客户端 |
Axios |
| 后端框架 |
Express |
| 数据库 |
better-sqlite3 |
| 认证 |
jsonwebtoken + bcryptjs |
| 校验 |
zod |
| 唯一 ID |
uuid |
十一、设计方向建议
建议选择 Dark Luxury(深色轻奢) 或 数据仪表盘风格,理由:
- 基金管理系统以数据展示为核心(持仓表格、图表、矩阵)
- 深色背景上展示亮色图表数据,视觉层次清晰
- 持仓变动用红/绿色彩语义明确(涨/跌、增/减)
- 相关性矩阵等数据可视化在深色背景下质感更好
十二、风险和缓解
| 风险 |
缓解 |
| 持仓数据种子关联复杂 |
用脚本批量生成,确保 fund_id ↔ asset_id 关系合理 |
| 调仓历史计算量大 |
使用快照模式,每次调仓记录完整明细 |
| SQLite 并发写入 |
单进程写入,后续可迁移 PostgreSQL |
| 移动端持仓表格 |
响应式 + 卡片模式切换 |
| Mock AI 数据合理 |
基于权重和类型生成合理评分 |
十三、验收标准
- [x] 计划文档完成
- [ ] Phase 1: 项目骨架搭建完成,前后端可运行
- [ ] Phase 2: 完整认证流程
- [ ] Phase 3: 基金产品 CRUD + 净值展示
- [ ] Phase 4: 基金全量持仓明细 — 实时持仓表、行业分布、汇总统计
- [ ] Phase 5: 调仓记录跟踪 — 时间线、变动明细、对比视图
- [ ] Phase 6: 底层标的跟踪 — 标的研究、跨基金查询、对比、相关性
- [ ] Phase 7: 用户投资组合 + 交易
- [ ] Phase 8: 仪表盘
- [ ] Phase 9: AI 智能分析
- [ ] Phase 10: 通知 + 系统管理
- [ ] Phase 11: 打磨优化
- [ ] 10 大模块完整可演示
- [ ] 符合设计质量标准