1.8 KiB
1.8 KiB
1. API Layer
- 1.1 Add
popupApi.getCandidate(page, identifier)forGET /api/c/v1/popup-candidates - 1.2 Add
popupApi.submitRiskExchangeAddress(assetId, params)forPOST /api/c/v1/risk-exchanges/{asset_id}/address - 1.3 Include the notification
idin the mark-read request body (R3)
2. PopupCandidate Component
- 2.1 Query the candidate once per mount and emit
emptywhen none exists - 2.2 Render title/body and hide silently on resource-invisible responses
- 2.3 Map
action_typethrough the whitelist and navigate from the mapped page - 2.4 Mark the notification read on dismiss and on action (R3)
- 2.5 Deduplicate by
notification_idwithin a session so same-day repeats do not re-popup - 2.6 Provide the risk-exchange address form, submission, and result view
3. Page Wiring
- 3.1 Wire
homeinpages/index/index.vuewith priority over the legacy unread-notification popup - 3.2 Wire
package_purchaseinpages/package-order/package-order.vue - 3.3 Wire
asset_wallet_rechargeinpages/my-wallet/my-wallet.vue - 3.4 Leave
asset_detailunwired
4. Notification Contract Alignment
- 4.1 Remove client-side priority re-sort and rely on the backend ordering
- 4.2 Align the category label map with
approval/expiry/sync/system - 4.3 Keep the unread badge consistent with popup counting and
99+display - 4.4 Keep
read-allout of the popup display chain
5. Regression Verification
- 5.1 Operation popup with action navigates to the mapped page and marks read
- 5.2 Risk-exchange popup submits the address and shows the exchange number
- 5.3 Repeat entry with the same
notification_iddoes not re-popup - 5.4 Invisible asset shows no popup and no error branch
- 5.5 Notification center renders new
h5.popup.*types without layout breakage