## 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}/read` for 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