## Why

`/api/admin/iot-cards/standalone` 当前使用硬编码 `WHERE is_standalone = true` 过滤，导致已绑定设备的 IoT 卡完全不可见。运营人员无法在卡管列表中看到这些卡，也无法通过列表查询某张卡目前归属于哪台设备，造成管理盲区。

## What Changes

- **移除硬编码 `is_standalone = true` 过滤**：`is_standalone` 改为可选查询参数，不传时返回全部卡（含绑定设备的卡）
- **移除 `virtual_no` 列表过滤参数**：不再支持按卡虚拟号模糊搜索
- **新增 `device_virtual_no` 冗余快照字段**：在 `tb_iot_card` 表新增 `device_virtual_no` 列，记录当前绑定设备的虚拟号（无绑定时为空字符串）
- **响应新增 `device_virtual_no` 字段**：列表和详情接口均返回对应的设备虚拟号
- **写入时机快照**：BindCard / UnbindCard / 设备导入（device_import）时同步写入或清空该字段

## Capabilities

### New Capabilities

- `iot-card-device-snapshot`：IoT 卡列表展示绑定设备虚拟号的能力——包括 `device_virtual_no` 快照字段的数据库维护、列表/详情响应扩展、以及 `is_standalone` 可选过滤。

### Modified Capabilities

（无现有 spec 级别的行为变更，仅实现层调整）

## Impact

**数据库**
- `tb_iot_card` 新增列 `device_virtual_no VARCHAR(100) NOT NULL DEFAULT ''`
- 迁移时回填现有绑定数据

**API**
- `GET /api/admin/iot-cards/standalone`
  - 查询参数：移除 `virtual_no`，新增 `is_standalone`（可选布尔）
  - 响应：新增 `device_virtual_no` 字段
- `GET /api/admin/iot-cards/standalone/:iccid`（详情）
  - 响应：新增 `device_virtual_no` 字段

**代码**
- `internal/model/iot_card.go`：新增字段
- `internal/model/dto/iot_card_dto.go`：修改 Request / Response DTO
- `internal/store/postgres/iot_card_store.go`：移除硬编码过滤，支持可选 `is_standalone` 条件
- `internal/service/iot_card/service.go`：传递新过滤参数，填充响应字段
- `internal/service/device/binding.go`：BindCard / UnbindCard 时更新卡字段
- `internal/task/device_import.go`：导入时批量写入 `device_virtual_no`
