## 1. API Contract - [x] 1.1 增加 `GET /api/admin/expiring-assets` 的查询参数、分页响应和临期资产项类型。 - [x] 1.2 为卡列表、设备列表、资产信息和首页概览类型补充统一临期字段及临期计数字段。 - [x] 1.3 增加临期资产 API 服务方法,并确认续费入口复用现有管理端服务和权限。 ## 2. Expiring Asset List - [x] 2.1 增加或接入 `/operations/expiring-assets` 管理端路由和页面。 - [x] 2.2 实现资产类型、关键字、店铺、套餐、剩余天数和预计到期时间筛选。 - [x] 2.3 展示资产、店铺、当前套餐、预计最终到期、剩余天数和后端临期等级名称。 - [x] 2.4 实现 0-3 天置顶、其余按预计到期时间升序,并排除已过期和不可预计记录。 - [x] 2.5 按 8-15 天粉红、4-7 天紫色、0-3 天红色实现行或到期字段高亮。 - [x] 2.6 根据 `can_renew` 展示管理端续费入口,并跳转现有续费/充值流程。 ## 3. Existing Admin Pages - [x] 3.1 在网卡普通列表增加临期字段展示和颜色高亮,不改变原排序。 - [x] 3.2 在设备普通列表增加临期字段展示和颜色高亮,不改变原排序。 - [x] 3.3 在资产信息详情复用同一临期展示规则,禁止前端重新计算预计最终到期时间。 - [x] 3.4 在代理首页展示临期卡数量和临期设备数量,并支持跳转临期列表。 ## 4. Notifications - [x] 4.1 在通知中心复用临期分类,展示后端生成的 15 天、7 天、3 天临期提醒。 - [x] 4.2 使用现有通知目标跳转到临期列表或对应管理端资产详情。 - [x] 4.3 确认管理端不展示企微临期消息,不新增 C 端通知入口。 ## 5. Verification - [x] 5.1 验证临期字段直接使用后端值,前端不根据套餐明细推导最终到期时间。 - [x] 5.2 验证 0-3 天置顶、日期升序、颜色映射和普通列表原排序保持不变。 - [x] 5.3 验证 `can_renew=false` 不展示续费入口,且各资产类型使用正确管理端入口。 - [x] 5.4 验证通知中心临期分类、已读状态和跳转行为。 - [x] 5.5 运行类型检查、相关 ESLint/Stylelint、构建和 `openspec validate add-admin-expiring-assets-notifications --strict`。