feat(条件判断): 比对的值支持多个(任一命中即可)
需求:`35377983067` 或 `35377983068` 都算我的号,要能一次列好几个。 - `cmp_value` 现在是**多值**:换行或 `|` 分隔,一行一个。 多个之间是 **OR**(任一命中即命中);否定式(不等于/不包含)语义是 "一个都不许出现"。**逗号刻意不当分隔符**——要比对的文本本身就常带逗号 (`抖音号:123,456`),拆了就永远匹配不上。 - 比对核心抽成 `_cmp_hit(got, op, want) -> (是否命中, 命中的那个值)`, `_text_matches` 保留布尔版(多处调用只看结果,不改签名)。 日志因此能写清人话: `采集到 '抖音号:35377983068' 包含 2 个候选值 → 符合,命中『35377983068』` 否定式不成立时则指出"因为出现了『xxx』"——排查时一眼看出是哪个值惹的。 - 行为统一(**刻意的变更**):候选值为空/全空白 = 误配 → 一律不命中。 以前"等于 + 两边都空"会返回 True(`"" == ""` 的巧合),等于选了"等于" 却没填值就永远命中、条件判断形同虚设;现在与编辑器告警、AI 草稿校验 的口径一致了("选了运算符没填值 → 永远不命中")。 - 前端:`cmp_value` 由单行输入换成**两行文本域**,标签与提示写明"可多行、 任一命中即可、逗号不是分隔符"。 - 文档:TASK_DEV.md §4.2 例子改成多号,并写明分隔符与 OR/否定语义。 自测:多值语义 15 项(换行/`|` 拆分、逗号不拆、空白清理、四种运算符的多值 OR 与否定语义、命中的是哪个值、候选全空不命中)+ 原有 38 项回归全过; `_exec_if_el` 走多值路径实测命中 then 分支、日志含候选数与命中值。
This commit is contained in:
@@ -431,9 +431,11 @@ var _stepEditor={
|
||||
[['','不比对(只看元素在不在)'],['等于','等于'],['不等于','不等于'],['包含','包含'],['不包含','不包含']]
|
||||
.map(function(o){return '<option value="'+o[0]+'"'+((p.cmp_op||'')===o[0]?' selected':'')+'>'+o[1]+'</option>';}).join('')+
|
||||
'</select></div>'+
|
||||
'<div class="form-group" style="grid-column:span 2"><label>比对的值</label>'+
|
||||
'<input type="text" class="form-control" data-key="cmp_value" value="'+esc(p.cmp_value||'')+
|
||||
'" placeholder="如 35377983067"></div></div>';
|
||||
'<div class="form-group" style="grid-column:span 2"><label>比对的值(可多行,任一命中即可)</label>'+
|
||||
'<textarea class="form-control" data-key="cmp_value" rows="2" style="font-family:var(--mono)" '+
|
||||
'placeholder="如 35377983067 35377983068">'+esc(p.cmp_value||'')+'</textarea>'+
|
||||
'<div class="help">一行一个(也认 <code>|</code> 分隔):<b>任意一个命中就算命中</b>——多个号的场景把号都列上。'+
|
||||
'<b>逗号不当分隔符</b>,因为要比对的文本本身常带逗号</div></div></div>';
|
||||
h+=_selRowHtml(p,
|
||||
(dyn?'':'<div class="form-group"><label>查找超时(秒)</label><input type="number" class="form-control" data-key="timeout" value="'+(p.timeout||3)+'" min="0.5" max="30" step="0.5"></div>'+
|
||||
'<div class="form-group form-check" data-ocr-field style="display:'+(p.selector_type==='ocr'?'block':'none')+'">'+
|
||||
@@ -447,6 +449,7 @@ var _stepEditor={
|
||||
+'<br><b>文本比对</b>(可选):填了就把找到的那个元素的<b>文本</b>和"比对的值"比,'
|
||||
+'比中了才算命中。例:元素文本是 <code>抖音号:35377983067</code>,'
|
||||
+'想判断"这台登录的是不是这个号",选<b>包含</b>、值填 <code>35377983067</code> 即可(要整段一模一样才用"等于")。'
|
||||
+'多个值一行一个,<b>任一命中即可</b>——"这几个号都算我的"。'
|
||||
+'<br>⚠ 元素<b>没找到</b>时一律算未命中(走"未找到时"分支)——"没读到"不会被当成"和我设的不一样"。')+'</div>', true);
|
||||
}
|
||||
// 共享:触发概率(所有步骤通用,0~100)
|
||||
|
||||
Reference in New Issue
Block a user