Skip to content

Editor 翻页动画与自动放映实施计划 ​

状态:M0 已实现(WP09、WP10、WP12);M1 单窗口入口已实现(WP16);M2 媒体表单、权限链与双屏入口已由 WP22/WP26/WP27 交付并通过 WP30 回归(2026-10-18)。Editor 页面结构弹窗已完成 P0/P1 交互重构(三栏检查器、批量放映、预计时长与保存并放映,2026-10-18)。字段与写入语义以统一契约为准,UI 遵循根目录 DESIGN.md。

实施拆分见工作包执行清单:WP09 项目表单、WP10 路由覆盖、WP16 单窗口入口、WP22 权限链、WP26 双屏入口、WP27 媒体配置。以下 E 编号保留为上层职责。

1. 目标与现状 ​

Editor 负责配置与操作入口,项目默认值和逐页覆盖通过 Backend 持久化。已有项目展示配置、路由编辑器及预览 iframe;新增表单不在浏览器本地存储第二份项目放映配置。

主要入口为 ProjectPresentationConfigDialog.vue、ProjectRouteConfigDialog.vue、ProjectRouteWorkbench.vue、ProjectRouteSequenceTable.vue、ProjectRouteInspector.vue、路由映射工具和 RuntimePreviewFrame.vue。

2. 工作包 ​

E01:项目放映配置(M0,依赖 B01/B02/B05) ​

  • [x] 从生成 API 类型读取 slideshow,拆出专门的配置字段组件和草稿组合逻辑,避免继续扩大现有展示配置弹窗。
  • [x] 在项目设置提供“放映”分区:默认动画、动画时长、翻页方式、停留时间、循环、进入放映后的初始自动推进。
  • [x] 放映草稿单独提交项目顶层参数,不混入共享样式 presentation;应用或另存工作空间样式不重置它。
  • [x] UI 可显示秒,提交统一转换为整数毫秒;动画时长和停留时间使用不同标签及说明;无动画时提交合法的 0ms。
  • [x] 保存失败保留草稿和字段错误,保存成功按 Backend 返回值刷新;“恢复当前值”只恢复已保存值。
  • [x] 自动推进开关说明适用范围和浏览器可能要求点击进入放映;全屏请求由 Runtime 窗口内的用户手势完成。

验收:项目配置保存重开后值一致,应用样式不丢设置,非法或越界值能定位到控件。

E02:逐路由覆盖与继承(M0,依赖 B02/E01) ​

  • [x] 叶子路由增加放映设置入口,动画和翻页各自选择“继承项目/覆盖”;分组只保留已有路由组织能力。
  • [x] 显示项目默认值、原始覆盖及生效摘要;前端在草稿阶段按同一继承规则即时计算,保存后的权威生效值仍由 Backend 派生。
  • [x] 选择覆盖时以当前生效组初始化完整对象;恢复继承明确提交 null,不提交展开后的生效值。
  • [x] 更新读模型→草稿→写模型的映射,过滤只读 effective_slideshow,保留排序、重命名、移动和重复引用中的覆盖设置。
  • [x] 复杂字段使用右侧检查器,表格只显示短摘要,避免每行堆积表单;批量设置与“应用到本章”已交付。
  • [x] 草稿修改和取消不污染已保存路由;关闭前提供未保存修改确认;整树保存失败保持所有草稿,避免局部成功的误导。

验收:修改项目默认值时继承项随之变化,覆盖项保持;同一页面的两次引用可保存不同时间;单组恢复继承不影响另一组。

E03:预览和单窗口自动放映入口(M1,依赖 B03/R02/G01) ​

  • [x] 项目放映入口按语境分工:页面列表点击“放映”从首页开始,页面详情点击“放映”从当前页在路由树中的第一条绑定开始;未加入项目路由的页面不渲染放映入口。起始位置只作为本次入口选择,不修改项目默认配置。页面详情不再提供起始位置下拉,避免在选择阶段暗示可以直接进入全屏。
  • [x] 保存配置后重建不可变 preview artifact 再打开;沿用既有恢复流程,提示配置已更新但当前旧窗口仍为旧快照。
  • [x] 单页编辑、历史版本、资源/组件预览继续使用只读或交互预览上下文,不因项目 auto_start 自动翻页。
  • [x] 播放、暂停、进度和上一页/下一页控制由 Runtime 渲染和执行;Editor 负责入口、加载/失效反馈和返回工作台。
  • [x] 放映入口保留路由、artifact 身份、票据和预览域约束,不通过增加未校验 postMessage 指令绕过权限。

验收:用户能从保存的项目进入可重复的定时放映;返回编辑不会继续后台翻页;预览票据恢复遵循现有安全边界。

E04:媒体与双窗口入口(M2,依赖 B06/R04/R05) ​

  • [x] 根据后端能力开放媒体结束模式和超时设置,增加“无媒体按停留时间翻页”的说明(WP27,2026-10-18)。
  • [x] 贯通 iframe 的播放权限委派,针对浏览器受阻提供可操作提示,不能显示实际上未播放的暂停状态(WP22 已补齐 autoplay/fullscreen 委派,WP24 提供服务端受阻恢复,WP27 提供表单侧操作说明)。
  • [x] 入口明确区分单窗口放映与演讲者模式;双窗口中的放映控制和媒体状态交给 Runtime 同步(WP26 观众唯一调度,WP30 在真实预览 artifact 中复验媒体推进与关闭重开)。

验收:模式选项与 Backend/Runtime 能力一致,媒体受阻有明确操作,单页预览和演讲者缩略图均不抢播。

3. P0/P1 交互重构(2026-10-18) ​

  • 页面列表入口保留两个专注界面:顶部 项目设置 分「展示 / 放映」两个标签页,展示页含主题、尺寸、菜单、导出与样式规范,放映页管理项目默认值;已加入路由 → 页面结构 管理顺序、隐藏、路径和逐页覆盖。
  • 页面结构采用“页面池 / 序列 / 检查器”三栏;行内显示生效摘要与继承/覆盖/隐藏徽标,Route 片段收进检查器高级区,操作不再挤在表格行内。
  • hidden 明确为“不显示在下拉目录,也不参与自动或手动翻页”;隐藏页禁用“从这里放映”,但保留覆盖设置。
  • 批量放映支持“不修改 / 恢复继承 / 设置覆盖”三态;选中分组时“批量设置本章”展开为子页节点执行,同一页面多次引用可分别设置。
  • 顶部按可见叶子页估算总时长,手动页和媒体页单独提示;检查器提供“保存并从这里放映”,父组件保存成功后按 entryRoute 打开新的只读快照。
  • 页面结构保存仍为整树 PUT,项目设置仍为 PATCH /projects/{id};两侧共享 ProjectSlideshowFields 与只读默认值摘要,不合并保存接口。

4. 组件和验证约束 ​

复用 components/ui 的表单、数字输入、选择、开关、弹窗和提示;遵循语义 Token、标题不换行、单一滚动所有者与 min-h-0/min-w-0 约束。核查 1440px、1180px、960px 及键盘访问,保存状态不能仅用颜色表示。

模块内覆盖草稿读写、秒毫秒转换、继承/null、只读字段过滤、路由移动与取消、保存失败和旧响应兼容。跨模块通过验收计划验证实际预览与下载构建;类型检查、单测和构建按技能矩阵选择。