# Implementation Tasks

## 1. 类型定义和API服务 (Foundation)

- [ ] 1.1 创建 `src/types/api/device.ts` 定义所有设备相关类型
  - DeviceItem, DeviceQueryParams, DevicePageResult
  - DeviceCardBinding, DeviceCardBindingList
  - AllocateDevicesRequest/Response, RecallDevicesRequest/Response
  - BindCardRequest/Response, UnbindCardResponse
  - ImportDeviceRequest/Response, DeviceImportTask相关类型
- [ ] 1.2 创建 `src/api/modules/device.ts` 实现 DeviceService
  - getDevices (列表)
  - getDeviceById (详情)
  - deleteDevice (删除)
  - getDeviceCards (绑定的卡列表)
  - bindCard (绑定卡)
  - unbindCard (解绑卡)
  - allocateDevices (批量分配)
  - recallDevices (批量回收)
  - importDevices (批量导入)
  - getImportTasks (导入任务列表)
  - getImportTaskDetail (导入任务详情)
- [ ] 1.3 在 `src/api/modules/index.ts` 导出 DeviceService
- [ ] 1.4 在 `src/types/api/index.ts` 导出 Device 相关类型

## 2. 设备列表页面 (Core UI)

- [ ] 2.1 创建 `src/views/asset-management/device-list/index.vue`
  - 搜索栏：设备号、设备名称、状态、店铺、批次号、设备类型、制造商、创建时间范围
  - 表格：展示设备信息，支持勾选、列筛选
  - 表格列：ID、设备号、设备名称、设备型号、设备类型、制造商、最大插槽数、已绑定卡数、状态、店铺、批次号、激活时间、创建时间
  - 状态使用 CommonStatus + ElSwitch 显示
  - 操作列：查看详情、删除按钮（使用 ArtButtonTable）
- [ ] 2.2 实现批量操作按钮
  - 批量分配：弹出对话框选择目标店铺
  - 批量回收：弹出对话框确认回收
  - 导入设备：跳转到设备导入页面
- [ ] 2.3 实现批量分配对话框
  - 选择目标店铺（下拉搜索）
  - 显示已选设备数量
  - 备注输入
  - 展示分配结果（成功/失败）
- [ ] 2.4 实现批量回收对话框
  - 确认回收设备列表
  - 备注输入
  - 展示回收结果（成功/失败）

## 3. 设备详情页面 (Detail View)

- [ ] 3.1 创建 `src/views/asset-management/device-detail/index.vue`
  - 设备基本信息卡片（ElDescriptions）
  - 绑定的卡列表表格（展示4个插槽位置）
  - 返回按钮
- [ ] 3.2 实现卡绑定管理
  - 绑定卡按钮：弹出对话框选择卡和插槽位置
  - 解绑按钮：每个绑定记录旁边
  - 显示插槽位置（1-4）
  - 展示卡的基本信息（ICCID、手机号、运营商、状态）

## 4. 任务管理改进 (Task Management)

- [ ] 4.1 修改 `src/views/asset-management/task-management/index.vue`
  - 添加任务类型筛选：ICCID导入 / 设备导入
  - 支持展示设备导入任务
  - 任务列表显示任务类型标签
- [ ] 4.2 修改 `src/views/asset-management/task-detail/index.vue`
  - 根据任务类型展示不同的详情内容
  - 设备导入任务：显示设备号、绑定的ICCID、失败原因
  - 失败和跳过记录展示

## 5. 设备导入改进 (Import Enhancement)

- [ ] 5.1 修改 `src/views/batch/device-import/index.vue`
  - 改用对象存储三步上传流程
    1. 获取上传URL (StorageService.getUploadUrl)
    2. 上传文件到对象存储 (StorageService.uploadFile)
    3. 调用导入接口 (DeviceService.importDevices)
  - CSV格式说明：device_no, device_name, device_model, device_type, max_sim_slots, manufacturer, iccid_1~iccid_4, batch_no
  - 导入成功后显示任务编号，引导去任务管理查看
- [ ] 5.2 优化导入记录展示
  - 移除mock数据，改为真实API调用
  - 点击"查看详情"跳转到任务详情页

## 6. 路由和导航 (Routing)

- [ ] 6.1 在 `src/router/routes/asyncRoutes.ts` 添加路由
  - /asset-management/device-list (设备列表)
  - /asset-management/device-detail (设备详情，带query参数id)
- [ ] 6.2 在 `src/router/routesAlias.ts` 添加路由别名
  - DeviceList = '/asset-management/device-list'
  - DeviceDetail = '/asset-management/device-detail'
- [ ] 6.3 在 `src/locales/langs/zh.json` 添加翻译
  - assetManagement.deviceList: "设备列表"
  - assetManagement.deviceDetail: "设备详情"

## 7. 测试和优化 (Testing & Polish)

- [ ] 7.1 功能测试
  - 设备列表的搜索、分页、排序
  - 批量分配和回收流程
  - 设备与卡的绑定/解绑
  - 设备导入完整流程
  - 任务状态查看
- [ ] 7.2 边界情况处理
  - 空列表状态
  - 加载失败提示
  - 删除确认提示
  - 表单验证
- [ ] 7.3 性能优化
  - 列表数据懒加载
  - 防抖搜索
  - 批量操作结果分页展示
- [ ] 7.4 代码审查
  - TypeScript类型完整性
  - 错误处理
  - 代码复用性
  - 注释完整性

## Dependencies

- 1.x 必须先完成才能开始 2.x-6.x
- 2.1-2.2 可以并行开发
- 3.x 依赖 1.x，可与 2.x 并行
- 4.x 和 5.x 依赖 1.x，可与其他任务并行
- 6.x 可在对应页面开发完成后立即进行
- 7.x 在所有功能开发完成后进行
