# Change: 新增资产预计套餐到期时间展示

## Why

当前页面只能在套餐明细中查看单个套餐的到期时间，运营无法快速了解当前主套餐与全部排队主套餐接续后的资产最终到期时间。前端也不能可靠地自行叠加套餐时长，尤其当套餐需要激活后才开始计时时。

## What Changes

- 在资产详情、IoT 卡列表和设备列表增加统一的 `预计套餐到期时间` 展示。
- 资产详情接口和资产列表响应支持统一的 5 个字段：`estimated_final_expires_at`、`days_until_final_expiry`、`expiry_estimate_status`、`expiry_estimate_status_name` 和 `is_expiring`。
- `expiry_estimate_status` 使用 `exact`、`waiting_activation`、`none`、`invalid_data` 四种状态；非 `exact` 状态下日期和剩余天数字段必须为 `null`。
- 当 `expiry_estimate_status=exact` 时，展示后端返回的 `estimated_final_expires_at`。
- 当套餐尚待激活等无法预计最终日期时，展示“待激活后起算”，不得伪造日期。
- 当 `is_expiring=true` 时，按后端返回的剩余天数使用临期颜色提示；普通资产列表不得因临期状态改变既有排序。
- 当前套餐自身的到期时间继续仅在套餐明细中展示；前端不得叠加套餐时长计算预计最终到期时间。
- 本次仅覆盖后台资产详情、IoT 卡列表和设备列表，不处理 C 端资产信息接口或页面。

## Impact

- Affected specs:
  - `asset-information`
  - `iot-card-management`
  - `device-management`
- Affected code:
  - `src/types/api/asset.ts`
  - `src/types/api/card.ts`
  - `src/types/api/device.ts`
  - `src/views/asset-management/asset-information/types.ts`
  - `src/views/asset-management/asset-information/composables/useAssetInfo.ts`
  - `src/views/asset-management/asset-information/components/BasicInfoCard.vue`
  - `src/views/asset-management/iot-card-management/index.vue`
  - `src/views/asset-management/device-list/index.vue`
- API contracts:
  - `GET /api/admin/assets/resolve/{identifier}`
  - `GET /api/admin/iot-cards/standalone`
  - `GET /api/admin/devices`
- Dependencies:
  - 后端在资产详情与资产列表响应中返回预计最终到期字段。
- Out of scope:
  - `GET /api/c/v1/asset/info` 及 C 端资产信息页面
