95 lines
3.9 KiB
Markdown
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。
|