From bb767bb84a037ba38e3b4765a67f1adcade0e818 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sun, 4 Oct 2026 21:40:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(automation):=20=E4=BF=9D=E5=AD=98=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=97=B6=E5=AD=98=E9=94=99=E4=BD=9C=E4=B8=9A=20?= =?UTF-8?q?=E2=80=94=E2=80=94=205=20=E5=BC=A0=E5=8D=A1=E5=85=B1=E7=94=A8?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=20form=20=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 现象(用户报的) 点「账号资料定时补全」的保存,提示却是**「积分到期补记 配置已保存」**。 ## 根因:不是提示文案错,是**真的存错了作业** `jobs.map()` 里**每张卡各包一个 `
`,但它们共用同一个 `Form.useForm()` 实例**。React 里多个 `` 绑同一实例时, **`onFinish` 会被最后挂载的那个覆盖** —— 于是: 点第 1 张卡的「保存」→ 触发的是**最后一张卡**(积分到期补记)的 onFinish → saveJob(积分到期补记) ## 实际影响(不涉及数据损坏) - `saveJob(job)` 读的是**那个 job 自己的**字段值 → 所以「积分到期补记」 只是被用它自己的值**重存了一遍**(无副作用) - 而用户真正想保存的「账号资料定时补全」**根本没被保存** —— 静默失败 ## 修法 把 Form **提到外面只包一层**(`Form.Item` 靠 `[job.key, 字段]` 天然区分各自的值), 保存按钮从 `htmlType="submit"` 改成显式的 `onClick={() => saveJob(job)}` —— 不再依赖"哪个 Form 的 onFinish 生效"这种隐含约定。 并在原处留了注释说明为什么**不能**各自包 Form(否则下一个人很可能又这么写)。 ## 说明 前端这类"共用实例"的错误没有自动化测试兜住(仓库没有组件测试), 所以这次是靠用户点出来的。已在代码注释里写清原因,降低复发概率。 ## 验证 前端 build 通过、lint 0 errors。 --- web/frontend/src/pages/AutomationPage.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/web/frontend/src/pages/AutomationPage.tsx b/web/frontend/src/pages/AutomationPage.tsx index b266abe..7efbe33 100644 --- a/web/frontend/src/pages/AutomationPage.tsx +++ b/web/frontend/src/pages/AutomationPage.tsx @@ -273,6 +273,7 @@ export default function AutomationPage() { description="两个作业是联动的上下游:巡检把失效账号标记为 invalid,「CK 自动重登」的候选条件正是这个标记,所以巡检一发现失效,重登作业在下一个周期就会把它救回来(需打开重登开关)。刻意分成两个作业是为了止损粒度 —— 巡检只读、零风险;重登会真实登录(消耗邮箱验证码、可能遇到极验),出问题可单独关掉重登而不影响检测。巡检本身不会替换任何 Cookie、也不会改账号状态。" /> + {jobs.map((job) => ( - saveJob(job)}> + {/* ⚠️ 这里**不能**各自包一个 : + 多个 绑同一个 form 实例时,`onFinish` 会被最后挂载的那个覆盖 —— + 点第一张卡的保存,跑的其实是**最后一张卡**的保存(真踩过: + 存「账号资料定时补全」提示的是「积分到期补记」,即存错了作业)。 + Form 统一提到这一层外面,各卡只用 Form.Item 的 [job.key, 字段] 区分。 */} @@ -367,7 +372,6 @@ export default function AutomationPage() { - {!canManage && ( 当前账号只能查看,修改配置需要 automation:manage 权限。 @@ -375,6 +379,7 @@ export default function AutomationPage() { )}
))} +