事件回调
新版 UI 接入既可以通过 监听事件,也可以在脚本接入场景里通过 onMessage
结合当前实现,iframe 向宿主页面抛出的消息类型包括:
mounteduser-infoinvalid-tokenerrorpageChangetoggleGenerateModebeforeGenerateoutlineGeneratedbeforeCreatePptchargeafterGeneratebeforeDownloadbeforeCreateCustomTemplateafterCreateCustomTemplatemanuallySavePPTautomaticSavePPTcurrentPptInfochangeSlideIndexpptxRenamed
核心事件
mounted
iframe 挂载完成后触发:
{ type: 'mounted' }
beforeGenerate
用户开始生成前触发。你可以在这里做额度校验、风控或补充业务确认。
{ type: 'beforeGenerate', data: { subtype: 'outline', // 或 'ppt' fields: {} } }
该事件允许返回:
true:继续生成false:阻止生成Promise<boolean>:异步决定是否继续
beforeCreatePpt
新版 V2 在选完模板、真正开始生成 PPT 前,还会多触发一个拦截点:
{ type: 'beforeCreatePpt', data: { taskId: 'task_xxx', templateId: 'template_xxx', outline: 'markdown content', byCommand: true } }
该事件同样支持返回 true / false / Promise<boolean>。从当前实现看,如果宿主侧没有及时回复,该拦截默认会在约 500ms 后放行。
pageChange
页面切换时触发:
{ type: 'pageChange', data: { page: 'creator' } }
当前实际发送的 page 值可能包括:
dashboardeditorcustomTemplatecreatorcreatorV2templateCreatortemplateMarker
toggleGenerateMode
创建页切换“主题生成 / 导入资料”以及资料子模式时触发:
{ type: 'toggleGenerateMode', data: { mode: 'subject', subMode: undefined } }
其中 subMode 在资料模式下可能是:
textfilewebsiteoutline
outlineGenerated
当新版创建流程已经产出结构化大纲对象时触发:
{ type: 'outlineGenerated', data: { outline: {} } }
beforeDownload
下载前触发,可用于拦截权限,也可以返回自定义文件名:
{ type: 'beforeDownload', data: { id: 'ppt_xxx', subject: '季度经营汇报' } }
该事件允许返回:
true:允许下载false:阻止下载string:自定义文件名,建议以.pptx结尾Promise<boolean | string>:异步决定
charge
PPT 生成完成并发生扣费时触发:
{ type: 'charge', data: { id: 'ppt_xxx' } }
afterGenerate
PPT 成功生成后触发:
{ type: 'afterGenerate', data: { id: 'ppt_xxx' } }
error
错误事件统一从这里接收:
{ type: 'error', data: { code: 88, message: '您的次数已用完,请开通会员' } }
从当前实现看,error.data 有两种常见形态:
{ code, message }{ error }
user-info
获取当前用户额度和使用情况:
{ type: 'user-info', data: { uid: 'user_xxx', availableCount: 10, usedCount: 2 } }
invalid-token
当 token 校验失败时触发:
{ type: 'invalid-token' }
beforeCreateCustomTemplate
创建完整自定义模板前触发:
{ type: 'beforeCreateCustomTemplate', data: { file: {}, totalPptCount: 99 } }
该事件支持返回 true / false / Promise<boolean>。
afterCreateCustomTemplate
自定义模板创建或修改完成后触发:
{ type: 'afterCreateCustomTemplate', data: { do: 'create_complex' } }
manuallySavePPT
用户主动点击保存时触发:
{ type: 'manuallySavePPT', data: { id: 'ppt_xxx', name: '季度经营汇报', templateId: 'template_xxx', pptxProperty: {} } }
automaticSavePPT
编辑器自动保存时触发:
{ type: 'automaticSavePPT', data: { id: 'ppt_xxx', name: '季度经营汇报', templateId: 'template_xxx', pptxProperty: {} } }
currentPptInfo
宿主侧主动请求当前 PPT 信息后返回:
{ type: 'currentPptInfo', data: { id: 'ppt_xxx', name: '季度经营汇报', templateId: 'template_xxx', pptxProperty: {} } }
changeSlideIndex
编辑器切换当前页时触发:
{ type: 'changeSlideIndex', data: { slideIndex: 3, pptId: 'ppt_xxx', when: 'modify' } }
其中 when 的可能值为:
createmodify
pptxRenamed
PPT 被重命名后触发:
{ type: 'pptxRenamed', data: { id: 'ppt_xxx', name: '新的文件名' } }
典型业务处理示例
docmee.on('beforeGenerate', async ({ subtype, fields }) => { const allowed = await fetch('/api/quota/check', { method: 'POST', body: JSON.stringify({ subtype, fields }), }).then((res) => res.json()) return allowed.ok }) docmee.on('beforeDownload', ({ subject }) => { return `Docmee_${subject}.pptx` }) docmee.on('error', ({ code, message }) => { console.error(code, message) })
事件设计建议
- 在
beforeGenerate中做额度和风控判断,不要等生成后再回滚 - 如果你需要在“选完模板但还没真正出 PPT”时做最后一次校验,拦截
beforeCreatePpt - 在
beforeDownload中统一做命名规范和权限控制 - 对
error里的业务码做分类处理,尤其是次数耗尽、鉴权失效和参数错误 - 需要感知编辑器内保存动作时,优先监听
manuallySavePPT和automaticSavePPT - 如果宿主侧要跟随编辑器页切换或标题变更,监听
changeSlideIndex和pptxRenamed
下一步
Last updated on