多步弹窗与向导
向导的困难不在“下一步”按钮,而在 Agent 必须知道当前处于哪一步、哪些字段已经填写、哪些步骤被遮住,以及失败后能否继续而不重复提交。
可运行页面
下面的供应商向导依次经过公司、联系人与复核。当前步骤之外的动作不会被保留在能力清单里,异步选项加载完成前也不能被当作可选值。
可运行方案
方案04:多步弹窗与向导
三步供应商流程,包含异步选项与审批链。每一步只声明该状态真实存在的控件。
pnpm dev:examples源码 examples/demos/recipe-wizard/页面 https://plingjs.dev/demos/recipe-wizard/?lang=zh从仓库根目录运行:
pnpm dev:examples打开 http://localhost:5191/demos/recipe-wizard/?lang=zh。源码在 examples/demos/recipe-wizard/;示例不依赖后端,审批链与提交结果都在当前页面内验证。
页面契约
把向导建模为有稳定 id 的区域,而不是一串匿名 div:
- 弹窗是一个区域,每一步是子区域或明确的
state.step; - 当前步骤可执行的动作进入能力清单,未来步骤的动作不可见;
- 已完成字段通过记录或只读状态暴露,不能把整张表单塞进上下文;
- “下一步”“上一步”“提交”“取消”各有稳定动作 id;
- 提交后的成功判据与业务状态绑定,不能只等待 toast;
- 关闭弹窗必须让旧能力失效,不能留下隐藏但仍可调用的写入。
示例流程
打开向导 → 可见“填写基本信息”
填写 → 可见“下一步”
进入第二步 → 第一步动作消失,第二步字段出现
提交 → 等待后端成功与页面状态同时成立
关闭 → 重新 describe,不沿用旧步骤能力如果向导允许跳回,必须显式暴露“上一步”,并在回到旧步骤后重新计算可用动作。Agent 不得通过猜测隐藏字段绕过校验。
验收标准
- 同一时刻只暴露当前步骤允许的动作。
state能说明步骤与进度,但不包含无关字段。- 参数校验失败返回
INVALID_PARAMS,页面显示具体错误。 - 提交失败保留已填数据,并允许在业务允许时重试。
- 取消或关闭后,旧
invoke返回不可用,不产生副作用。 - 刷新或导航后的恢复语义明确:要么恢复同一草稿,要么丢弃并告知。
- 需要人工完成的步骤使用
handoff,Agent 看不到“代批准”能力。
各框架实现
Vue 3 可从 区域、可见性与遮挡和 复合动作、异步与失败续跑开始;React 对应 区域与 异步工作。Vue 2、原生 JS 的结构相同,差异在声明语法。
仓库中的入网向导参考实现包含步骤切换、批量字段状态与基准任务。
常见失败
每一步都声明所有字段。 会让模型尝试填写隐藏步骤,或在错误状态下提交。只暴露当前可操作视图。
只暴露“提交”,不暴露进度。 Agent 无法判断下一步;用状态视图提供步骤与已完成项。
弹窗关闭仍可调用。 区域销毁后应移除动作注册,并让会话描述失效。
把“下一步”当普通按钮。 需要确认时使用页面确认;需要人完成时用 handoff,不要给 Agent 自动通过能力。
验收夹具
至少测试:填写成功、字段错误、第二步取消、提交超时后继续、关闭后重调、刷新恢复。每个拒绝路径都要断言后端没有产生重复订单或重复记录。
本地验证
让助手完成三步申请,并在复核页调整审批链顺序。逐步观察旧步骤动作是否消失、异步行业选项何时变为可用,以及重复点击提交是否只产生一次申请。

