🔔 通知管理

查看所有用户通知、标记已读、批量删除、导出CSV。

页面结构

  • 顶部按钮:批量删除 / 全部已读(显示未读数)/ 清空全部 / 导出CSV
  • 统计卡片:通知总数 / 未读数 / 已读数
  • 搜索栏:按标题/内容/用户昵称搜索(400ms防抖,本地过滤)
  • 通知表格:复选框 / 用户 / 标题 / 类型 / 状态 / 时间 / 操作
  • 分页器:总页数 + 上一页/下一页
  • 详情 Modal:点击标题行触发

触发时机详解

1. 页面加载 → GET /api/admin/notifications

触发条件:进入通知管理页面 / 切换分页
GET /api/admin/notifications?page=1&limit=20
✅ 页面加载时触发;切换分页时触发(?page=N)
参数类型必填说明
pagenumber选填页码(默认1)
limitnumber选填每页条数(默认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 下载