## 1. Proposal Review

- [x] 1.1 确认导出按钮权限编码：IoT 卡管理使用 `iot_card:export`，设备管理使用 `devices:export`。
- [x] 1.2 确认导出任务管理权限编码：使用 `export_task:list`、`export_task:detail`、`export_task:download`、`export_task:cancel`。
- [x] 1.3 确认导出格式默认 `xlsx`，并允许用户在弹窗中切换 `xlsx` / `csv`。
- [x] 1.4 确认 IoT 卡和设备列表现有筛选参数作为导出任务 `query` 传给后端。

## 2. API And Types

- [x] 2.1 新增导出任务状态、场景、格式、列表项、详情、创建请求、取消响应等 TypeScript 类型。
- [x] 2.2 新增 `ExportTaskService`，实现列表、创建、详情、取消接口。
- [x] 2.3 在 API 和类型入口文件导出新增模块。
- [x] 2.4 对齐统一响应结构 `code`、`msg`、`timestamp`、`data` 和分页结构 `page`、`size`、`total`、`items`。

## 3. Reusable Export Dialog

- [x] 3.1 新增可复用创建导出任务弹窗组件，支持传入 `scene`、当前列表查询条件和默认导出格式。
- [x] 3.2 弹窗中明确展示导出规则说明：导出规则基于列表中的检索条件全量导出。
- [x] 3.3 提交时调用创建导出任务接口，并在成功后提示任务已创建。
- [x] 3.4 确保弹窗确认按钮和触发按钮均受对应权限控制。

## 4. Business Entry Points

- [x] 4.1 在 IoT 卡管理页增加导出按钮，打开弹窗时默认 `scene=iot_card`，并传入当前筛选条件快照。
- [x] 4.2 在设备管理页增加导出按钮，打开弹窗时默认 `scene=device`，并传入当前筛选条件快照。
- [x] 4.3 确保重置筛选、分页切换、重新搜索后导出使用最新检索条件。

## 5. Export Task List Page

- [x] 5.1 在资产管理下新增“导出管理”分组和“导出列表”路由、菜单、路由别名。
- [x] 5.2 导出列表支持分页、场景、状态、创建开始时间、创建结束时间筛选。
- [x] 5.3 表格展示任务编号、场景、状态、进度、格式、行数、分片、错误信息和时间字段；列表不展示文件 key。
- [x] 5.4 任务编号支持点击进入导出任务详情页，行操作支持下载已完成任务、取消待处理/处理中任务。
- [x] 5.5 下载操作必须先调用详情接口获取 `download_url`，且仅在已完成任务可用。
- [x] 5.6 取消操作必须调用取消接口，并在成功后刷新列表。

## 6. Permissions And UX

- [x] 6.1 为所有新增按钮和行操作添加权限编码检查。
- [x] 6.2 无权限时不显示对应入口，不依赖禁用态作为唯一保护。
- [x] 6.3 对创建、详情、下载、取消失败提供稳定错误提示，不破坏列表渲染。

## 7. Verification

- [x] 7.1 验证 IoT 卡管理页可按当前筛选条件创建 `iot_card` 导出任务。
- [x] 7.2 验证设备管理页可按当前筛选条件创建 `device` 导出任务。
- [x] 7.3 验证导出列表分页和筛选参数与接口契约一致，且文件 key 不在列表字段中展示。
- [x] 7.4 验证点击任务编号进入详情页，已完成任务可通过详情接口获取下载地址并下载。
- [x] 7.5 验证待处理/处理中任务可取消，已完成/失败/已取消任务不可取消。
- [x] 7.6 验证所有新增按钮和操作在无权限时不可见。
- [x] 7.7 运行类型检查和相关 lint；新增文件 lint 通过，整仓构建受既有 TypeScript 债务阻塞。
