## ADDED Requirements ### Requirement: Admin Current Package Expiry Base Contract The admin asset information integration SHALL accept and preserve `expiry_base` from `GET /api/admin/assets/:identifier/current-package`. #### Scenario: Accept additive expiry_base from current-package API - **GIVEN** 用户正在查看后台“资产信息”中的“当前生效套餐” - **AND** `GET /api/admin/assets/:identifier/current-package` 返回当前套餐数据 - **WHEN** 响应中包含 `expiry_base` - **THEN** 前端类型契约 MUST 支持 `expiry_base` - **AND** 页面状态 MUST 保留该字段原始值 - **AND** 支持的取值 MUST 包含 `from_activation` 与 `from_purchase` #### Scenario: Missing expiry_base does not break current package parsing - **GIVEN** `GET /api/admin/assets/:identifier/current-package` 返回当前套餐数据 - **AND** 响应中未返回 `expiry_base` 或该字段为空 - **WHEN** 前端解析当前套餐响应 - **THEN** 页面 MUST 继续保留现有套餐字段的解析行为 - **AND** MUST NOT 因缺少 `expiry_base` 导致“当前生效套餐”整体渲染失败 ### Requirement: Admin Current Package Expiry Base Display The admin asset information view SHALL display `expiry_base` as the expiry countdown base in the `当前生效套餐` card and MUST use the backend-provided value instead of inferring from time fields. #### Scenario: Show activation-based expiry text on current package card - **GIVEN** 用户正在查看后台“资产信息”中的“当前生效套餐” - **AND** 当前套餐返回 `expiry_base` 为 `from_activation` - **WHEN** 页面渲染套餐详情表格 - **THEN** 页面 MUST 显示“到期计时基准” - **AND** 该字段的展示文案 MUST 为“实名激活时起算” #### Scenario: Show purchase-based expiry text on current package card - **GIVEN** 用户正在查看后台“资产信息”中的“当前生效套餐” - **AND** 当前套餐返回 `expiry_base` 为 `from_purchase` - **WHEN** 页面渲染套餐详情表格 - **THEN** 页面 MUST 显示“到期计时基准” - **AND** 该字段的展示文案 MUST 为“购买时起算” #### Scenario: Show placeholder when expiry_base is empty or unknown - **GIVEN** 用户正在查看后台“资产信息”中的“当前生效套餐” - **AND** 当前套餐的 `expiry_base` 为空、缺失或不是已知取值 - **WHEN** 页面渲染套餐详情表格 - **THEN** 页面 MUST 在“到期计时基准”位置显示稳定占位内容 - **AND** 页面 MUST NOT 根据 `start_time`、`expire_time` 或其他时间字段自行推断展示文案