5.1 KiB
ADDED Requirements
Requirement: Expiry reminders SHALL use the optional asset-info response
H5 SHALL 仅以 GET /api/c/v1/asset/info 返回的可选 expiry_reminder 作为本次临期主动提醒来源,在首页展示居中、可关闭的临期弹窗,而不是内联横幅。剩余天数、到期时间及配色 SHALL 使用 remaining_days、expires_at、level;SHALL NOT 展示 level_name 等级标签,也 SHALL NOT 用旧未读临期通知或客户端计算补发提醒。
Scenario: Asset info includes a reminder
- WHEN 当前资产响应含有效 expiry_reminder
- THEN H5 SHALL 展示该资产临期弹窗及后端提供的提醒信息
Scenario: Asset info omits the optional field
- WHEN 响应无 expiry_reminder,且当前进入没有已接收的待展示提醒
- THEN H5 SHALL 不显示临期弹窗,也不从 is_expiring 或通知列表补发
Requirement: Reminder presentation SHALL preserve server calendar and levels
H5 SHALL 正确显示 0~15 天,按后端 red(0~3)、purple(4~7)、pink(8~15)设置视觉等级,并提供文字信息。到期时间 SHALL 按 Asia/Shanghai 展示,SHALL NOT 按客户端日期重新判定等级或剩余自然日。
Scenario: Zero remaining days
- WHEN 后端返回 remaining_days=0、level=red
- THEN H5 SHALL 正常展示 0 天及红色等级,不能把 0 当作缺失
Scenario: Client timezone differs from Shanghai
- WHEN 用户设备的本地时区不是 Asia/Shanghai
- THEN H5 SHALL 保留后端天数和等级,到期时间使用上海时区呈现
Requirement: One-time reminder delivery SHALL survive competing asset-info consumers
H5 SHALL 在 asset/info 的共享成功返回入口接收一次性提醒,按当前客户上下文及资产隔离并暂存至对应资产可见。后端负责每日一次,前端 SHALL 防止同次接收被重复展示,SHALL NOT 因并发空字段响应覆盖已接收提醒、使用额外轮询或在关闭后复播。
Scenario: Child component receives the only reminder response
- WHEN TrafficCard 等调用方先获得 expiry_reminder,首页后续响应未返回该字段
- THEN H5 SHALL 通过共享接收状态在当前资产信息区展示该提醒,不将其丢弃
Scenario: Same asset is re-entered after dismissal
- WHEN 用户关闭提醒后再次进入同一资产,后端不再返回字段
- THEN H5 SHALL 不重播先前已展示提醒
Scenario: User switches customer or asset
- WHEN 用户退出、切换客户或进入另一资产
- THEN H5 SHALL 不显示旧上下文提醒;其他资产有新提醒时 SHALL 独立处理
Requirement: Expiry notifications SHALL remain in the notification center without driving popups
H5 SHALL 从首页旧未读通知弹窗来源排除临期项,同时保留通知中心临期列表、未读数和既有阅读操作。临期弹窗展示或关闭 SHALL NOT 自动标记通知已读,其他通知及候选弹窗链路 SHALL 保持不变。
Scenario: Unread expiry notification exists without a new reminder
- WHEN 通知列表返回未读临期项,但 asset/info 无本次提醒
- THEN H5 SHALL 不以该项触发旧首页临期弹窗
- AND 通知中心 SHALL 仍可展示和阅读该项
Scenario: User closes an expiry popup
- WHEN 用户关闭临期弹窗
- THEN H5 SHALL 不猜测 notification_id、不发送自动单条已读或全部已读请求
Requirement: Home popups SHALL display sequentially without overlapping
H5 SHALL 在风险换货/运营候选结束后展示待处理临期提醒,再继续既有普通通知流程,一次只显示一个弹窗。提醒 SHALL 仅在实际显示时标记本次已展示;导航或其他弹窗占用时 SHALL 保持待展示状态。
Scenario: Candidate and expiry reminder are both present
- WHEN 候选弹窗尚未结束且已收到 expiry_reminder
- THEN H5 SHALL 先展示候选,关闭后再展示临期提醒,不能叠加两个弹窗
Scenario: Notification is already open when reminder arrives
- WHEN 普通通知弹窗正在显示,随后收到 expiry_reminder
- THEN H5 SHALL 暂存临期提醒,等通知关闭后再展示
Requirement: Expiry popup renewal SHALL reuse the homepage renewal flow
H5 SHALL 在临期弹窗提供“立即续费”,点击后先关闭提醒,再调用首页已有续费入口,使用当前套餐 ID、名称及价格。续费窗口准备/展示期间 SHALL 暂停其他通知弹窗,窗口关闭后再恢复;SHALL NOT 在提醒中另建下单或支付实现。
Scenario: User taps renew in an expiry popup
- WHEN 当前资产有可续费套餐,用户点击临期弹窗“立即续费”
- THEN 临期弹窗 SHALL 关闭,首页原有续费窗口 SHALL 打开
- AND 其他排队通知 SHALL 不与续费窗口重叠
Scenario: Current asset has no renewable package
- WHEN 用户点击“立即续费”,但当前套餐 ID 或名称无效
- THEN H5 SHALL 使用首页原有“当前资产暂无可续费套餐”提示,不创建订单