From cba39562dc5883403df38aa3ff9c8d0febab22d7 Mon Sep 17 00:00:00 2001 From: butubb <1422726308@qq.com> Date: Thu, 24 Sep 2026 11:29:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=BC=96=E8=BE=91=E5=99=A8):=20=E5=B5=8C?= =?UTF-8?q?=E5=A5=97=E6=9D=A1=E4=BB=B6=E5=88=A4=E6=96=AD=E7=9A=84=E5=88=86?= =?UTF-8?q?=E6=94=AF=E5=90=8C=E6=AD=A5=E5=86=99=E9=94=99=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=20=E2=80=94=E2=80=94=20=E4=BF=AE=E5=A4=8D=E3=80=8C=E5=A1=AB?= =?UTF-8?q?=E4=BA=86=E5=80=BC=E4=BF=9D=E5=AD=98=E5=B0=B1=E6=B2=A1=E4=BA=86?= =?UTF-8?q?=E3=80=8D+=E3=80=8C=E6=AD=A5=E9=AA=A4=E8=A2=AB=E6=94=B9?= =?UTF-8?q?=E5=90=8D=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户报的现象(生产「评论」任务): ① 一直提示"步骤7子步骤1没有填写包名" ② 包名填了、一保存就没了 ③ 那个步骤还会"自己重命名"成「指定视频评论」 根因(**2026-08-11 的 060157e 引入的老 bug,不是本批改动**): `_syncParams` 定位 if_el 的分支容器时用的是 card.querySelector(':scope > .if-branch .step-children.if-else') `.if-branch` 与 `.step-children` 之间是**空格(后代)**而不是 `>`(直接子级)。 于是**条件判断里再嵌一个条件判断**时,外层卡片会匹配到**内层那个 if_el 的分支容器** (文档顺序上它更靠前),把内层的子步骤当成自己的分支去同步: · 内层分支的「步骤名」输入框 → 写进了外层分支里那个 stop_app 的 label (所以步骤被改名成内层容器步骤的名字「指定视频评论」); · 内层分支里**没有**包名输入框 → 外层那个 stop_app 的 package **永远读不回来** (所以"填了保存就没"、保存后仍报"没填包名")。 把两处都改成直接子级(`> `)即可。then 那侧此前恰好因为文档顺序能命中自己, 但写法一样脆,一并收紧。 验证:最小复现(外层 if_el 的 then 里嵌内层 if_el,外层 else 放 stop_app+screen_off) —— 修复前:`package=""`、`label="指定视频评论"`(与用户现象逐字一致); 修复后:`package="com.ss.android.ugc.aweme"`、`label="我给它起的名"`。 另扫了生产全部 6 个任务:只有「评论」这一个任务的结构会踩到,且已经踩了 (`7.第1步 stop_app 包名为空`)—— 改动不会波及其它任务。 --- static/admin/editor.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/static/admin/editor.js b/static/admin/editor.js index 6fb9938..6567fbb 100644 --- a/static/admin/editor.js +++ b/static/admin/editor.js @@ -996,11 +996,16 @@ var _stepEditor={ self._syncParams(childWrap,steps[i].params.children); } // if_el 双分支(then/else 在 .if-branch 内,不会与上面的直接子级选择器冲突) - var thenWrap=card.querySelector(':scope > .if-branch .step-children.if-then'); + // + // ⚠ `.if-branch` 与 `.step-children` 之间**必须是 `>`(直接子级)**: + // 写成后代(空格)时,条件判断里再嵌套一个条件判断的话,本卡片会**匹配到内层 + // 那个 if_el 的分支容器**(文档顺序上更靠前),于是把内层分支的子步骤当成自己的 + // 去同步 —— 症状:自己的步骤"填了值保存就没了"、步骤名被内层的容器步骤覆盖。 + var thenWrap=card.querySelector(':scope > .if-branch > .step-children.if-then'); if(thenWrap&&steps[i].params&&Array.isArray(steps[i].params.then)){ self._syncParams(thenWrap,steps[i].params.then); } - var elseWrap=card.querySelector(':scope > .if-branch .step-children.if-else'); + var elseWrap=card.querySelector(':scope > .if-branch > .step-children.if-else'); if(elseWrap&&steps[i].params&&Array.isArray(steps[i].params.else)){ self._syncParams(elseWrap,steps[i].params.else); }