Files
crawler-plugin/frontend-vue
huangzd1997 759f0b15d8
Build Backend JAR / build (push) Has been cancelled
task-101: 上传/解析/入队三道前端拦截,阻止坏数据卡死 Python 自动化
新增 shared/dispatch-guard.ts(纯 TS 校验,可单测)与 dispatch-guard-ui.ts
(ElMessageBox 弹窗层),在数据流的三个位置设闸:

- 选文件:空选择、非 xlsx/xls/csv、空路径直接拦;重复文件弹确认
- 解析结果:taskId 非法、totalRows 为 0、整批行被丢弃、需要分组却无分组直接拦;
  部分行被丢弃弹确认后才允许推送
- 入队前:结构不符、必填字段缺失、items/groups/country_codes 为空数组、
  行数页数为 0、JSON 不安全值(NaN/Infinity/BigInt/循环引用/数组洞)

覆盖 11 个推 Python 队列的 Tab 与 dedupe/split/convert 三个纯 Java Tab。
闸位按 Tab 挑选以免留下孤儿后端状态:collect-data 校验前置到
activateCollectDataTask 之前(任务保持 PENDING 无需回滚)、product-risk 的国家
检查提到建任务之前;已建任务后才拦下的复用各 Tab 原有失败补偿路径。

两处边界:对象属性 undefined 放行(taskNo 这类可选字段是惯用写法),只拦数组
元素 undefined 与数组洞;price-track 的 asin_rows_by_country 仅在 mode=asin
时要求非空,status 模式下 loadAsinRowsForAppClient 本就返回 {}。

顺带修复 similar-asin / appearance-patent 的 selectFiles 缺少 try/catch,
上传失败会残留上一批文件与解析结果。

测试:tests/dispatch-guard.test.ts 新增 37 个 test_task_101_* 用例。
2026-09-01 12:53:12 +08:00
..
2026-04-27 09:18:10 +08:00
2026-03-20 18:13:47 +08:00
2026-03-20 18:13:47 +08:00
2026-03-26 16:42:25 +08:00
2026-06-09 21:07:50 +08:00
2026-03-20 14:26:34 +08:00
2026-03-19 13:15:47 +08:00
2026-04-13 20:07:00 +08:00
2026-04-05 22:04:21 +08:00
2026-07-25 09:58:29 +08:00
2026-04-23 20:48:57 +08:00
2026-07-28 13:40:19 +08:00
2026-04-10 19:33:58 +08:00
2026-05-06 22:41:26 +08:00
2026-03-20 18:13:47 +08:00
2026-03-19 13:15:47 +08:00
2026-08-30 22:09:22 +08:00
2026-06-18 18:53:16 +08:00