4.4 KiB
ADDED Requirements
Requirement: Home notification entry
The authenticated home page SHALL expose a notification entry for both supported account types. The entry MUST use src/static/icons/通知.png, display the current unread count when available, and open the notification page. Notification content MUST NOT resolve controlled targets or navigate to business resources.
Scenario: Agent sees notification entry
- GIVEN an authenticated agent is viewing the home page
- WHEN the unread-count request succeeds
- THEN the home page shows the notification icon and the returned unread badge text
- AND activating the entry opens the notification page without resolving a target
Scenario: Enterprise sees notification entry
- GIVEN an authenticated enterprise user is viewing the home page
- WHEN the home page renders its shortcuts
- THEN the notification entry is available with the same icon and behavior
Scenario: Unread-count failure does not block home
- GIVEN the authenticated home page has loaded
- WHEN the unread-count request fails
- THEN the home page remains usable
- AND no fabricated unread count is displayed
Requirement: Notification list display
The notification page SHALL request the current account's non-expired notifications from GET /api/admin/notifications, display them newest first using the server order, and show each notification's title, body, category, severity, and creation time. Notification rows MUST be display-only and MUST NOT invoke GET /api/admin/notifications/{id}/target or navigate to another business page.
Scenario: Latest notifications are displayed
- GIVEN the notification page is opened
- WHEN the notification list request succeeds
- THEN the newest notification is rendered first
- AND each rendered notification shows its text content and read state
Scenario: No notifications
- GIVEN the notification page is opened
- WHEN the server returns an empty item list
- THEN the page shows an empty state
- AND it does not attempt target resolution
Requirement: Post-login unread reminder
After a successful login redirects to the home page, the system SHALL request the newest unread notification and show it in a reminder modal when one exists. The newest unread notification MUST be the default displayed message. The reminder MUST not navigate to a controlled target.
Scenario: Newest unread notification is shown after login
- GIVEN a user has successfully logged in and is redirected to the home page
- AND at least one unread notification exists
- WHEN the home page finishes loading the authenticated session
- THEN a reminder modal displays the newest unread notification's title and body by default
Scenario: No unread notification
- GIVEN a user has successfully logged in and is redirected to the home page
- WHEN the unread notification query returns no items
- THEN no reminder modal is shown
Scenario: Reminder query failure
- GIVEN a user has successfully logged in and is redirected to the home page
- WHEN the newest unread notification query fails
- THEN the home page remains usable
- AND no reminder modal is shown
Requirement: Read on visibility
The system SHALL mark an unread notification as read when its content becomes visible in the reminder modal or notification list. The UI MUST NOT require a manual read button, and it MUST update the local read state after initiating the read request.
Scenario: Reminder marks visible notification read
- GIVEN the newest unread notification is shown in the post-login reminder modal
- WHEN the modal becomes visible
- THEN the client calls
PUT /api/admin/notifications/{id}/readfor that notification - AND the notification is treated as read locally without a manual action
Scenario: List marks visible unread notifications read
- GIVEN the notification page renders one or more unread notifications
- WHEN those notification rows become visible
- THEN the client initiates an idempotent read request for each visible unread notification
- AND no manual read control is rendered
Scenario: Read request is idempotent
- GIVEN a notification has already been marked read
- WHEN the client repeats the read request
- THEN the UI remains in the read state and the repeated request does not create a user-visible error