## ADDED Requirements

### Requirement: Agent IoT Card List SHALL Surface Device Binding Status

The agent-side IoT card list SHALL derive a device-binding status from the `device_virtual_no` field returned by `GET /api/admin/iot-cards/standalone` and show that status in each IoT card list item.

#### Scenario: Card is not bound to a device

- **WHEN** an IoT card item has `device_virtual_no` equal to `null`, `undefined`, an empty string, or a whitespace-only string
- **THEN** the list item SHALL show a status tag with `未绑定设备`
- **AND** the UI SHALL NOT display a fabricated device identifier
- **AND** the UI SHALL NOT prepend an extra `设备绑定` label before the tag

#### Scenario: Card is bound to a device

- **WHEN** an IoT card item has a non-empty `device_virtual_no`
- **THEN** the list item SHALL show a status tag with `已绑定设备`
- **AND** the UI MAY keep the raw `device_virtual_no` hidden

### Requirement: Agent Asset Lists SHALL Support Cascaded Shop Filtering

The agent-side asset lists SHALL provide a cascaded shop filter that is backed by `GET /api/admin/shops/cascade` and applies the selected shop ID to the active list request.

#### Scenario: User chooses a shop node under the IoT card tab

- **WHEN** the user opens the shop filter under the `IoT卡` tab and confirms a shop node
- **THEN** the selected node `id` SHALL be sent as `shop_id` in the subsequent IoT card list request
- **AND** the list SHALL refresh using that shop filter

#### Scenario: User chooses a shop node under the device tab

- **WHEN** the user opens the shop filter under the `设备` tab and confirms a shop node
- **THEN** the selected node `id` SHALL be sent as `shop_id` in the subsequent device list request
- **AND** the device list SHALL refresh using that shop filter
- **AND** the device list request SHALL keep its existing search semantics and append `shop_id` in addition to them

#### Scenario: Selected shop has children

- **WHEN** a shop node returned from `GET /api/admin/shops/cascade` has `has_children = true`
- **THEN** the UI SHALL allow the user to continue drilling down to child shops
- **AND** the UI SHALL use `parent_id` to load the next level

#### Scenario: User clears the shop filter

- **WHEN** the user clears the shop filter
- **THEN** subsequent IoT card list requests SHALL omit `shop_id`
- **AND** subsequent device list requests SHALL omit `shop_id`

#### Scenario: Device tab is active

- **WHEN** the active asset tab is `设备`
- **THEN** the shop filter SHALL still be shown
- **AND** device list requests SHALL support `shop_id`

### Requirement: Agent Asset Search Input SHALL Be Fixed By Active Tab

The agent asset list SHALL remove the manual search-type selector and bind search semantics directly to the active tab.

#### Scenario: IoT card tab search

- **WHEN** the active tab is `IoT卡`
- **THEN** the search field SHALL target `iccid`
- **AND** the search placeholder SHALL be `搜索ICCID`
- **AND** the UI SHALL NOT show a search-type switcher

#### Scenario: Device tab search

- **WHEN** the active tab is `设备`
- **THEN** the search field SHALL target `virtual_no`
- **AND** the user-facing search label SHALL be `设备号`
- **AND** the search placeholder SHALL be `搜索设备号`
- **AND** the UI SHALL NOT show a search-type switcher

### Requirement: Agent Asset List Controls SHALL Stay Fixed At The Top

The agent-side asset list page SHALL keep the search input and the filter/tab control area fixed at the top of the page while the list content scrolls independently underneath.

#### Scenario: User scrolls a long IoT card list

- **WHEN** the active tab is `IoT卡` and the user scrolls the list
- **THEN** the search input SHALL remain visible at the top
- **AND** the filter and tab controls directly below it SHALL remain visible at the top
- **AND** only the list content area SHALL scroll

#### Scenario: User scrolls a long device list

- **WHEN** the active tab is `设备` and the user scrolls the list
- **THEN** the search input SHALL remain visible at the top
- **AND** the filter and tab controls directly below it SHALL remain visible at the top
- **AND** only the list content area SHALL scroll

#### Scenario: Fixed controls do not cover list content

- **WHEN** the fixed top control area is rendered
- **THEN** the list content SHALL start below that area
- **AND** the first list item SHALL remain fully visible and operable

### Requirement: Agent Asset Lists SHALL Use Explicit Load-More Pagination

The agent-side IoT card list and device list SHALL stop automatic pagination triggered by scrolling to the bottom and SHALL use an explicit footer button to load the next page.

#### Scenario: IoT card tab still has more pages

- **WHEN** the active tab is `IoT卡` and the current IoT card result set has more pages available
- **THEN** the footer SHALL show a button labeled `加载更多`
- **AND** the next page SHALL NOT be requested until the user clicks that button

#### Scenario: Device tab still has more pages

- **WHEN** the active tab is `设备` and the current device result set has more pages available
- **THEN** the footer SHALL show a button labeled `加载更多`
- **AND** the next page SHALL NOT be requested until the user clicks that button

#### Scenario: User clicks the load-more button

- **WHEN** the user clicks the `加载更多` button for the active tab
- **THEN** the UI SHALL request the next page for that tab using the existing active filters and search parameters
- **AND** the returned items SHALL append to the existing list instead of replacing it

#### Scenario: No more pages remain

- **WHEN** the active list has no more pages available
- **THEN** the `加载更多` button SHALL NOT be shown
