# Change: 为后台任务页与操作审计日志补充文件下载入口

## Why

当前后台已经具备对象存储上传能力和下载 URL 获取接口，但与“下载文件”相关的运营入口仍然缺失两块关键能力：

- IoT 卡任务页和设备任务页虽然展示了导入任务记录，但操作列里没有“下载文件”入口，运营无法直接回看任务原始导入文件。
- 资产操作审计日志已经会显示 `文件存储键` / `file_key`，但仍然只是纯文本，无法直接从日志里发起下载。

同时，本次需求明确要求这些下载入口按页面上下文拆分权限，不允许任务页和三个审计日志入口共用同一个按钮权限编码。

如果不补齐这些入口，后台用户仍然需要依赖复制 `file_key`、跳外部系统或人工排查对象存储文件，审计与任务追溯链路会继续断裂。

本提案仅覆盖后台管理端（admin）能力，不包含 C 端页面和 C 端接口消费逻辑。

## What Changes

- 为后台任务管理增加原始导入文件下载入口：
  - 在 IoT 卡任务列表操作列增加“下载文件”
  - 在设备任务列表操作列增加“下载文件”
  - 两个任务页分别使用独立按钮权限编码
- 为后台资产操作审计日志增加基于 `file_key` 的下载入口：
  - 当日志变更内容包含 `文件存储键` / `file_key` 时，在对应值后追加“下载文件”
  - 资产详情页、IoT 卡列表审计日志弹窗、设备列表审计日志弹窗分别使用独立按钮权限编码
  - 共享日志组件需要支持由不同入口传入对应的下载权限上下文
- 明确复用现有下载接口：
  - 所有下载入口统一通过 `POST /api/admin/storage/batch-download-urls` 获取预签名下载 URL
  - 本次不新增新的对象存储下载 API
- 范围约束：
  - 不改造上传流程
  - 不扩展为“文件中心”或批量多文件下载能力
  - 不顺带统一现有全部权限命名历史差异，仅为本次新增入口定义可审查的权限编码

## Impact

- Affected specs:
  - `admin-file-download`
- Affected code:
  - `src/api/modules/storage.ts`
  - `src/views/asset-management/task-management/iot-card-task/index.vue`
  - `src/views/asset-management/task-management/device-task/index.vue`
  - `src/views/asset-management/asset-information/components/OperationLogsCard.vue`
  - `src/components/business/OperationLogsDialog.vue`
  - `src/views/asset-management/asset-information/index.vue`
  - `src/views/asset-management/iot-card-management/index.vue`
  - `src/views/asset-management/device-list/index.vue`
  - `src/types/api/card.ts`
  - `src/types/api/device.ts`
- Dependencies:
  - 依赖现有 `POST /api/admin/storage/batch-download-urls` 可为单个 `file_key` 返回可直接下载的预签名 URL
  - 与活跃变更 `update-admin-asset-device-signal-and-audit-logs` 存在 `OperationLogsCard.vue` 共享组件交集，实施前需要基于其最新状态合并
  - 导入任务列表/详情接口需要提供可下载所需的 `file_key`；如果当前接口尚未返回，实施阶段需要同步补齐契约
- Breaking changes:
  - 无外部接口路径和 HTTP 方法层面的破坏性变更；主要是后台入口、权限和前端类型契约的增量扩展
