Skip to content

多步弹窗与向导 ​

向导的困难不在“下一步”按钮,而在 Agent 必须知道当前处于哪一步、哪些字段已经填写、哪些步骤被遮住,以及失败后能否继续而不重复提交。

可运行页面 ​

下面的供应商向导依次经过公司、联系人与复核。当前步骤之外的动作不会被保留在能力清单里,异步选项加载完成前也不能被当作可选值。

可运行方案

方案04:多步弹窗与向导

三步供应商流程,包含异步选项与审批链。每一步只声明该状态真实存在的控件。

独立页面 · 可交互在新窗口打开
运行pnpm dev:examples源码 examples/demos/recipe-wizard/页面 https://plingjs.dev/demos/recipe-wizard/?lang=zh
以下页面直接连接同一套业务代码与本地服务。

从仓库根目录运行:

bash
pnpm dev:examples

打开 http://localhost:5191/demos/recipe-wizard/?lang=zh。源码在 examples/demos/recipe-wizard/;示例不依赖后端,审批链与提交结果都在当前页面内验证。

页面契约 ​

把向导建模为有稳定 id 的区域,而不是一串匿名 div:

  • 弹窗是一个区域,每一步是子区域或明确的 state.step;
  • 当前步骤可执行的动作进入能力清单,未来步骤的动作不可见;
  • 已完成字段通过记录或只读状态暴露,不能把整张表单塞进上下文;
  • “下一步”“上一步”“提交”“取消”各有稳定动作 id;
  • 提交后的成功判据与业务状态绑定,不能只等待 toast;
  • 关闭弹窗必须让旧能力失效,不能留下隐藏但仍可调用的写入。

示例流程 ​

text
打开向导 → 可见“填写基本信息”
填写 → 可见“下一步”
进入第二步 → 第一步动作消失,第二步字段出现
提交 → 等待后端成功与页面状态同时成立
关闭 → 重新 describe,不沿用旧步骤能力

如果向导允许跳回,必须显式暴露“上一步”,并在回到旧步骤后重新计算可用动作。Agent 不得通过猜测隐藏字段绕过校验。

验收标准 ​

  1. 同一时刻只暴露当前步骤允许的动作。
  2. state 能说明步骤与进度,但不包含无关字段。
  3. 参数校验失败返回 INVALID_PARAMS,页面显示具体错误。
  4. 提交失败保留已填数据,并允许在业务允许时重试。
  5. 取消或关闭后,旧 invoke 返回不可用,不产生副作用。
  6. 刷新或导航后的恢复语义明确:要么恢复同一草稿,要么丢弃并告知。
  7. 需要人工完成的步骤使用 handoff,Agent 看不到“代批准”能力。

各框架实现 ​

Vue 3 可从 区域、可见性与遮挡和 复合动作、异步与失败续跑开始;React 对应 区域与 异步工作。Vue 2、原生 JS 的结构相同,差异在声明语法。

仓库中的入网向导参考实现包含步骤切换、批量字段状态与基准任务。

常见失败 ​

每一步都声明所有字段。 会让模型尝试填写隐藏步骤,或在错误状态下提交。只暴露当前可操作视图。

只暴露“提交”,不暴露进度。 Agent 无法判断下一步;用状态视图提供步骤与已完成项。

弹窗关闭仍可调用。 区域销毁后应移除动作注册,并让会话描述失效。

把“下一步”当普通按钮。 需要确认时使用页面确认;需要人完成时用 handoff,不要给 Agent 自动通过能力。

验收夹具 ​

至少测试:填写成功、字段错误、第二步取消、提交超时后继续、关闭后重调、刷新恢复。每个拒绝路径都要断言后端没有产生重复订单或重复记录。

本地验证 ​

让助手完成三步申请,并在复核页调整审批链顺序。逐步观察旧步骤动作是否消失、异步行业选项何时变为可用,以及重复点击提交是否只产生一次申请。