Files
crawler-plugin/docs/specs/06-task-and-duplicate-center.md

95 lines
3.9 KiB
Markdown

# 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。