# 06 任务与重复分析中心 ## 模块职责 覆盖高复杂度的任务记录、批量下载、权限配置和店铺数据重复检查,拆分旧 `admin.js` 中长函数和多种视图状态,保证任务轮询、下载和分析视图互不污染。 覆盖页面: - 视频任务记录:`image-video-tasks` - 店铺数据记录:`shop-data-crawl-tasks` - 店铺数据重复检查:`shop-data-duplicate-check` ## 依赖关系 上游:菜单级页面权限、统一任务状态类型、下载 URL/文件下载适配器、用户和店铺分组选择器。 旧实现: - `admin.js:loadImageVideoTasks` - `admin.js:loadShopDataCrawlTasks` - `admin.js:loadShopDataDuplicateCheckOverview` - `admin.js:loadShopDataDuplicateCheckItems` - `admin.js:loadShopDataDuplicateDetail` - `admin.js:saveImageVideoPermissions` - `admin.js:saveShopDataTaskPermissions` Java API 来源: - `AdminImageVideoTaskController` - `AdminShopDataCrawlTasksController` - `AdminShopDataDuplicateCheckController` ## 核心接口:原实现 → 目标实现 | 功能 | 原实现 | 目标实现 | |---|---|---| | 视频任务列表 | DOM 卡片、批量下载 | `ImageVideoTasksPage.vue` + 状态化任务卡片/表格 | | 视频任务权限配置 | 旧权限 modal | 页面内 Permission Dialog,仍是用户/数据范围配置,不是按钮权限 | | 店铺数据任务 | 店铺分组卡片、分页 | `ShopDataTasksPage.vue` + 独立筛选和任务列表状态 | | 店铺数据批量下载 | 旧脚本直接组装 ZIP 请求 | `BatchDownloadController` composable + 下载状态面板 | | 重复检查总览 | `loadShopDataDuplicateCheckOverview` | `DuplicateCheckPage.vue` 的 Overview 区域 | | 重复检查明细 | `loadShopDataDuplicateCheckItems/detail` | Overview、Items、Detail 三个明确的数据源和视图状态 | | 重复检查导出/导入 | 旧按钮和 modal | 明确的任务状态 Dialog;不阻塞列表刷新 | ## 内部结构 ```text TaskCenter ├── ImageVideoTasksPage │ ├── TaskFilter │ ├── PermissionScopeDialog │ ├── TaskCardGrid │ └── BatchDownloadPanel ├── ShopDataTasksPage │ ├── FilterBar │ ├── ShopTaskTable/CardView │ ├── PermissionScopeDialog │ └── BatchDownloadPanel └── DuplicateCheckPage ├── FilterBar ├── MetricsCards ├── DistributionView ├── DuplicateItemsTable └── DetailDrawer ``` 状态隔离: - 每个页面维护自己的 filter key、page、loading 和 error。 - 重复检查的总览、列表、详情使用独立请求 key。 - 批量下载使用独立 job 状态,不能复用普通列表 loading。 - 页面卸载时取消轮询、清理计时器和 AbortController。 ## 类型映射 | 原字段/概念 | 目标类型 | |---|---| | 任务状态字符串/数字 | `TaskStatus` 归一化枚举 | | `task_id`、`result_id` | `TaskId`、`ResultId`,保持字符串兼容 | | 结果文件 | `ResultFileDescriptor` | | 批量下载 | `BatchDownloadJob` | | 重复总览 | `DuplicateOverview` | | 重复明细 | `DuplicateItem`、`DuplicateDetail` | | 权限范围用户 | `PermissionUserItem[]` | ## 迁移/实现注意事项 1. 任务列表刷新不能停止正在运行的下载或导出任务。 2. 轮询必须有终态、失败退避、可见性降频和卸载清理,不能在组件每次更新时创建新计时器。 3. 批量下载必须处理部分失败、响应头文件名、空文件和服务端错误摘要。 4. 重复检查的 Overview、Items、Detail 不得使用一个全局 `currentData`,避免抽屉打开时覆盖主列表。 5. 权限配置仍然是现有后端数据范围权限接口,不扩展为按钮 action 权限。 6. 大数据导出必须展示等待状态,不得把完整数据加载到浏览器内存后再导出。 7. 复杂视图可以保留专用 CSS,但公共表格、Dialog、Drawer、Pagination 使用 Element Plus。