🔔 通知管理
查看所有用户通知、标记已读、批量删除、导出CSV。
页面结构
- 顶部按钮:批量删除 / 全部已读(显示未读数)/ 清空全部 / 导出CSV
- 统计卡片:通知总数 / 未读数 / 已读数
- 搜索栏:按标题/内容/用户昵称搜索(400ms防抖,本地过滤)
- 通知表格:复选框 / 用户 / 标题 / 类型 / 状态 / 时间 / 操作
- 分页器:总页数 + 上一页/下一页
- 详情 Modal:点击标题行触发
触发时机详解
1. 页面加载 → GET /api/admin/notifications
触发条件:进入通知管理页面 / 切换分页
GET
/api/admin/notifications?page=1&limit=20
✅ 页面加载时触发;切换分页时触发(?page=N)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | number | 选填 | 页码(默认1) |
limit | number | 选填 | 每页条数(默认20) |
响应:
{
"notifications": [{
"id": "string",
"user_id": "string",
"user_nickname": "string",
"type": "string",
"title": "string",
"content": "string",
"is_read": 0|1,
"created_at": "ISO8601"
}],
"totalPages": 3,
"currentPage": 1
}
2. 点击「全部已读」→ PUT /api/admin/notifications/mark-all-read
触发条件:点击全部已读按钮 → confirm() 确认提示 → 发送请求 → 刷新列表
PUT
/api/admin/notifications/mark-all-read
✅ confirm 确认后触发
响应: {"success": true}
3. 点击「清空全部」→ DELETE /api/admin/notifications/clear-all
触发条件:点击清空全部按钮 → confirm() 确认 → 发送请求 → 本地清空列表
DELETE
/api/admin/notifications/clear-all
✅ confirm 确认后触发
响应: {"success": true}
4. 点击「删除选中」→ 批量 DELETE /api/admin/notifications/:id
触发条件:勾选多条通知 → 点击"删除选中(N)" → confirm() 确认 → Promise.all 并发删除
DELETE
/api/admin/notifications/:id
✅ 批量并发删除,每条一个 DELETE 请求
响应: {"success": true}
5. 点击单条「标记已读」→ PUT /api/admin/notifications/:id/read
触发条件:点击未读通知行的"✓"按钮 → 发送请求 → 刷新列表
PUT
/api/admin/notifications/:id/read
✅ 点击标记已读按钮直接触发
响应: {"success": true}
6. 点击单条「删除」→ DELETE /api/admin/notifications/:id
触发条件:点击单条通知行的"🗑"删除按钮 → 直接删除(无确认)→ 刷新列表
DELETE
/api/admin/notifications/:id
✅ 点击删除按钮直接触发(无二次确认)
响应: {"success": true}
7. 点击通知「标题」→ 本地展示详情 Modal
触发条件:点击通知行的标题文本 → 本地 setSelectedNotification → 渲染详情 Modal(无额外请求)
8. 详情 Modal 内「标记已读」
触发条件:详情 Modal 中点击"标记已读"按钮 → PUT /api/admin/notifications/:id/read → 同时更新本地 Modal 状态
9. 导出 CSV → 本地生成(无需后端)
触发条件:点击导出CSV按钮 → 纯前端 JS 根据当前筛选数据生成 CSV 下载