feat(dashboard): 群管理添加 bot 全部入群后自动收敛并优化结果展示 - #1238
Conversation
群管理里的「添加 bot」弹窗此前有两个体验问题:一是添加成功后弹窗不会关闭、 外层群列表也常停在旧的成员状态,需要手动刷新;二是当前群所有 bot 都已入群时, 按钮仍可点击,点了只弹一条「所有 bot 都已在群里」的 toast,比较突兀;三是添加 结果只显示 bot 的 larkAppId,看不出是哪个 bot。 本次改为本地乐观状态驱动的收敛,并配套收紧按钮可用性与结果展示: - 最后一批全部成功时自动关闭弹窗;仍有候选或存在失败项时保留弹窗,失败项与错误 信息继续展示 - 关闭判定走本地乐观状态:成功的 okIds 回传父组件先乐观标记 inChat,再复用 refreshUntilSeen 向服务端快照收敛,不再用单次后台 reload 冒充最终一致 - 收敛按 chat 串行 + generation/pending union 防护,且提交粒度缩到目标 chat 行, 快照写入口统一为 sync-ref-first,杜绝同群旧轮询回滚、跨群整份快照覆盖、同批 绝对值互相覆盖、state/ref 失配四类竞态 - 当前群没有可添加 bot 时,「添加 bot」按钮原生 disabled 置灰不可点,禁用态由 当前 chat membership 与 bot roster 派生,数据更新后自动恢复;不再走点击后 toast - 添加结果按与点选框一致的「名称 +(ID)」展示,未知名称回退为 ID 影响面:仅 Dashboard 群管理页添加 bot 弹窗与 groups snapshot 收敛逻辑;不影响新建 群、保存 profile 等其它路径。 验证:bunx tsc --noEmit 通过;vitest 目标套件 57/57 全绿(含组件级与父组件/轮询回写 级回归、跨群不回滚、同批 canonical、失败项保留);git diff --check 干净。 Co-authored-by: TRAE CLI <traecli@bytedance.com>
自动评审初步意见(Claude)
先说结论:改动方向和工程质量都很好 —— 三个体验问题定位准确,四类竞态的分析(generation / pending union / per-chat 提交 / sync-ref-first)不是纸上谈兵, 下面一条是建议合入前处理的问题,其余为非阻断。 F1(建议修)
|
背景
群管理里的「添加 bot」此前有三个体验问题:
larkAppId,看不出是哪个 bot。改动要点
成功即收敛并自动关闭:最后一批全部成功时自动关闭弹窗;仍有候选或存在失败项时保留弹窗,失败项与错误信息继续展示。
本地乐观状态驱动:成功的
okIds回传父组件先乐观标记inChat,再复用refreshUntilSeen向服务端快照收敛,不再用单次后台 reload 冒充最终一致。四类竞态防护:收敛按 chat 串行 + generation/pending union,提交粒度缩到目标 chat 行,快照写入口统一为 sync-ref-first,杜绝「同群旧轮询回滚」「跨群整份快照覆盖」「同批绝对值互相覆盖」「state/ref 失配」。
按钮禁用替代 toast:当前群没有可添加 bot 时,「添加 bot」按钮原生
disabled置灰不可点;禁用态由当前 chat membership 与 bot roster 派生,数据更新后自动恢复。影响面
仅 Dashboard 群管理页添加 bot 弹窗与 groups snapshot 收敛逻辑;不影响新建群、保存 profile 等其它路径。
验证
bunx tsc --noEmit通过;git diff --check干净。