📊 仪表盘

展示系统核心统计数据:用户/账单/交易/支付计数,月度收支趋势,分类分布,最近活动。

页面结构

  • 统计卡片行:用户总数 / 注册用户 / 账单数 / 交易数 / 支付完成数
  • 收支概览:总收入 / 总支出(2个大数字卡片)
  • 月度趋势图:近12个月收支折线图(Recharts)
  • 分类分布:前10分类交易量饼图
  • 最近活动:最近10条审计日志(每条含操作类型/时间/操作用户)
  • 数据库大小:右下角显示 SQLite 文件大小

触发时机详解

1. 页面加载 → 6个请求并发

触发条件:进入仪表盘页面时,6个请求同时发出,互不依赖

GET /api/admin/dashboard/stats
✅ 页面加载时触发,获取核心计数(用户/注册用户/账单/交易/支付完成数)

响应:

{ "users": 123, "registeredUsers": 118, "bills": 45, "transactions": 890, "payments": 67 }
GET /api/admin/dashboard/tx-stats
✅ 页面加载时触发,获取收支总计

响应:

{ "income": 50000.00, "expense": 32000.00 }
GET /api/admin/dashboard/recent-activity
✅ 页面加载时触发,获取最近10条审计日志

响应:

[{
  "action": "string",   // 操作类型
  "time": "2024-01-01 12:00:00",
  "user_id": "string"
}]
GET /api/admin/dashboard/monthly-stats
✅ 页面加载时触发,获取近12个月每月收支数据(用于折线图)

响应:

[{ "month": "2024-01", "income": 5000.00, "expense": 3200.00 }]
GET /api/admin/dashboard/category-stats
✅ 页面加载时触发,获取交易量前10分类(用于饼图)

响应:

[{ "category": "餐饮", "count": 120 }]
GET /api/admin/dashboard/db-size
✅ 页面加载时触发,获取 SQLite 数据库文件大小

响应:

{ "dbSize": "2.45 MB" }