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

3.9 KiB

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;不阻塞列表刷新

内部结构

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_idresult_id TaskIdResultId,保持字符串兼容
结果文件 ResultFileDescriptor
批量下载 BatchDownloadJob
重复总览 DuplicateOverview
重复明细 DuplicateItemDuplicateDetail
权限范围用户 PermissionUserItem[]

迁移/实现注意事项

  1. 任务列表刷新不能停止正在运行的下载或导出任务。
  2. 轮询必须有终态、失败退避、可见性降频和卸载清理,不能在组件每次更新时创建新计时器。
  3. 批量下载必须处理部分失败、响应头文件名、空文件和服务端错误摘要。
  4. 重复检查的 Overview、Items、Detail 不得使用一个全局 currentData,避免抽屉打开时覆盖主列表。
  5. 权限配置仍然是现有后端数据范围权限接口,不扩展为按钮 action 权限。
  6. 大数据导出必须展示等待状态,不得把完整数据加载到浏览器内存后再导出。
  7. 复杂视图可以保留专用 CSS,但公共表格、Dialog、Drawer、Pagination 使用 Element Plus。