## ADDED Requirements

### Requirement: Device Active Package Query Contract

The device management list integration SHALL support filtering records by whether the device currently has an active package via the query parameter `has_active_package`.

#### Scenario: Query devices with active package

- **GIVEN** 用户正在后台设备管理页查询列表
- **WHEN** 用户在 `是否有生效中的套餐` 中选择“是”并执行搜索
- **THEN** 系统 MUST 调用 `GET /api/admin/devices`
- **AND** 请求 MUST 提交 `has_active_package=true`

#### Scenario: Query devices without active package

- **GIVEN** 用户正在后台设备管理页查询列表
- **WHEN** 用户在 `是否有生效中的套餐` 中选择“否”并执行搜索
- **THEN** 系统 MUST 调用 `GET /api/admin/devices`
- **AND** 请求 MUST 提交 `has_active_package=false`
- **AND** 前端 MUST NOT 因为该值为 `false` 而省略此参数

#### Scenario: Omit active package filter when not selected

- **GIVEN** 用户未选择 `是否有生效中的套餐`
- **WHEN** 用户执行设备列表搜索、刷新或翻页
- **THEN** 列表请求 MUST NOT 携带 `has_active_package`

### Requirement: Device Active Package Search Filter

The device management page SHALL provide a search filter labeled `是否有生效中的套餐` and keep its selected state consistent across list interactions.

#### Scenario: Show yes and no options for active package filter

- **GIVEN** 用户打开后台设备管理页
- **WHEN** 页面渲染搜索栏
- **THEN** 页面 MUST 显示 `是否有生效中的套餐` 筛选项
- **AND** 该筛选项 MUST 提供“是”和“否”两个可选值

#### Scenario: Reset clears active package filter

- **GIVEN** 用户已经在 `是否有生效中的套餐` 中选择了“是”或“否”
- **WHEN** 用户重置搜索条件
- **THEN** 页面 MUST 清空该筛选项
- **AND** 后续列表请求 MUST NOT 再携带 `has_active_package`
