项目正在快速迭代中,API 与视觉细节可能随版本调整,请勿用于生产环境。

分步表单 ​

开放平台「新建应用」式的向导页:把长表单拆成三步收集 → 复核 → 提交,每步独立校验,回退不丢数据,提交后进入结果页展示一次性凭证。此示例覆盖 Form 校验的 Promise 用法、Steps 的受控驱动和 Result 结果页的组合。

在全屏示例中心打开「分步表单」

在线预览 ​

试试:第一步名称留空点「下一步」(被校验拦下)、第二步勾掉全部能力(至少一项)、回调地址填非 http(s) 格式;走完三步提交拿到 AppId / AppSecret。

新建应用

开放平台 · 应用接入

1
基本资料
应用名称与类型
1
能力与安全
开通能力、接口约束
1
确认创建
核对信息并提交
0 / 30
0 / 100

组件构成 ​

组件在本场景中的角色
Steps / Step步骤指示(active 为普通 prop,由父层状态驱动,不支持 v-model:active)
Form + FormItem每步一个独立 model 与 rules;validate() 失败走 reject,需捕获
Input / Textarea名称(maxlength + 字数统计)、简介多行输入
RadioGroup / CheckboxGroup应用类型单选、开通能力多选(v-model 均绑定 label 值,多选为数组)
InputNumber / Switch频率限制(min/max/step 钳制)、签名校验开关(active/inactive-text)
Alert第三步计费警示条(show-icon + 不可关闭)
DetailDescriptions确认页配置式回显(支持点路径取值与 span 跨列)
Result成功结果页(#extra 操作区 + 默认插槽放凭证卡片)
Message校验拦截、提交成功、复制反馈
PageHeader / SectionCard页头与容器

关键实现说明 ​

每步独立校验,通过才前进。三个步骤共用一个 stepIndex,「下一步」只校验当前步的 form 实例:

js
async function next() {
  const formRef = stepIndex.value === 0 ? form0Ref.value : form1Ref.value
  try {
    await formRef.validate()
  } catch {
    EbMessage.warning('请先完善当前步骤的必填信息')
    return
  }
  stepIndex.value++
}

v-show 而不是 v-if。三个步骤的表单始终挂载:回退时已填值天然保留,formRef 也不会因卸载变成 undefined。

确认页零成本回显。用 computed 把两个表单模型投影成 confirmData(枚举值翻译成文案、数组 join),DetailDescriptions 按 items 配置渲染,不写一行重复模板。

重置要清校验。「再创建一个」除了重置 model,还必须对两个 form 调 clearValidate(),否则残留的红字会跟着新表单出现。

本地运行 ​

bash
pnpm example:ebui-step-form   # http://localhost:8623
text
examples/ebui-example-step-form/
  src/
    App.vue
    pages/
      AppCreateForm.vue       # 本页预览的源码(含分步状态机与校验规则)

接入真实业务 ​

  • submit() 里的 setTimeout 换成创建接口;AppSecret 这类一次性凭证只在结果页内存态展示,不落 store;
  • 步骤数增减只改 steps 数组与 stepIndex 边界(stepIndex < 2 改成 < steps.length - 1);
  • 需要草稿续填时,把 base / capability 的初始化从接口快照恢复,再 stepIndex 跳到上次停留步。