Files
luo 15122e225a
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m49s
feat: 预计最终到期时间展示新增具体
2026-07-24 09:31:11 +08:00

3.1 KiB

ADDED Requirements

Requirement: Device Estimated Final Expiry Display

The device management list integration SHALL preserve and display the five backend device-level estimated final package expiry fields estimated_final_expires_at, days_until_final_expiry, expiry_estimate_status, expiry_estimate_status_name, and is_expiring returned in data.items[] by GET /api/admin/devices. The status SHALL be one of exact, waiting_activation, none, or invalid_data; non-exact records SHALL have estimated_final_expires_at=null and days_until_final_expiry=null. The frontend SHALL NOT traverse bound cards or calculate package continuation dates. This requirement applies only to the admin device list.

Scenario: Display exact device final expiry estimate

  • GIVEN 设备列表接口返回 expiry_estimate_status=exact and estimated_final_expires_at
  • WHEN 页面渲染设备列表行
  • THEN 页面 MUST display a column labeled 预计套餐到期时间
  • AND 该列 MUST format and display estimated_final_expires_at

Scenario: Display activation-pending device final expiry

  • GIVEN 设备列表接口返回 expiry_estimate_status=waiting_activation
  • WHEN 页面渲染设备列表行
  • THEN 预计套餐到期时间 MUST display 待激活后起算
  • AND 页面 MUST NOT traverse bound cards or display a fabricated date

Scenario: Display device estimate status names for non-exact states

  • GIVEN 设备列表接口返回 expiry_estimate_status=noneexpiry_estimate_status=invalid_data
  • WHEN 页面渲染设备列表行
  • THEN none MUST display a stable empty placeholder
  • AND invalid_data MUST display 数据异常
  • AND 页面 MUST use the status enum to choose the display rule

Scenario: Preserve null fields for non-exact device estimates

  • GIVEN 设备列表接口返回 expiry_estimate_status=noneexpiry_estimate_status=invalid_data
  • THEN estimated_final_expires_at MUST be null
  • AND days_until_final_expiry MUST be null
  • AND 页面 MUST NOT derive either field from绑定卡或套餐数据

Scenario: Highlight expiring device without reordering

  • GIVEN 设备列表接口返回 is_expiring=true and days_until_final_expiry
  • WHEN 页面渲染该设备的预计套餐到期时间
  • THEN 页面 MUST apply the expiring visual treatment based on the backend fields
  • AND 页面 MUST NOT change the ordinary device list sort order because of is_expiring

Scenario: Display no-package device placeholder

  • GIVEN 设备列表记录没有可预计的最终到期时间
  • WHEN 页面渲染预计套餐到期时间列
  • THEN 页面 MUST display a stable placeholder
  • AND 页面 MUST NOT use an individual package expiry as a substitute

Scenario: Preserve device status name without using it for business calculation

  • WHEN 设备列表接口返回 expiry_estimate_status_name
  • THEN 前端类型 MUST preserve the field
  • AND 页面 MUST NOT calculate or replace the backend status name