新增 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_* 用例。
This commit is contained in:
@@ -119,3 +119,21 @@ html {
|
||||
outline: 2px solid rgba(96, 165, 250, 0.9);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/*
|
||||
* 上传 / 解析 / 入队拦截弹窗(src/shared/dispatch-guard-ui.ts)。
|
||||
* 文案是多行的「问题 + 怎么修」,需要保留换行,并给长文件名留出折行空间。
|
||||
*/
|
||||
.dispatch-guard-box {
|
||||
max-width: 520px;
|
||||
width: min(520px, calc(100vw - 32px));
|
||||
}
|
||||
|
||||
.dispatch-guard-box .el-message-box__message {
|
||||
white-space: pre-line;
|
||||
line-height: 1.65;
|
||||
word-break: break-word;
|
||||
max-height: 50vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user