Files
one-pipe-system/openspec/changes/add-notification-center/specs/notification-center/spec.md
luo d1ff4d5f6c
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m7s
feat: 顶部通知铃铛与站内通知中心
2026-07-24 17:12:29 +08:00

3.6 KiB

ADDED Requirements

Requirement: Global Notification Bell

The admin frontend SHALL provide a global notification bell in the top navigation near the settings and user avatar entries.

Scenario: Display unread count

  • GIVEN 用户已登录后台
  • WHEN 顶部导航加载未读通知数量
  • THEN 铃铛 MUST call GET /api/admin/notifications/unread-count
  • AND 数量 MUST display as 0, 1 through 99, or 99+

Scenario: Open recent notification drawer

  • WHEN 用户点击顶部通知铃铛
  • THEN 页面 MUST display the latest 10 notifications from the unread summary contract
  • AND 抽屉 MUST provide 全部、审批、临期、同步/系统分类
  • AND 抽屉 MUST provide an entry to /notifications

Requirement: Notification Center Filtering

The admin frontend SHALL provide a /notifications notification center with server-backed filtering.

Scenario: Filter notifications

  • WHEN 用户打开通知中心或调整筛选条件
  • THEN 页面 MUST support category, notification type, severity and read-state filters
  • AND 页面 MUST load results from GET /api/admin/notifications
  • AND 页面 MUST display notification title, content, category, severity, read state and created time

Scenario: Mark all notifications read

  • WHEN 用户点击全部已读
  • THEN 页面 MUST call PUT /api/admin/notifications/read-all
  • AND 页面 MUST refresh the unread count and visible notification read states after success

Requirement: Notification Read State Synchronization

The notification drawer and notification center SHALL keep read state and unread count synchronized with the backend.

Scenario: Mark a notification read

  • WHEN 用户点击一条未读通知
  • THEN 页面 MUST call PUT /api/admin/notifications/{id}/read before navigation
  • AND 页面 MUST refresh or update the shared unread count after the read request succeeds

Scenario: Preserve read state after refresh

  • GIVEN 用户已完成单条已读或全部已读操作
  • WHEN 用户关闭抽屉、切换页面或刷新通知中心
  • THEN 页面 MUST use the latest backend response rather than restoring stale local unread state

Requirement: Controlled Notification Navigation

The admin frontend SHALL navigate from notifications only through controlled internal targets.

Scenario: Navigate to a valid notification target

  • GIVEN 通知包含受支持的 ref_type 或业务引用
  • WHEN 单条已读成功后页面请求 GET /api/admin/notifications/{id}/target
  • THEN 页面 MUST navigate only to a target recognized by the frontend route table
  • AND 页面 MUST preserve the target route parameters returned by the backend

Scenario: Handle an unknown target safely

  • GIVEN 通知的 ref_type 未知、目标已删除或目标无权限
  • WHEN 页面处理通知点击
  • THEN 页面 MUST not navigate to an arbitrary URL
  • AND 页面 MUST still display the notification content and a stable unavailable-target state

Requirement: Consistent Notification Categories

The notification drawer and notification center SHALL present balance warnings, expiry reminders, approval results and system alerts through the same notification data contract.

Scenario: Display supported notification types

  • GIVEN 后端返回余额预警、临期提醒、审批结果或系统告警
  • WHEN 用户查看抽屉或通知中心
  • THEN 页面 MUST display each item using its backend category, type and severity
  • AND 页面 MUST not replace the item with hardcoded mock notification content