import fs from 'node:fs';
const dir='reports/bridge-introduction-20260918',read=name=>JSON.parse(fs.readFileSync(dir+'/'+name+'.json','utf8'));
const result=read('result'),operations=read('operation-regression'),upload=read('upload-result'),migration=read('migration'),health=read('health');
if(!result.pass||!operations.pass||!upload.pass)throw new Error('Verification incomplete');
const esc=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
const shots=[['task-86-background.png','005 · 项目背景'],['task-86-lecture.png','005 · 原理讲解'],['task-87-background.png','006 · 项目背景'],['task-88-background.png','007 · 项目背景'],['task-89-background.png','008 · 项目概览'],['video-lecture.png','受控视频播放验证(隔离响应配置)'],['authoring.png','训练编排 · 背景与前置讲解'],['authoring-uploaded-video.png','真实上传、发布及重新打开验证']];
const html=`
背景与前置讲解 · 验收记录背景 → 讲解1…N → 操作步骤
2026-09-18 · 本地环境 6180 / Gateway 6100 · 内部维护账号验收
通过:四个现有任务、005新模型入口、视频切换、编排保存、媒体上传与发布、005完整操作回归。
背景及每段讲解支持下一步、上一步、跳过讲解;跳过后仍从当前未完成操作继续。操作编号、动作、评分、已有记录不变。讲解期间不会播放隐藏的步骤数字教员,切页停止视频。
| 入口 | 前置内容 | 原操作 | 发布内容版本 |
${migration.records.map(r=>`| ${esc(r.code)} | 背景 + ${r.lectures} 段讲解 | ${r.steps} 步 | ${r.contentVersionId} |
`).join('')}
内容依据与范围
005、006讲解取自图片转录MD;007、008原稿缺少独立讲解,未补写。008背景页为原稿四组操作归纳的项目概览。配图使用各场景封面;原稿要求的液压原理图和专用讲解视频尚无素材,可在编排中上传替换。
编排入口:内容制作 → 训练编排 → 编辑 → 背景与前置讲解。应用后保存草稿、发布。已发布教学任务固定版本不会因编辑草稿自动改变。
图片原文:脚本Markdown索引;接口及维护:背景与前置讲解。
实际验证
- Java17 mvn test:通过;新增讲解契约4项及含权限/学员投影的策略测试39项通过。
- pnpm run build:通过;既有大包体积提示仍在。
- 前置讲解3项、讲解保存9项及正式路由契约测试通过。
- 1366×768 浏览器:4个任务和005验证入口顺序浏览、背景/讲解跳过、回看、无误推进及无JS异常。
- 005验证入口真实三维五步六动作通过,开盖后补保存操作准备不会重置盖子。
- 上传图片和视频到临时工程,保存、发布、重新打开均通过;临时工程459、460已软删除,没有创建教学测试任务。005编排验证工程保留一份相同讲解配置的保存草稿,任务继续使用560版本。
- 本机及局域网页面、Gateway健康、Auth/Tran ping均200。
证据:页面测试 · 操作回归 · 媒体上传 · 版本更新 · 服务健康
${shots.map(([file,title])=>`${esc(title)}
`).join('')}`;
fs.writeFileSync(dir+'/index.html',html);console.log(dir+'/index.html');