## 现象 匿名访客通过 `/portal/<id>/submit` 提交工单后,没有"提交成功 → 跳到工单状态页"的协议字段。当前只有 `bindIdentityFromField` 把邮箱绑定到 magic-link,但 magic-link 是异步的(用户要先去查邮件)。 ## 复现(按 #1294 spec 走完整流程) 1. 匿名访客填表 → action `helpdesk_ticket.create` 成功 → ticket #123 创建 2. 用户期望:立刻在浏览器看到「工单 #123 已创建,状态:处理中」 3. 实际:spec 没说跳哪。落到空白页/原表单? ## Workaround 模板作者在 action 的 success handler 里硬编码 redirect — 但这违反「零业务代码」原则。 ## 分阶段建议 **M2**(生产可用前必须补): - `PortalAnonymousRouteSchema` 新增 `onSuccess`: ```ts onSuccess?: { showView?: string; // viewRef,detail 或 list showRecordCreated?: boolean; // 自动跳到新创建记录的 detail ephemeralToken?: { ttl: string }; // 颁发短期 token 让匿名用户在 ttl 内回访 message?: I18nLabel; // 「已提交,请查收邮件」 } ``` - ephemeralToken 写入 cookie/URL,data API 校验时把它视为 `system.anonymous` 的临时 elevated 身份 ## 验收 - helpdesk 模板里声明 `onSuccess.showRecordCreated: true` 后,匿名提单 → 自动跳 `/portal/helpdesk/ticket/<id>?t=<ephemeral_token>` → 看到工单详情,刷新 24h 内仍有效 ## 关联 - #1294(portal spec 设计) - GAP-7(detail URL scheme,本 gap 跳转目标需要 detail route 约定)
现象
匿名访客通过
/portal/<id>/submit提交工单后,没有"提交成功 → 跳到工单状态页"的协议字段。当前只有bindIdentityFromField把邮箱绑定到 magic-link,但 magic-link 是异步的(用户要先去查邮件)。复现(按 #1294 spec 走完整流程)
helpdesk_ticket.create成功 → ticket 🔗 Broken links detected in documentation #123 创建Workaround
模板作者在 action 的 success handler 里硬编码 redirect — 但这违反「零业务代码」原则。
分阶段建议
M2(生产可用前必须补):
PortalAnonymousRouteSchema新增onSuccess:system.anonymous的临时 elevated 身份验收
onSuccess.showRecordCreated: true后,匿名提单 → 自动跳/portal/helpdesk/ticket/<id>?t=<ephemeral_token>→ 看到工单详情,刷新 24h 内仍有效关联