feat: add tenant dashboard analytics

This commit is contained in:
Codex
2026-06-29 03:52:09 +08:00
parent 21c0634020
commit 0bca1f00a9
8 changed files with 908 additions and 8 deletions

View File

@@ -51,7 +51,7 @@ F:\project\参考\旧题库项目\src
- 题库练习、答题、错题、收藏。
- 订单、支付、激活码、优惠券、权益。
- 私有 PDF、资料、视频、对象存储签名。
- 租户后台、平台后台、内容导入、CRM、销售/代理。
- 租户后台、平台后台、内容导入、CRM、销售/代理、数据看板
前端应封装一个统一 API client所有页面禁止直接散写 `Taro.request`
@@ -173,6 +173,7 @@ tenant:<tenantId>:theme
| 激活码 | `POST /api/commerce/activation-codes/check``POST /api/commerce/activation-codes/redeem` |
| 个人中心 | `GET/PATCH /api/profile/me``POST /api/profile/check-in``GET /api/profile/score-events``GET /api/profile/exam-countdowns` |
| 销售分享 | `/api/referral/resolve``track-event``bind` |
| 租户数据看板 | `GET /api/tenant-admin/dashboard?timeRange=30d&regionId=...` |
| 租户班级 | `GET/PUT /api/tenant-admin/classes``POST /api/tenant-admin/classes/disable` |
| 班级成员 | `GET/PUT /api/tenant-admin/classes/members``POST /api/tenant-admin/classes/members/remove``POST /api/tenant-admin/classes/members/bulk-assign` |
| 租户学生 | `GET/PUT /api/tenant-admin/students``POST /api/tenant-admin/students/bulk-upsert``POST /api/tenant-admin/students/status` |
@@ -338,6 +339,62 @@ tenant:<tenantId>:theme
响应会包含 `items``currentUser`。即使当前用户未进入前 N 名,也应优先展示 `currentUser` 作为“我的排名”。后台后续会补日/周榜预聚合和防刷策略,前端只消费接口返回口径。
### 租户数据看板
租户后台数据看板由后端统一聚合,前端不要直接读取订单、答题记录、学生列表后自行统计,避免权限越权、敏感信息外泄和各页面口径不一致。
请求:
```http
GET /api/tenant-admin/dashboard?timeRange=30d&regionId=<可选地区ID>&limit=10
```
可选参数:
| 参数 | 可选值 | 说明 |
| --- | --- | --- |
| `timeRange` | `7d``30d``90d` | 统计区间,默认 `30d` |
| `regionId` | UUID | 可选地区筛选,后端会校验地区属于当前租户 |
| `limit` | 1-50 | 题型、科目、地区、套餐和运营动态的返回条数 |
响应主要结构:
```json
{
"item": {
"scope": {
"tenantId": "...",
"regionId": "...",
"timeRange": "30d",
"timezone": "Asia/Shanghai"
},
"cards": {
"students": {},
"learning": {},
"content": {},
"activationCodes": {},
"feedback": {}
},
"paymentStats": {},
"trends": [],
"activeHours": [],
"questionDistribution": [],
"subjectTop": [],
"regionStats": [],
"planSales": [],
"recentActivities": []
}
}
```
前端处理规则:
- 管理台菜单显示可按 `/api/tenant-admin/permissions``dashboard:read` 判断,但真正权限以后端返回为准。
- `trends` 已补齐自然日桶,`activeHours` 固定 24 项,前端不需要补点。
- `revenueCents``amountCents` 都是分,前端统一格式化成人民币展示,不要自行重算订单金额。
- `recentActivities.details` 只包含可展示的低敏汇总信息,不包含手机号、支付密钥、对象存储 key 等敏感字段。
- 大租户正式上线后会补预聚合 worker前端不应依赖任何临时 SQL 口径或自己维护缓存口径。
### 背单词计划与复习上报
背单词页面分三类数据:单元列表、每日计划、单词进度。前端不需要计算下次复习日期,只提交“认识/不认识”,由后端统一更新 `nextReviewDate`、连续正确、掌握状态和每日复习计划。
@@ -829,6 +886,7 @@ ACTIVATION_CODE_REGION_MISMATCH
租户后台可以先做 H5 管理台,也可以后续使用 Taro H5 复用部分组件。优先页面:
- 概览:`/api/tenant-admin/overview`
- 数据看板:`/api/tenant-admin/dashboard`展示收益、注册、学习、内容、激活码、反馈、趋势、24h 活跃、套餐销量和运营动态
- 品牌/主题/域名/公开设置
- 支付账户/登录 provider/密钥引用
- 用户与成员权限