WP27:Editor 媒体模式配置
状态:已完成(2026-10-18)。阶段:M2。主责:Editor。 上层工作项:E04(表单/提示);详见模块计划。本包是该工作项的实施拆分,不是另一份配置契约。
前置与输入
前置完成:WP09、WP10、WP22、WP24。 字段与行为以统一契约为准;所有依赖编号见执行清单。
修改范围与交付
- 修改范围:生成类型更新、项目/逐页 media_end 和超时字段、无媒体回退说明,以及真实能力控制选项。
- 交付物:能保存并正确说明媒体结束翻页的项目/路由表单。
- 提交边界:不在 Editor 维护播放器或第二份媒体状态,不改变共享样式模型。
完成标准
- [x] 实现及评审覆盖上述修改范围,未超出提交边界。
- [x] 行为验收:继承/null 和新 advance 完整对象均正确;受阻提示可操作;能力未开放时不提供伪可用选项。
- [x] 验证范围:新字段草稿/映射/转换/能力显示测试及浏览器入口联调。
- [x] 关联验收:A02、A03、A18、A19;见联调与验收计划。A02/A03 的表单保存与 A18/A19 的受阻提示已覆盖;
media_end真实保存随能力开放归 WP30。 - [x] 记录代码版本、实际测试命令/结果、未运行项及原因,产物保存到任务专属临时目录。
- [x] 回填本卡状态与证据;阶段能力是否开放由对应阶段出口包决定,单包完成不等于整阶段交付。
建议提交标题:WP27:Editor 媒体模式配置。通常按一个可评审 PR 实施;若实际改动仍过大,先按输入/输出再拆子包,保留父编号和依赖。
实施记录(2026-10-18)
- 能力源:新增公开只读
GET /api/system/slideshow-capabilities,直接复用 External API 的build_slideshow_capabilities()与可执行模式常量;外部能力、Editor 表单和写入门禁共用同一份声明。 - Editor:新增
useSlideshowCapabilities()单次缓存读取;项目/路由表单按返回的advance_modes构建选项,未声明media_end时不出现该选项或超时字段;能力未开放但草稿含media_end时提示改用其它模式。 - 媒体字段:
media_end下展示“媒体等待上限(秒)”(1000–3600000ms,默认 300000),停留字段改为“无媒体时停留”;补充无媒体回退、循环背景不参与等待,以及浏览器受阻时使用“重试/下一页”的说明。 - 提交语义:项目表单始终提交完整
SlideshowSettings;路由覆盖继续按组提交完整对象或 null,media_timeout_ms始终随advance写入;继承摘要展示媒体结束的等待上限。修正 WP22 遗留的两处项目弹窗测试期望(补充media_timeout_ms)。 - 生成物:运行
pnpm run codegen:editor-api更新 OpenAPI(新增能力端点),pnpm run test:contracts:generated通过。 - 自动化:后端放映相关测试 52 passed;Editor 定向 4 files/19 passed;
pnpm --dir editor test153 files/851 passed;pnpm --dir editor check通过。 - 真实 Chromium(Editor 5173 + Backend 8000,专属证据账号与项目):真实能力返回 schema 2、
advance_modes=["manual","timer"],项目与路由表单均只有两种模式且无超时字段;将能力响应模拟为开放后,表单出现“媒体结束”、超时默认 300 秒、无媒体/循环/受阻说明,项目 PATCH 与路由 PUT 载荷均带完整{mode, delay_ms, media_timeout_ms};真实定时路由保存返回 200 并持久化完整advance。media_end写入仍按门禁返回 422,属 WP30 开放范围。 - 未运行:真实
media_end保存与回读、有声/移动端播放策略、双窗口入口(WP26/WP30)。 - 产物:
.tmp/wp27/(摘要、测试输出、浏览器截图与 JSON)。 - 提交:
a690fe9。
测试环境与命令选择遵循 dev-start-test,不因执行本卡重复启动服务或重置开发数据。