mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-10-03 23:54:06 +00:00
截图看渲染 + 交互实测后发现的四个问题,都出在我自己新写的代码里。 一、弹窗用了全站共享的 #modal-wrap。 这个 id 是 App 内所有弹窗共用的,且允许多个同时存在("添加档位"选择器就 开在本弹窗之上)。既有代码靠 .closest() 或 closeTopModal() 从按钮往上找, 是有效的——但本弹窗还要从画布侧被查(sortCanvasEl / keyAutoClose / keyAutoInherit),那里没有按钮可走。实测点"添加档位"后 DOM 里同时有 modal-wrap=1 和 key-auto-modal=1,getElementById 会命中文档里的第一个, 也就是用户没在看的那一个:取消关掉错误的框,画布也可能解析到选择器上。 改为独立 id #key-auto-modal。 二、编辑即落盘,保存/取消形同虚设。 scrAddFromForm / sortScopeSave / scrDelSlot 等 6 处编辑后立刻调 persistAuto()。全局页这样是有意的(改动立即生效),但它和自己页面上那句 "点击保存排序后生效"的提示自相矛盾;在 per-key 弹窗里更严重——加一个槽位 就已经写进那个用户的链了,取消也无法撤销。收敛到 afterChainEdit(): 有 scope 时只提示、不落盘,保存是唯一写入口。 三、无独立链时画布显示全部 226 个模型。 注释写的是"显示空画布",实现却是 buildLanes(idx, [], 'chat')——空 rules 会走 discovery 兜底,把每个源的模型全填进去。用户打开弹窗看到 226 个色块, 会以为这些就是这个密钥的链。改为空 rules 直接给 []。 四、"使用全局链"提示不随画布变化。 加完槽位后仍显示"该密钥使用全局 AUTO 链",与旁边的色块直接矛盾。改为由 afterChainEdit 触发、按画布是否有内容决定去留。 另:批量替换时正则的缩进假设错了一次,把 afterChainEdit 自己改成了自调用 (无限递归),node --check 抓到后修掉。这类批量替换必须先过语法检查。 判据两条 + 变异:弹窗回到共享 id → 判红;去掉 scope 分支 → 判红。 CDP 实测:弹窗 id 唯一、添加后画布 0→1 块、添加后服务端 inherits=true (未落盘)、取消后仍 inherits=true、选择器与弹窗并存互不干扰。 Co-Authored-By: ModelRouter <noreply@modelrouter.dev>