| @@ -3,6 +3,9 @@ node_modules/ | |||||
| .env.* | .env.* | ||||
| !.env.example | !.env.example | ||||
| reports/**/build.log | reports/**/build.log | ||||
| reports/**/*.log | |||||
| reports/**/capture.webm | |||||
| **/__pycache__/ | |||||
| reports/**/.last-run.json | reports/**/.last-run.json | ||||
| artifacts/html-report/ | artifacts/html-report/ | ||||
| artifacts/test-results/ | artifacts/test-results/ | ||||
| @@ -0,0 +1,43 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "checks": [ | |||||
| "正式列表仅四条原任务,005 v2 三维 / 006–008 v3 三维,均为已发布普通训练", | |||||
| "真实内容接口拒绝旧文字版本,返回 400", | |||||
| "TASK-VIRTUAL-005 原任务 86 局域网预览加载三维模型与完整工具栏", | |||||
| "TASK-VIRTUAL-006 原任务 87 局域网预览加载三维模型与完整工具栏", | |||||
| "TASK-VIRTUAL-007 原任务 88 局域网预览加载三维模型与完整工具栏", | |||||
| "TASK-VIRTUAL-008 原任务 89 局域网预览加载三维模型与完整工具栏", | |||||
| "TASK-VIRTUAL-005 刷新恢复服务端步骤及拆装状态", | |||||
| "TASK-VIRTUAL-005 5 步完成、提交、评定 85 分与统计通过", | |||||
| "正式 006 保存失败不推进,重试后才保存", | |||||
| "TASK-VIRTUAL-006 刷新恢复服务端步骤及拆装状态", | |||||
| "TASK-VIRTUAL-006 7 步完成、提交、评定 85 分与统计通过", | |||||
| "TASK-VIRTUAL-007 刷新恢复服务端步骤及拆装状态", | |||||
| "TASK-VIRTUAL-007 11 步完成、提交、评定 85 分与统计通过", | |||||
| "TASK-VIRTUAL-008 刷新恢复服务端步骤及拆装状态", | |||||
| "TASK-VIRTUAL-008 16 步完成、提交、评定 85 分与统计通过" | |||||
| ], | |||||
| "errors": [], | |||||
| "runs": [ | |||||
| { | |||||
| "taskId": "86", | |||||
| "runId": "111", | |||||
| "code": "TASK-VIRTUAL-005" | |||||
| }, | |||||
| { | |||||
| "taskId": "87", | |||||
| "runId": "112", | |||||
| "code": "TASK-VIRTUAL-006" | |||||
| }, | |||||
| { | |||||
| "taskId": "88", | |||||
| "runId": "113", | |||||
| "code": "TASK-VIRTUAL-007" | |||||
| }, | |||||
| { | |||||
| "taskId": "89", | |||||
| "runId": "114", | |||||
| "code": "TASK-VIRTUAL-008" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,25 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "removedTestRunIds": [ | |||||
| 111, | |||||
| 112, | |||||
| 113, | |||||
| 114 | |||||
| ], | |||||
| "removedTestMemberUserId": "175", | |||||
| "keptTaskIds": [ | |||||
| 86, | |||||
| 87, | |||||
| 88, | |||||
| 89 | |||||
| ], | |||||
| "otherRunsUnchanged": true, | |||||
| "counts": { | |||||
| "ut_teaching_command_receipt": 149, | |||||
| "ut_teaching_event": 153, | |||||
| "ut_teaching_member": 4, | |||||
| "ut_teaching_run": 4, | |||||
| "ut_teaching_run_member": 4, | |||||
| "ut_teaching_step_run": 39 | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,93 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "tasks": [ | |||||
| { | |||||
| "id": "86", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "contentVersionId": "515", | |||||
| "runtime": { | |||||
| "startMode": "practice", | |||||
| "offline": true, | |||||
| "teacherEnabled": true, | |||||
| "teacherVoiceEnabled": true, | |||||
| "actionSoundEnabled": true, | |||||
| "showStepPanel": true, | |||||
| "showProgress": true, | |||||
| "allowReplay": true, | |||||
| "language": "zh-CN", | |||||
| "definitionSource": "SCRIPT", | |||||
| "scriptId": "bridge-pump-switch", | |||||
| "scriptVersion": "2" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "id": "87", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "contentVersionId": "530", | |||||
| "runtime": { | |||||
| "startMode": "practice", | |||||
| "offline": true, | |||||
| "teacherEnabled": true, | |||||
| "teacherVoiceEnabled": true, | |||||
| "actionSoundEnabled": true, | |||||
| "showStepPanel": true, | |||||
| "showProgress": true, | |||||
| "allowReplay": true, | |||||
| "language": "zh-CN", | |||||
| "definitionSource": "SCRIPT", | |||||
| "scriptId": "bridge-pump-substitute", | |||||
| "scriptVersion": "3" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "id": "88", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "contentVersionId": "531", | |||||
| "runtime": { | |||||
| "startMode": "practice", | |||||
| "offline": true, | |||||
| "teacherEnabled": true, | |||||
| "teacherVoiceEnabled": true, | |||||
| "actionSoundEnabled": true, | |||||
| "showStepPanel": true, | |||||
| "showProgress": true, | |||||
| "allowReplay": true, | |||||
| "language": "zh-CN", | |||||
| "definitionSource": "SCRIPT", | |||||
| "scriptId": "bridge-pump-replace", | |||||
| "scriptVersion": "3" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "id": "89", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "contentVersionId": "526", | |||||
| "runtime": { | |||||
| "startMode": "practice", | |||||
| "offline": true, | |||||
| "teacherEnabled": true, | |||||
| "teacherVoiceEnabled": true, | |||||
| "actionSoundEnabled": true, | |||||
| "showStepPanel": true, | |||||
| "showProgress": true, | |||||
| "allowReplay": true, | |||||
| "language": "zh-CN", | |||||
| "definitionSource": "SCRIPT", | |||||
| "scriptId": "bridge-balance-valve-swap", | |||||
| "scriptVersion": "3" | |||||
| } | |||||
| } | |||||
| ], | |||||
| "activeContentVersionIds": [ | |||||
| "515", | |||||
| "526", | |||||
| "530", | |||||
| "531" | |||||
| ], | |||||
| "activeRunIds": [ | |||||
| "101" | |||||
| ], | |||||
| "invalidTextVersionsActive": 0, | |||||
| "probeProjectRemoved": true, | |||||
| "temporaryUserRemoved": true | |||||
| } | |||||
| @@ -0,0 +1,17 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "after", | |||||
| "mode": "applied", | |||||
| "removedInvalidRunIds": [], | |||||
| "preservedTaskIds": [ | |||||
| 86, | |||||
| 87, | |||||
| 88, | |||||
| 89 | |||||
| ], | |||||
| "protectedRunsUnchanged": true, | |||||
| "file": "20260914_042_remove_bridge_text_runs.sql", | |||||
| "sha256": "dc99112fc5a1a4d255ace2070f78f1fa5d22727834940eb771eb8caed25eb956", | |||||
| "backupSha256": "d4682145e2c889a374e615fb0373d0044858bb371a033a72cd06f069ad05362d", | |||||
| "time": "2026-09-14T14:18:50.392498+00:00" | |||||
| } | |||||
| @@ -0,0 +1,16 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "after", | |||||
| "mode": "isolated-check", | |||||
| "invalidTaskIds": [], | |||||
| "invalidRunIds": [], | |||||
| "checks": [ | |||||
| "isolated first execution", | |||||
| "full rerun", | |||||
| "transaction rollback and retry" | |||||
| ], | |||||
| "file": "20260914_042_remove_bridge_text_runs.sql", | |||||
| "sha256": "dc99112fc5a1a4d255ace2070f78f1fa5d22727834940eb771eb8caed25eb956", | |||||
| "backupSha256": "d4682145e2c889a374e615fb0373d0044858bb371a033a72cd06f069ad05362d", | |||||
| "time": "2026-09-14T14:18:44.736410+00:00" | |||||
| } | |||||
| @@ -0,0 +1,20 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "before", | |||||
| "mode": "applied", | |||||
| "removedInvalidRunIds": [ | |||||
| 102, | |||||
| 103 | |||||
| ], | |||||
| "preservedTaskIds": [ | |||||
| 86, | |||||
| 87, | |||||
| 88, | |||||
| 89 | |||||
| ], | |||||
| "protectedRunsUnchanged": true, | |||||
| "file": "20260914_042_remove_bridge_text_runs.sql", | |||||
| "sha256": "dc99112fc5a1a4d255ace2070f78f1fa5d22727834940eb771eb8caed25eb956", | |||||
| "backupSha256": "8ee6a6757265a1d57f94898e1b71df2b3b79ecaadbb496d3217bd75a57243889", | |||||
| "time": "2026-09-14T14:15:32.943690+00:00" | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "before", | |||||
| "mode": "isolated-check", | |||||
| "invalidTaskIds": [ | |||||
| 87, | |||||
| 88 | |||||
| ], | |||||
| "invalidRunIds": [ | |||||
| 102, | |||||
| 103 | |||||
| ], | |||||
| "checks": [ | |||||
| "isolated first execution", | |||||
| "full rerun", | |||||
| "transaction rollback and retry" | |||||
| ], | |||||
| "file": "20260914_042_remove_bridge_text_runs.sql", | |||||
| "sha256": "dc99112fc5a1a4d255ace2070f78f1fa5d22727834940eb771eb8caed25eb956", | |||||
| "backupSha256": "8ee6a6757265a1d57f94898e1b71df2b3b79ecaadbb496d3217bd75a57243889", | |||||
| "time": "2026-09-14T14:14:37.792217+00:00" | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "legacy-v1-source", | |||||
| "mode": "applied", | |||||
| "removedInvalidRunIds": [], | |||||
| "removedInvalidVersionIds": [ | |||||
| 507, | |||||
| 508, | |||||
| 509, | |||||
| 510 | |||||
| ], | |||||
| "preservedTaskIds": [ | |||||
| 86, | |||||
| 87, | |||||
| 88, | |||||
| 89 | |||||
| ], | |||||
| "protectedRunsUnchanged": true, | |||||
| "file": "20260914_044_remove_legacy_bridge_v1_versions.sql", | |||||
| "sha256": "8ac8b12f9dd35905fb02e5d106e05330a7f3d62adcc16b61bbfe45f8c2971061", | |||||
| "backupSha256": "fc626af1b43911aad50190504e29b5b1b2694ca0c96e968bad2e776afdb5d139", | |||||
| "time": "2026-09-14T14:28:55.461264+00:00" | |||||
| } | |||||
| @@ -0,0 +1,16 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "legacy-v1-source", | |||||
| "mode": "isolated-check", | |||||
| "invalidTaskIds": [], | |||||
| "invalidRunIds": [], | |||||
| "checks": [ | |||||
| "isolated first execution", | |||||
| "full rerun", | |||||
| "transaction rollback and retry" | |||||
| ], | |||||
| "file": "20260914_044_remove_legacy_bridge_v1_versions.sql", | |||||
| "sha256": "8ac8b12f9dd35905fb02e5d106e05330a7f3d62adcc16b61bbfe45f8c2971061", | |||||
| "backupSha256": "fc626af1b43911aad50190504e29b5b1b2694ca0c96e968bad2e776afdb5d139", | |||||
| "time": "2026-09-14T14:28:49.412219+00:00" | |||||
| } | |||||
| @@ -0,0 +1,18 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "v1-history", | |||||
| "mode": "applied", | |||||
| "removedInvalidRunIds": [], | |||||
| "removedInvalidVersionIds": [], | |||||
| "preservedTaskIds": [ | |||||
| 86, | |||||
| 87, | |||||
| 88, | |||||
| 89 | |||||
| ], | |||||
| "protectedRunsUnchanged": true, | |||||
| "file": "20260914_043_remove_bridge_v1_text_versions.sql", | |||||
| "sha256": "c3c91a1357b1e630413592009835010534549f54b174adc59ab43e247d2c5c88", | |||||
| "backupSha256": "5faeb80539526b9577255487205a16d758dc9d0b9644309e7265e3e329d38c44", | |||||
| "time": "2026-09-14T14:27:26.804217+00:00" | |||||
| } | |||||
| @@ -0,0 +1,16 @@ | |||||
| { | |||||
| "pass": true, | |||||
| "phase": "v1-history", | |||||
| "mode": "isolated-check", | |||||
| "invalidTaskIds": [], | |||||
| "invalidRunIds": [], | |||||
| "checks": [ | |||||
| "isolated first execution", | |||||
| "full rerun", | |||||
| "transaction rollback and retry" | |||||
| ], | |||||
| "file": "20260914_043_remove_bridge_v1_text_versions.sql", | |||||
| "sha256": "c3c91a1357b1e630413592009835010534549f54b174adc59ab43e247d2c5c88", | |||||
| "backupSha256": "5faeb80539526b9577255487205a16d758dc9d0b9644309e7265e3e329d38c44", | |||||
| "time": "2026-09-14T14:27:16.874458+00:00" | |||||
| } | |||||
| @@ -0,0 +1,50 @@ | |||||
| [ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "id": "86", | |||||
| "projectId": "438", | |||||
| "versionId": "515", | |||||
| "name": "重型支援桥液压泵应急切换", | |||||
| "scriptId": "bridge-pump-switch", | |||||
| "scriptVersion": "2", | |||||
| "steps": 5, | |||||
| "previewUrl": "/teaching/virtual-training/preview/86", | |||||
| "presentation": "original-3d" | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "id": "87", | |||||
| "projectId": "439", | |||||
| "versionId": "530", | |||||
| "name": "重型支援桥液压泵应急替代", | |||||
| "scriptId": "bridge-pump-substitute", | |||||
| "scriptVersion": "3", | |||||
| "steps": 7, | |||||
| "previewUrl": "/teaching/virtual-training/preview/87", | |||||
| "presentation": "original-3d" | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "id": "88", | |||||
| "projectId": "440", | |||||
| "versionId": "531", | |||||
| "name": "重型支援桥前泵换件修复", | |||||
| "scriptId": "bridge-pump-replace", | |||||
| "scriptVersion": "3", | |||||
| "steps": 11, | |||||
| "previewUrl": "/teaching/virtual-training/preview/88", | |||||
| "presentation": "original-3d" | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "id": "89", | |||||
| "projectId": "441", | |||||
| "versionId": "526", | |||||
| "name": "重型支援桥平衡阀拆拼互换", | |||||
| "scriptId": "bridge-balance-valve-swap", | |||||
| "scriptVersion": "3", | |||||
| "steps": 16, | |||||
| "previewUrl": "/teaching/virtual-training/preview/89", | |||||
| "presentation": "original-3d" | |||||
| } | |||||
| ] | |||||
| @@ -0,0 +1,25 @@ | |||||
| { | |||||
| "userId": "175", | |||||
| "runs": [ | |||||
| { | |||||
| "taskId": "86", | |||||
| "runId": "111", | |||||
| "code": "TASK-VIRTUAL-005" | |||||
| }, | |||||
| { | |||||
| "taskId": "87", | |||||
| "runId": "112", | |||||
| "code": "TASK-VIRTUAL-006" | |||||
| }, | |||||
| { | |||||
| "taskId": "88", | |||||
| "runId": "113", | |||||
| "code": "TASK-VIRTUAL-007" | |||||
| }, | |||||
| { | |||||
| "taskId": "89", | |||||
| "runId": "114", | |||||
| "code": "TASK-VIRTUAL-008" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,95 @@ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "taskId": "86", | |||||
| "contentVersionId": "533", | |||||
| "clips": [ | |||||
| { | |||||
| "stepCode": "front-pump-step-01", | |||||
| "videoAssetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD" | |||||
| }, | |||||
| { | |||||
| "stepCode": "front-pump-step-02", | |||||
| "videoAssetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776" | |||||
| }, | |||||
| { | |||||
| "stepCode": "front-pump-step-03", | |||||
| "videoAssetCode": "DH_9A4629F90E614E60835441B5D0AAE86C" | |||||
| }, | |||||
| { | |||||
| "stepCode": "front-pump-step-04", | |||||
| "videoAssetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440" | |||||
| }, | |||||
| { | |||||
| "stepCode": "front-pump-step-05", | |||||
| "videoAssetCode": "DH_D85C34259BB34E0C966C5A79569DBF10" | |||||
| } | |||||
| ], | |||||
| "runsUnchanged": true, | |||||
| "assets": [ | |||||
| { | |||||
| "sourceProjectId": "438", | |||||
| "sourceVersionId": "533", | |||||
| "assetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD", | |||||
| "name": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/f14a6784aeb6457a16f86387b4e701d2.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 202274, | |||||
| "sha256": "d5c992479f2893d3efbe20921dab1f82fcc8ab4c4f512477fe4e0ea636e8fb7f", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/86/assets/533/DH_FF17FDE117E94B80BB30DF3E058821FD/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "438", | |||||
| "sourceVersionId": "533", | |||||
| "assetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776", | |||||
| "name": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/57c38aeae43b965404d45bb45824588e.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 172936, | |||||
| "sha256": "69ae89ec5e3d4a5ccd3efce23f33707ee4b3a236b398235ad133ee34f793a9ba", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/86/assets/533/DH_6E75DADE9D0649DCA16A2499D1EE8776/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "438", | |||||
| "sourceVersionId": "533", | |||||
| "assetCode": "DH_9A4629F90E614E60835441B5D0AAE86C", | |||||
| "name": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/1a7dfbfaefc3cb5859287a953de92d89.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 587353, | |||||
| "sha256": "c9ac26a8d58e52d7dc57c28b1c6f9134de780f65b29e1eef1e8351eb51753758", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/86/assets/533/DH_9A4629F90E614E60835441B5D0AAE86C/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "438", | |||||
| "sourceVersionId": "533", | |||||
| "assetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440", | |||||
| "name": "重型支援桥液压泵应急切换 · 4 重新联通取力器", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/024978af4939a2adbd3be834ef62e29b.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 162678, | |||||
| "sha256": "383d1fe0a6a80112c7b8868ae1edfdbeadbc86c13ce6feec1a9721ba3d9881fe", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/86/assets/533/DH_DA42FE5C995F4C67A559E6E94DB1C440/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "438", | |||||
| "sourceVersionId": "533", | |||||
| "assetCode": "DH_D85C34259BB34E0C966C5A79569DBF10", | |||||
| "name": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/2c20f201cb7c9663b751e485990de355.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 285991, | |||||
| "sha256": "2d53c0bef4d8aa71d8b8535de676d2d8485929de06534ce3aab677805bc8eef3", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/86/assets/533/DH_D85C34259BB34E0C966C5A79569DBF10/content" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,129 @@ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "taskId": "87", | |||||
| "contentVersionId": "534", | |||||
| "clips": [ | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "videoAssetCode": "DH_5AEA5274E6664D43B8C53F55859D5717" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "videoAssetCode": "DH_B9F2CBFE36274528825899153DB98195" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "videoAssetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "videoAssetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "videoAssetCode": "DH_774F7400E0B54F4696EBDAD800A289C3" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "videoAssetCode": "DH_64D9ECF315DA41568D936CFEBF28E403" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "videoAssetCode": "DH_356ADFCC874448D28ADB2DF8067582E8" | |||||
| } | |||||
| ], | |||||
| "runsUnchanged": true, | |||||
| "assets": [ | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_5AEA5274E6664D43B8C53F55859D5717", | |||||
| "name": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/75748c295407bd0768e760d4593dbdee.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 554961, | |||||
| "sha256": "d82bb8354acfca494e2ff515e5ef79887fb9d1f929a62779119d136857944ba6", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_5AEA5274E6664D43B8C53F55859D5717/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_B9F2CBFE36274528825899153DB98195", | |||||
| "name": "重型支援桥液压泵应急替代 · 2 连接两车液压软管", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/d4c77791615f95ed57751597446e35c5.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 400318, | |||||
| "sha256": "8791296620dbb4cc823bab5f24af07b8b48d510292b4baf966598b0b0351e4f9", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_B9F2CBFE36274528825899153DB98195/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E", | |||||
| "name": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/0fbe417a88b14dc657256c924e8ba532.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 224021, | |||||
| "sha256": "f78a59ebddcd35e937ce42910aed82fcaf9b49c07be4e1d460fc701e666d3d29", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_983218ACA84345B5B032A5DFA8F08E4E/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1", | |||||
| "name": "重型支援桥液压泵应急替代 · 4 打开互救作业开关", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/0e886b5158602172fb149cb7bb4c07cc.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 332829, | |||||
| "sha256": "a784a79790a96f486eb6be917fa879db7071813a31f461f5d95d31c754ce3f46", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_AC0F121CD04B44B5A373BE82D5083AE1/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_774F7400E0B54F4696EBDAD800A289C3", | |||||
| "name": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/3a57549a9c62a2faa19f4a9af7740193.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 241632, | |||||
| "sha256": "db5c8f4a531e958712d309f25f9c51a145f717e4687893fcc41b65e2c8242175", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_774F7400E0B54F4696EBDAD800A289C3/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_64D9ECF315DA41568D936CFEBF28E403", | |||||
| "name": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/34657e7ed592e7d7a987f90e0f0188ba.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 401336, | |||||
| "sha256": "05ffeff41d2cf4162b6e8181d4d002ba3f12531589a25d31bac76c69f5dea6bb", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_64D9ECF315DA41568D936CFEBF28E403/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "439", | |||||
| "sourceVersionId": "534", | |||||
| "assetCode": "DH_356ADFCC874448D28ADB2DF8067582E8", | |||||
| "name": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/715a4ac02abad5bf00d7a0a1bd0edb15.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 762615, | |||||
| "sha256": "7b85bbf9c21adc74b56a26f6d92db1448f9f565101da6feba7ca9ad4cdd137f7", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/87/assets/534/DH_356ADFCC874448D28ADB2DF8067582E8/content" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,197 @@ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "taskId": "88", | |||||
| "contentVersionId": "535", | |||||
| "clips": [ | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "videoAssetCode": "DH_1CE71ECA76194F06B098A012B360BB06" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "videoAssetCode": "DH_34129B61FA1F4E628AF295E3EF714364" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "videoAssetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "videoAssetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "videoAssetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "videoAssetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "videoAssetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-8", | |||||
| "videoAssetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-9", | |||||
| "videoAssetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-10", | |||||
| "videoAssetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-11", | |||||
| "videoAssetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E" | |||||
| } | |||||
| ], | |||||
| "runsUnchanged": true, | |||||
| "assets": [ | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_1CE71ECA76194F06B098A012B360BB06", | |||||
| "name": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/d8b3e011ed5bc1f41090d77dda7a8e72.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 448340, | |||||
| "sha256": "22c92b853a9460ee67c7ae80d5bc203ff8aba07b32e148659b13f0637fb2c372", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_1CE71ECA76194F06B098A012B360BB06/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_34129B61FA1F4E628AF295E3EF714364", | |||||
| "name": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/777c7c6f21c1108b1cf6a3e4681a7728.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 266042, | |||||
| "sha256": "eab74c71b3be41e3c7563a4a36c75e3f61e5ad4a5ca032eab051844ca10943fe", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_34129B61FA1F4E628AF295E3EF714364/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6", | |||||
| "name": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/d974de975087ad6848689f4de8bb8597.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 474207, | |||||
| "sha256": "63765c1da028750da4063a9d27c2211e592325165213d667c6592890cde982f0", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_533EAE94D45D49A2BECD7E24E48835E6/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E", | |||||
| "name": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/b8fee91715ad1fa277e03a460825ec01.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 275821, | |||||
| "sha256": "e5b743ebe6fad8f7b614b11aea9d611fda877b02d9c31a8d67cabd41249327fe", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_787B4C212CF644AE9A3D8D49DEDCB65E/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726", | |||||
| "name": "重型支援桥前泵换件修复 · 5 取下旧前泵", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/c3ef57b3d671acb6cfb0e7e039e86652.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 109215, | |||||
| "sha256": "25ce8b12c5e17a2029d04a20fd53d270eed3904f50a4d7ea63bc83e33e18bd51", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_5672FD367E8F41A5A026E3C68E8C8726/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401", | |||||
| "name": "重型支援桥前泵换件修复 · 6 修裁牛皮纸", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/7cc90bc260c6e4be30daaea3d9dfc446.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 246468, | |||||
| "sha256": "db8bae8bfbde4f6e6dacb645eb2652f355f3b754a73012aaec3afee0e62ab9e8", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_C0E73EC20FD44C608A795A03DE4F7401/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28", | |||||
| "name": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/37e9c868094f42d56db8540f01317bf2.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 203299, | |||||
| "sha256": "56ece26b2bab4af67bd59f88a3f4d1b08bfcdd083f423300d8d88f4ff4cae84b", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_17FAC41643804A22A8B71A2FF8DCBC28/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6", | |||||
| "name": "重型支援桥前泵换件修复 · 8 安装新液压泵", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/8f14a7af1d794cef6f9858e8244e75a5.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 191600, | |||||
| "sha256": "1b8f68d21c2300b2bba451f5e22cbaafd6f2dcd0bf0d213c05a4caad53ce0ef0", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_2284ABD91F544E2EB7799E9FA1C4BCF6/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172", | |||||
| "name": "重型支援桥前泵换件修复 · 9 向新泵加注液压油", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/363657dd4bc2b0e2809cd52faca8458c.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 443419, | |||||
| "sha256": "095363c1f6be506fa3377330abbf88050dc9ffdd8dac07eb2c5476ea4ec32abe", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_BF468C49DDCB462E8E2C75CF8C6BD172/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA", | |||||
| "name": "重型支援桥前泵换件修复 · 10 恢复进出油管连接", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/afe798b60bdea1f35f5b09d104205bad.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 219713, | |||||
| "sha256": "eba4316082aa74841fe07f82c644484630efac95228a9b919b1d5348f76d06d8", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_88908FEBE6054EE99087F8653A8C5FAA/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "440", | |||||
| "sourceVersionId": "535", | |||||
| "assetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E", | |||||
| "name": "重型支援桥前泵换件修复 · 11 启动设备试验", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/56a8a5cabf17265e7e64243e25e20dc5.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 246099, | |||||
| "sha256": "4fed628e2847089de8882bb29da648f5aa3c00acf696123c11e5e6c3d54a48bb", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/88/assets/535/DH_4D873387CF324AAF9C6D3BE1A72C247E/content" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,282 @@ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "taskId": "89", | |||||
| "contentVersionId": "536", | |||||
| "clips": [ | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "videoAssetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "videoAssetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "videoAssetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "videoAssetCode": "DH_60D40306A9E74E96ADD7641932934BE4" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "videoAssetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "videoAssetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "videoAssetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-8", | |||||
| "videoAssetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-9", | |||||
| "videoAssetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-10", | |||||
| "videoAssetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-11", | |||||
| "videoAssetCode": "DH_F6427532AF5F40348CEB154F031F2AED" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-12", | |||||
| "videoAssetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-13", | |||||
| "videoAssetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-14", | |||||
| "videoAssetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-15", | |||||
| "videoAssetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF" | |||||
| }, | |||||
| { | |||||
| "stepCode": "BRIDGE-STEP-16", | |||||
| "videoAssetCode": "DH_D525E35EDA12402DA13302C2B3874CC3" | |||||
| } | |||||
| ], | |||||
| "runsUnchanged": true, | |||||
| "assets": [ | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/bbb7cb4c0937594e06facdeb4265bdfb.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 380363, | |||||
| "sha256": "2e71eb4894d380917abb95245d3299e7c0b345c76a0a1df92610ba97c9d95e91", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_76F80444AA9C4C3183A0EEDF6E655C25/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/2b3185dc7f0d5cb857c3682ab7773aa1.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 286904, | |||||
| "sha256": "a1abca193097f47595f32b71a02f4101a02005d0ff67cd4932fa728403d1235b", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_EAF5F0A89D454E6FBAFB061C93D2F760/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/a9d362f15a10a6ec05d43bfc37dfc142.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 386424, | |||||
| "sha256": "46f07ce2308478ba60b58d4f6ec600773632193ffaa83f42ed52c71b660d4da5", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_981034D69E3047C6B9D1DAE9BBF4F7D4/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_60D40306A9E74E96ADD7641932934BE4", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/7315f5118bd573be864686aa786cf458.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 348426, | |||||
| "sha256": "7fdab9117f713bd3e01aa1d956bfdbc4601df9f5b166b4a05488c1181ba12211", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_60D40306A9E74E96ADD7641932934BE4/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/c7e7402995b868a26a11f04255624ac9.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 242429, | |||||
| "sha256": "5a2649d18c9cef179863c09cf8179668b34f1d253d1b340b3775509bdd057433", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_A6EFEC7D339E4BA8994C525CA3709E2E/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/d56936153f2455950a527c7b1b193cc1.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 299444, | |||||
| "sha256": "8c3679991ac10e63383a40c2deffb1a9fdb5b79cbb692db64fda410e2b13b923", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_D9E1BAFBD89D48019B9445B2A5752E68/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/84a9178a525514f108f353c518765957.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 241834, | |||||
| "sha256": "d8e749aee075d99707af8b1a6b9a6700f7b0349c19e9bbd5957f55f43e9c50af", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_E83DDAB19F774A418C82EBA7E8EDCF8A/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/323c01c7d4438be382e33b72c1acfdef.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 208428, | |||||
| "sha256": "3d3c67dfa76d776bcafee0e35412de7c44190b74776f93d426e6d9947fd7bb2c", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_4FE31068F3EB410BAC72E19F1D1BAF49/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/f76860dcb1df69933366b58a0a4acf49.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 241840, | |||||
| "sha256": "bd890674565a670e7994a60be84847b692a8b4820995c3063a497d8cc7eddf7e", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_D0A3CAC5278C4A57AC9BEF13DA2690BC/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/679a321b725c5069ff3c279bdb5d4e74.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 503224, | |||||
| "sha256": "ed2ee749404179d67831c8f0c46cae21643c97700f431b5cb089f99644fb7d27", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_0F40DAF3E28F4FA088EA943D9470CAA7/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_F6427532AF5F40348CEB154F031F2AED", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/ff6024de51727d348cfb8d889bea860e.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 689467, | |||||
| "sha256": "e90845dc69d890c341d682f5d36b8880e83fe26bdad34fd8573ee0560d36d287", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_F6427532AF5F40348CEB154F031F2AED/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/bd49e1bbbbd6ad7f351cf2c6912934ff.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 360250, | |||||
| "sha256": "133f1f65d5d88040d4ce758fdb7c0512c44d32f2affc5b0ce09f402f9fd687a5", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_F601DB08C8D44934AD3A1B1582E804DB/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/f6fdebd35ca690c3d05b74f55bd65605.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 242849, | |||||
| "sha256": "7cf538b8754ccb0ada36395919cb9653d804717ec6a4d339dc8c62572697f27a", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_B1BBA42CE5F346228B6B39A51F190CB3/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/f7cce5ab61c4458386a86729a97637a9.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 318525, | |||||
| "sha256": "456843aa826f489cde689a55d4ffb3e3759b7f7464cc1fbdde6d7d7d216ef31f", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_2BCD762C693242FF8DA420BD9A5D4DF9/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/c65892e63c10c2d1283cfab5c2e83481.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 1093064, | |||||
| "sha256": "2a47835ce52868b09ecec6fe380098b412d29a8c2806519a54d15396e3473b57", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_5F8309BF74344C568C2C9EEFDD9E74BF/content" | |||||
| }, | |||||
| { | |||||
| "sourceProjectId": "441", | |||||
| "sourceVersionId": "536", | |||||
| "assetCode": "DH_D525E35EDA12402DA13302C2B3874CC3", | |||||
| "name": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓", | |||||
| "type": "VIDEO", | |||||
| "contentUri": "fsvc://unreal-tran/video/2026/09/14/f13bb21ae4e501ce3546122f2412f2aa.mp4", | |||||
| "mimeType": "video/mp4", | |||||
| "sizeBytes": 216175, | |||||
| "sha256": "2e22f597ff2808e1b9e600c46c319f82cd91e2be0063bfc817c94d672c786213", | |||||
| "downloadable": true, | |||||
| "downloadUrl": "/api/tran/v1/teaching/assignments/89/assets/536/DH_D525E35EDA12402DA13302C2B3874CC3/content" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,671 @@ | |||||
| { | |||||
| "avatarId": "55", | |||||
| "avatarName": "教员1", | |||||
| "voiceId": "49", | |||||
| "voiceName": "温和男声", | |||||
| "clips": [ | |||||
| { | |||||
| "key": "bridge-pump-switch:2:front-pump-step-01", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "projectId": "438", | |||||
| "assignmentId": "86", | |||||
| "stepCode": "front-pump-step-01", | |||||
| "number": 1, | |||||
| "title": "重型支援桥液压泵应急切换 · 1 根据故障现象确定是哪一个液压泵发生故障", | |||||
| "text": "第1步,确定故障液压泵。根据故障现象确定发生故障的液压泵。", | |||||
| "jobId": "4", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "53", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-005-step-01.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-switch:2:front-pump-step-02", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "projectId": "438", | |||||
| "assignmentId": "86", | |||||
| "stepCode": "front-pump-step-02", | |||||
| "number": 2, | |||||
| "title": "重型支援桥液压泵应急切换 · 2 断开架桥车取力器", | |||||
| "text": "第2步,断开架桥车取力器。将架桥车取力器断开。", | |||||
| "jobId": "5", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "54", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-005-step-02.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-switch:2:front-pump-step-03", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "projectId": "438", | |||||
| "assignmentId": "86", | |||||
| "stepCode": "front-pump-step-03", | |||||
| "number": 3, | |||||
| "title": "重型支援桥液压泵应急切换 · 3 将架桥车备胎斜上方链接两个红色滤油器的球阀打开", | |||||
| "text": "第3步,打开互救球阀。打开备胎上方两个红色滤油器之间的连通球阀,手柄由垂直管道转为平行管道。", | |||||
| "jobId": "6", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "55", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-005-step-03.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-switch:2:front-pump-step-04", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "projectId": "438", | |||||
| "assignmentId": "86", | |||||
| "stepCode": "front-pump-step-04", | |||||
| "number": 4, | |||||
| "title": "重型支援桥液压泵应急切换 · 4 重新联通取力器", | |||||
| "text": "第4步,重新接通取力器。将架桥车取力器重新接通。", | |||||
| "jobId": "7", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "56", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-005-step-04.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-switch:2:front-pump-step-05", | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "projectId": "438", | |||||
| "assignmentId": "86", | |||||
| "stepCode": "front-pump-step-05", | |||||
| "number": 5, | |||||
| "title": "重型支援桥液压泵应急切换 · 5 打开辅助控制盒内的“互救”开关", | |||||
| "text": "第5步,打开辅助控制盒互救开关。打开辅助控制盒盖,再打开互救开关,进入单泵作业状态。", | |||||
| "jobId": "8", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "57", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-005-step-05.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-1", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "number": 1, | |||||
| "title": "重型支援桥液压泵应急替代 · 1 保持架桥车运行并断开取力器", | |||||
| "text": "第1步,保持架桥车运行并断开取力器。保持架桥车发动机运转,确保架桥车取力器处于断开状态。", | |||||
| "jobId": "9", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "58", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-01.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-2", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "number": 2, | |||||
| "title": "重型支援桥液压泵应急替代 · 2 连接两车液压软管", | |||||
| "text": "第2步,连接两车液压软管。连接支援车与架桥车液压软管。架桥车快接接头位于液压油箱右侧;支援车快接接头位于驾驶室外右下方。", | |||||
| "jobId": "10", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "59", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-02.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-3", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "number": 3, | |||||
| "title": "重型支援桥液压泵应急替代 · 3 打开支援车回油截止阀", | |||||
| "text": "第3步,打开支援车回油截止阀。打开支援车液压油箱快接接头处的回油截止阀。", | |||||
| "jobId": "11", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "60", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-03.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-4", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "number": 4, | |||||
| "title": "重型支援桥液压泵应急替代 · 4 打开互救作业开关", | |||||
| "text": "第4步,打开互救作业开关。打开辅助控制盒上的“互救作业”开关。", | |||||
| "jobId": "12", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "61", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-04.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-5", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "number": 5, | |||||
| "title": "重型支援桥液压泵应急替代 · 5 打开滤油器出口连通球阀", | |||||
| "text": "第5步,打开滤油器出口连通球阀。打开两个输油滤油器出口处的连通球阀。", | |||||
| "jobId": "13", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "62", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-05.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-6", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "number": 6, | |||||
| "title": "重型支援桥液压泵应急替代 · 6 接通支援车液压取力器", | |||||
| "text": "第6步,接通支援车液压取力器。接通支援车液压系统取力器,向架桥车供油。", | |||||
| "jobId": "14", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "63", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-06.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-substitute:3:BRIDGE-STEP-7", | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "projectId": "439", | |||||
| "assignmentId": "87", | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "number": 7, | |||||
| "title": "重型支援桥液压泵应急替代 · 7 按正常步骤操作架桥车", | |||||
| "text": "第7步,按正常步骤操作架桥车。原图只概括“按正常操作步骤操作架桥车”,没有展开后续作业。该项为原稿概括项,本预演不代表后续正常作业已经完成。", | |||||
| "jobId": "15", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "64", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-006-step-07.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-1", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "number": 1, | |||||
| "title": "重型支援桥前泵换件修复 · 1 停机并初裁牛皮纸", | |||||
| "text": "第1步,停机并初裁牛皮纸。架桥车熄火;按液压泵与取力器结合面形状初步裁剪牛皮纸。", | |||||
| "jobId": "16", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "65", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-01.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-2", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "number": 2, | |||||
| "title": "重型支援桥前泵换件修复 · 2 关闭液压油箱出油口一号球阀", | |||||
| "text": "第2步,关闭液压油箱出油口一号球阀。将一号球阀手柄从平行管道转到垂直管道。", | |||||
| "jobId": "17", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "66", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-02.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-3", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "number": 3, | |||||
| "title": "重型支援桥前泵换件修复 · 3 拆开并包扎进出油管", | |||||
| "text": "第3步,拆开并包扎进出油管。用大活动扳手拆开液压泵进、出油管接头,用塑料袋包扎管口。", | |||||
| "jobId": "18", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "67", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-03.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-4", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "number": 4, | |||||
| "title": "重型支援桥前泵换件修复 · 4 拆下四个安装螺栓", | |||||
| "text": "第4步,拆下四个安装螺栓。用开口扳手拆下液压泵与取力器之间的四个安装螺栓。", | |||||
| "jobId": "19", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "68", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-04.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-5", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "number": 5, | |||||
| "title": "重型支援桥前泵换件修复 · 5 取下旧前泵", | |||||
| "text": "第5步,取下旧前泵。取下原前泵。", | |||||
| "jobId": "20", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "69", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-05.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-6", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "number": 6, | |||||
| "title": "重型支援桥前泵换件修复 · 6 修裁牛皮纸", | |||||
| "text": "第6步,修裁牛皮纸。进一步裁剪牛皮纸,使其与液压泵安装面及取力器结合面吻合。", | |||||
| "jobId": "21", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "70", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-06.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-7", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "number": 7, | |||||
| "title": "重型支援桥前泵换件修复 · 7 放置牛皮纸垫", | |||||
| "text": "第7步,放置牛皮纸垫。将裁好的牛皮纸放在取力器接口处。", | |||||
| "jobId": "22", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "71", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-07.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-8", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-8", | |||||
| "number": 8, | |||||
| "title": "重型支援桥前泵换件修复 · 8 安装新液压泵", | |||||
| "text": "第8步,安装新液压泵。安装新的液压泵。原稿没有给出拧紧力矩。", | |||||
| "jobId": "23", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "72", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-08.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-9", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-9", | |||||
| "number": 9, | |||||
| "title": "重型支援桥前泵换件修复 · 9 向新泵加注液压油", | |||||
| "text": "第9步,向新泵加注液压油。打开新液压泵加油口,加注液压油。原稿没有给出定量值。", | |||||
| "jobId": "24", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "73", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-09.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-10", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-10", | |||||
| "number": 10, | |||||
| "title": "重型支援桥前泵换件修复 · 10 恢复进出油管连接", | |||||
| "text": "第10步,恢复进出油管连接。用大活动扳手连接并拧紧液压泵进、出油管。", | |||||
| "jobId": "25", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "74", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-10.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-pump-replace:3:BRIDGE-STEP-11", | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "projectId": "440", | |||||
| "assignmentId": "88", | |||||
| "stepCode": "BRIDGE-STEP-11", | |||||
| "number": 11, | |||||
| "title": "重型支援桥前泵换件修复 · 11 启动设备试验", | |||||
| "text": "第11步,启动设备试验。启动设备进行试验。原稿没有展开具体试验项目和判定数值。", | |||||
| "jobId": "26", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "75", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-007-step-11.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-1", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-1", | |||||
| "number": 1, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 1 清洗小腔平衡阀", | |||||
| "text": "第1步,清洗小腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。", | |||||
| "jobId": "27", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "76", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-01.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-2", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-2", | |||||
| "number": 2, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 2 拆开小腔控制油口管路", | |||||
| "text": "第2步,拆开小腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。", | |||||
| "jobId": "28", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "77", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-02.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-3", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-3", | |||||
| "number": 3, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 3 拆下小腔平衡阀", | |||||
| "text": "第3步,拆下小腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。", | |||||
| "jobId": "29", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "78", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-03.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-4", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-4", | |||||
| "number": 4, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 4 封堵小腔油口", | |||||
| "text": "第4步,封堵小腔油口。用两个油堵封住两个油口,擦净阀座结合面。", | |||||
| "jobId": "30", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "79", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-04.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-5", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-5", | |||||
| "number": 5, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 5 清洗大腔平衡阀", | |||||
| "text": "第5步,清洗大腔平衡阀。用清洗剂清洗平衡阀和管接头,并用抹布擦净。", | |||||
| "jobId": "31", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "80", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-05.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-6", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-6", | |||||
| "number": 6, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 6 拆开大腔控制油口管路", | |||||
| "text": "第6步,拆开大腔控制油口管路。用十九号开口扳手拆开控制油口管路,用塑料袋包扎管口。", | |||||
| "jobId": "32", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "81", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-06.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-7", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-7", | |||||
| "number": 7, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 7 拆下大腔平衡阀", | |||||
| "text": "第7步,拆下大腔平衡阀。用八号内六角扳手拆下安装螺栓,取下平衡阀。", | |||||
| "jobId": "33", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "82", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-07.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-8", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-8", | |||||
| "number": 8, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 8 封堵大腔油口", | |||||
| "text": "第8步,封堵大腔油口。用两个油堵封住两个油口,擦净阀座结合面。", | |||||
| "jobId": "34", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "83", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-08.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-9", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-9", | |||||
| "number": 9, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 9 准备安装大腔平衡阀", | |||||
| "text": "第9步,准备安装大腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。", | |||||
| "jobId": "35", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "84", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-09.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-10", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-10", | |||||
| "number": 10, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 10 安装大腔平衡阀", | |||||
| "text": "第10步,安装大腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。", | |||||
| "jobId": "36", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "85", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-10.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-11", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-11", | |||||
| "number": 11, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 11 核对大腔控制油口管路连接", | |||||
| "text": "第11步,核对大腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。", | |||||
| "jobId": "37", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "86", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-11.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-12", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-12", | |||||
| "number": 12, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 12 紧固大腔阀体连接螺栓", | |||||
| "text": "第12步,紧固大腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。", | |||||
| "jobId": "38", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "87", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-12.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-13", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-13", | |||||
| "number": 13, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 13 准备安装小腔平衡阀", | |||||
| "text": "第13步,准备安装小腔平衡阀。擦净平衡阀及阀座结合面,取下两个油堵。", | |||||
| "jobId": "39", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "88", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-13.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-14", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-14", | |||||
| "number": 14, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 14 安装小腔平衡阀", | |||||
| "text": "第14步,安装小腔平衡阀。将平衡阀放置于阀座上,用八号内六角扳手安装四个安装螺栓。", | |||||
| "jobId": "40", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "89", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-14.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-15", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-15", | |||||
| "number": 15, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 15 核对小腔控制油口管路连接", | |||||
| "text": "第15步,核对小腔控制油口管路连接。原稿先写“拆下包扎袋,连接并拧紧管路”,随后又出现“用十九号开口扳手拆开管路并包扎”的相反描述。请记录采用的处理方式及依据,随训练记录提交教员核对;系统不自动判定该项操作正确。", | |||||
| "jobId": "41", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "90", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-15.mp4" | |||||
| }, | |||||
| { | |||||
| "key": "bridge-balance-valve-swap:3:BRIDGE-STEP-16", | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "projectId": "441", | |||||
| "assignmentId": "89", | |||||
| "stepCode": "BRIDGE-STEP-16", | |||||
| "number": 16, | |||||
| "title": "重型支援桥平衡阀拆拼互换 · 16 紧固小腔阀体连接螺栓", | |||||
| "text": "第16步,紧固小腔阀体连接螺栓。用内六角扳手拧紧四个阀体连接螺栓。", | |||||
| "jobId": "42", | |||||
| "appId": "AP_238179E0A10F97927EA49FA3", | |||||
| "status": "SUCCEEDED", | |||||
| "stage": "成片已保存", | |||||
| "videoId": "91", | |||||
| "errorMessage": "", | |||||
| "previewFile": "reports/bridge-digital-video-20260914/TASK-VIRTUAL-008-step-16.mp4" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| [ | |||||
| { | |||||
| "url": "http://127.0.0.1:6100/actuator/health", | |||||
| "status": 200 | |||||
| }, | |||||
| { | |||||
| "url": "http://127.0.0.1:6100/api/auth/ping", | |||||
| "status": 200 | |||||
| }, | |||||
| { | |||||
| "url": "http://127.0.0.1:6100/api/tran/ping", | |||||
| "status": 200 | |||||
| }, | |||||
| { | |||||
| "url": "http://127.0.0.1:6180/", | |||||
| "status": 200 | |||||
| }, | |||||
| { | |||||
| "url": "http://192.168.31.168:6180/", | |||||
| "status": 200 | |||||
| } | |||||
| ] | |||||
| @@ -0,0 +1,14 @@ | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "results": [ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "firstAndSecondVideo": true, | |||||
| "audioToggle": true, | |||||
| "stopOnStepChange": true, | |||||
| "errorFallback": true, | |||||
| "reloadAndClose": true | |||||
| } | |||||
| ], | |||||
| "errors": [] | |||||
| } | |||||
| @@ -0,0 +1,38 @@ | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "results": [ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "firstAndSecondVideo": true, | |||||
| "audioToggle": true, | |||||
| "stopOnStepChange": true, | |||||
| "errorFallback": true, | |||||
| "reloadAndClose": true | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "firstAndSecondVideo": true, | |||||
| "audioToggle": true, | |||||
| "stopOnStepChange": true, | |||||
| "errorFallback": true, | |||||
| "reloadAndClose": true | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "firstAndSecondVideo": true, | |||||
| "audioToggle": true, | |||||
| "stopOnStepChange": true, | |||||
| "errorFallback": true, | |||||
| "reloadAndClose": true | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "firstAndSecondVideo": true, | |||||
| "audioToggle": true, | |||||
| "stopOnStepChange": true, | |||||
| "errorFallback": true, | |||||
| "reloadAndClose": true | |||||
| } | |||||
| ], | |||||
| "errors": [] | |||||
| } | |||||
| @@ -0,0 +1,31 @@ | |||||
| { | |||||
| "runId": "101", | |||||
| "results": [ | |||||
| { | |||||
| "code": "DH_FF17FDE117E94B80BB30DF3E058821FD", | |||||
| "status": 200, | |||||
| "size": 202274 | |||||
| }, | |||||
| { | |||||
| "code": "DH_6E75DADE9D0649DCA16A2499D1EE8776", | |||||
| "status": 200, | |||||
| "size": 172936 | |||||
| }, | |||||
| { | |||||
| "code": "DH_9A4629F90E614E60835441B5D0AAE86C", | |||||
| "status": 200, | |||||
| "size": 587353 | |||||
| }, | |||||
| { | |||||
| "code": "DH_DA42FE5C995F4C67A559E6E94DB1C440", | |||||
| "status": 200, | |||||
| "size": 162678 | |||||
| }, | |||||
| { | |||||
| "code": "DH_D85C34259BB34E0C966C5A79569DBF10", | |||||
| "status": 200, | |||||
| "size": 285991 | |||||
| } | |||||
| ], | |||||
| "staleVersionStatus": 409 | |||||
| } | |||||
| @@ -0,0 +1,320 @@ | |||||
| { | |||||
| "videos": 39, | |||||
| "duration": 263.9451619999999, | |||||
| "size": 13512813, | |||||
| "preservedWavs": 42, | |||||
| "verified": [ | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "step": 1, | |||||
| "assetCode": "DH_FF17FDE117E94B80BB30DF3E058821FD", | |||||
| "sha256": "d5c992479f2893d3efbe20921dab1f82fcc8ab4c4f512477fe4e0ea636e8fb7f", | |||||
| "duration": 5.08, | |||||
| "size": 202274 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "step": 2, | |||||
| "assetCode": "DH_6E75DADE9D0649DCA16A2499D1EE8776", | |||||
| "sha256": "69ae89ec5e3d4a5ccd3efce23f33707ee4b3a236b398235ad133ee34f793a9ba", | |||||
| "duration": 4.16, | |||||
| "size": 172936 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "step": 3, | |||||
| "assetCode": "DH_9A4629F90E614E60835441B5D0AAE86C", | |||||
| "sha256": "c9ac26a8d58e52d7dc57c28b1c6f9134de780f65b29e1eef1e8351eb51753758", | |||||
| "duration": 8.48, | |||||
| "size": 587353 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "step": 4, | |||||
| "assetCode": "DH_DA42FE5C995F4C67A559E6E94DB1C440", | |||||
| "sha256": "383d1fe0a6a80112c7b8868ae1edfdbeadbc86c13ce6feec1a9721ba3d9881fe", | |||||
| "duration": 4.24, | |||||
| "size": 162678 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-005", | |||||
| "step": 5, | |||||
| "assetCode": "DH_D85C34259BB34E0C966C5A79569DBF10", | |||||
| "sha256": "2d53c0bef4d8aa71d8b8535de676d2d8485929de06534ce3aab677805bc8eef3", | |||||
| "duration": 6.92, | |||||
| "size": 285991 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 1, | |||||
| "assetCode": "DH_5AEA5274E6664D43B8C53F55859D5717", | |||||
| "sha256": "d82bb8354acfca494e2ff515e5ef79887fb9d1f929a62779119d136857944ba6", | |||||
| "duration": 7.92, | |||||
| "size": 554961 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 2, | |||||
| "assetCode": "DH_B9F2CBFE36274528825899153DB98195", | |||||
| "sha256": "8791296620dbb4cc823bab5f24af07b8b48d510292b4baf966598b0b0351e4f9", | |||||
| "duration": 10, | |||||
| "size": 400318 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 3, | |||||
| "assetCode": "DH_983218ACA84345B5B032A5DFA8F08E4E", | |||||
| "sha256": "f78a59ebddcd35e937ce42910aed82fcaf9b49c07be4e1d460fc701e666d3d29", | |||||
| "duration": 5.72, | |||||
| "size": 224021 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 4, | |||||
| "assetCode": "DH_AC0F121CD04B44B5A373BE82D5083AE1", | |||||
| "sha256": "a784a79790a96f486eb6be917fa879db7071813a31f461f5d95d31c754ce3f46", | |||||
| "duration": 5.08, | |||||
| "size": 332829 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 5, | |||||
| "assetCode": "DH_774F7400E0B54F4696EBDAD800A289C3", | |||||
| "sha256": "db5c8f4a531e958712d309f25f9c51a145f717e4687893fcc41b65e2c8242175", | |||||
| "duration": 5.927333, | |||||
| "size": 241632 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 6, | |||||
| "assetCode": "DH_64D9ECF315DA41568D936CFEBF28E403", | |||||
| "sha256": "05ffeff41d2cf4162b6e8181d4d002ba3f12531589a25d31bac76c69f5dea6bb", | |||||
| "duration": 6.04, | |||||
| "size": 401336 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-006", | |||||
| "step": 7, | |||||
| "assetCode": "DH_356ADFCC874448D28ADB2DF8067582E8", | |||||
| "sha256": "7b85bbf9c21adc74b56a26f6d92db1448f9f565101da6feba7ca9ad4cdd137f7", | |||||
| "duration": 10.88, | |||||
| "size": 762615 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 1, | |||||
| "assetCode": "DH_1CE71ECA76194F06B098A012B360BB06", | |||||
| "sha256": "22c92b853a9460ee67c7ae80d5bc203ff8aba07b32e148659b13f0637fb2c372", | |||||
| "duration": 6.68, | |||||
| "size": 448340 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 2, | |||||
| "assetCode": "DH_34129B61FA1F4E628AF295E3EF714364", | |||||
| "sha256": "eab74c71b3be41e3c7563a4a36c75e3f61e5ad4a5ca032eab051844ca10943fe", | |||||
| "duration": 6.615333, | |||||
| "size": 266042 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 3, | |||||
| "assetCode": "DH_533EAE94D45D49A2BECD7E24E48835E6", | |||||
| "sha256": "63765c1da028750da4063a9d27c2211e592325165213d667c6592890cde982f0", | |||||
| "duration": 7.04, | |||||
| "size": 474207 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 4, | |||||
| "assetCode": "DH_787B4C212CF644AE9A3D8D49DEDCB65E", | |||||
| "sha256": "e5b743ebe6fad8f7b614b11aea9d611fda877b02d9c31a8d67cabd41249327fe", | |||||
| "duration": 6.661833, | |||||
| "size": 275821 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 5, | |||||
| "assetCode": "DH_5672FD367E8F41A5A026E3C68E8C8726", | |||||
| "sha256": "25ce8b12c5e17a2029d04a20fd53d270eed3904f50a4d7ea63bc83e33e18bd51", | |||||
| "duration": 2.96, | |||||
| "size": 109215 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 6, | |||||
| "assetCode": "DH_C0E73EC20FD44C608A795A03DE4F7401", | |||||
| "sha256": "db8bae8bfbde4f6e6dacb645eb2652f355f3b754a73012aaec3afee0e62ab9e8", | |||||
| "duration": 6.738333, | |||||
| "size": 246468 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 7, | |||||
| "assetCode": "DH_17FAC41643804A22A8B71A2FF8DCBC28", | |||||
| "sha256": "56ece26b2bab4af67bd59f88a3f4d1b08bfcdd083f423300d8d88f4ff4cae84b", | |||||
| "duration": 5.04, | |||||
| "size": 203299 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 8, | |||||
| "assetCode": "DH_2284ABD91F544E2EB7799E9FA1C4BCF6", | |||||
| "sha256": "1b8f68d21c2300b2bba451f5e22cbaafd6f2dcd0bf0d213c05a4caad53ce0ef0", | |||||
| "duration": 4.8, | |||||
| "size": 191600 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 9, | |||||
| "assetCode": "DH_BF468C49DDCB462E8E2C75CF8C6BD172", | |||||
| "sha256": "095363c1f6be506fa3377330abbf88050dc9ffdd8dac07eb2c5476ea4ec32abe", | |||||
| "duration": 6.8, | |||||
| "size": 443419 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 10, | |||||
| "assetCode": "DH_88908FEBE6054EE99087F8653A8C5FAA", | |||||
| "sha256": "eba4316082aa74841fe07f82c644484630efac95228a9b919b1d5348f76d06d8", | |||||
| "duration": 5.44, | |||||
| "size": 219713 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-007", | |||||
| "step": 11, | |||||
| "assetCode": "DH_4D873387CF324AAF9C6D3BE1A72C247E", | |||||
| "sha256": "4fed628e2847089de8882bb29da648f5aa3c00acf696123c11e5e6c3d54a48bb", | |||||
| "duration": 6.346333, | |||||
| "size": 246099 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 1, | |||||
| "assetCode": "DH_76F80444AA9C4C3183A0EEDF6E655C25", | |||||
| "sha256": "2e71eb4894d380917abb95245d3299e7c0b345c76a0a1df92610ba97c9d95e91", | |||||
| "duration": 5.84, | |||||
| "size": 380363 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 2, | |||||
| "assetCode": "DH_EAF5F0A89D454E6FBAFB061C93D2F760", | |||||
| "sha256": "a1abca193097f47595f32b71a02f4101a02005d0ff67cd4932fa728403d1235b", | |||||
| "duration": 7.138833, | |||||
| "size": 286904 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 3, | |||||
| "assetCode": "DH_981034D69E3047C6B9D1DAE9BBF4F7D4", | |||||
| "sha256": "46f07ce2308478ba60b58d4f6ec600773632193ffaa83f42ed52c71b660d4da5", | |||||
| "duration": 5.88, | |||||
| "size": 386424 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 4, | |||||
| "assetCode": "DH_60D40306A9E74E96ADD7641932934BE4", | |||||
| "sha256": "7fdab9117f713bd3e01aa1d956bfdbc4601df9f5b166b4a05488c1181ba12211", | |||||
| "duration": 4.92, | |||||
| "size": 348426 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 5, | |||||
| "assetCode": "DH_A6EFEC7D339E4BA8994C525CA3709E2E", | |||||
| "sha256": "5a2649d18c9cef179863c09cf8179668b34f1d253d1b340b3775509bdd057433", | |||||
| "duration": 5.946333, | |||||
| "size": 242429 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 6, | |||||
| "assetCode": "DH_D9E1BAFBD89D48019B9445B2A5752E68", | |||||
| "sha256": "8c3679991ac10e63383a40c2deffb1a9fdb5b79cbb692db64fda410e2b13b923", | |||||
| "duration": 7.273833, | |||||
| "size": 299444 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 7, | |||||
| "assetCode": "DH_E83DDAB19F774A418C82EBA7E8EDCF8A", | |||||
| "sha256": "d8e749aee075d99707af8b1a6b9a6700f7b0349c19e9bbd5957f55f43e9c50af", | |||||
| "duration": 5.870833, | |||||
| "size": 241834 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 8, | |||||
| "assetCode": "DH_4FE31068F3EB410BAC72E19F1D1BAF49", | |||||
| "sha256": "3d3c67dfa76d776bcafee0e35412de7c44190b74776f93d426e6d9947fd7bb2c", | |||||
| "duration": 5.383333, | |||||
| "size": 208428 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 9, | |||||
| "assetCode": "DH_D0A3CAC5278C4A57AC9BEF13DA2690BC", | |||||
| "sha256": "bd890674565a670e7994a60be84847b692a8b4820995c3063a497d8cc7eddf7e", | |||||
| "duration": 6.011833, | |||||
| "size": 241840 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 10, | |||||
| "assetCode": "DH_0F40DAF3E28F4FA088EA943D9470CAA7", | |||||
| "sha256": "ed2ee749404179d67831c8f0c46cae21643c97700f431b5cb089f99644fb7d27", | |||||
| "duration": 7.4, | |||||
| "size": 503224 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 11, | |||||
| "assetCode": "DH_F6427532AF5F40348CEB154F031F2AED", | |||||
| "sha256": "e90845dc69d890c341d682f5d36b8880e83fe26bdad34fd8573ee0560d36d287", | |||||
| "duration": 16.12, | |||||
| "size": 689467 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 12, | |||||
| "assetCode": "DH_F601DB08C8D44934AD3A1B1582E804DB", | |||||
| "sha256": "133f1f65d5d88040d4ce758fdb7c0512c44d32f2affc5b0ce09f402f9fd687a5", | |||||
| "duration": 5.48, | |||||
| "size": 360250 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 13, | |||||
| "assetCode": "DH_B1BBA42CE5F346228B6B39A51F190CB3", | |||||
| "sha256": "7cf538b8754ccb0ada36395919cb9653d804717ec6a4d339dc8c62572697f27a", | |||||
| "duration": 5.888333, | |||||
| "size": 242849 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 14, | |||||
| "assetCode": "DH_2BCD762C693242FF8DA420BD9A5D4DF9", | |||||
| "sha256": "456843aa826f489cde689a55d4ffb3e3759b7f7464cc1fbdde6d7d7d216ef31f", | |||||
| "duration": 7.646333, | |||||
| "size": 318525 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 15, | |||||
| "assetCode": "DH_5F8309BF74344C568C2C9EEFDD9E74BF", | |||||
| "sha256": "2a47835ce52868b09ecec6fe380098b412d29a8c2806519a54d15396e3473b57", | |||||
| "duration": 16, | |||||
| "size": 1093064 | |||||
| }, | |||||
| { | |||||
| "code": "TASK-VIRTUAL-008", | |||||
| "step": 16, | |||||
| "assetCode": "DH_D525E35EDA12402DA13302C2B3874CC3", | |||||
| "sha256": "2e22f597ff2808e1b9e600c46c319f82cd91e2be0063bfc817c94d672c786213", | |||||
| "duration": 5.576333, | |||||
| "size": 216175 | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,15 @@ | |||||
| <!doctype html> | |||||
| <html lang="zh-CN"> | |||||
| <meta charset="utf-8"> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||||
| <title>数字教员 3:4 显示框验证</title> | |||||
| <style>body{margin:24px auto;padding:0 24px;max-width:1400px;font:16px/1.6 system-ui;color:#163c35;background:#f3f7f6}section{padding:20px;background:white;border:1px solid #cdded9;border-radius:12px;margin:20px 0}img{display:block;max-width:100%;height:auto}a{color:#087d66}code{background:#e8efed;padding:2px 6px}</style> | |||||
| <h1>数字教员显示框:3:4</h1> | |||||
| <section> | |||||
| <p>2026-09-15 · 本机 127.0.0.1:6180、局域网 192.168.31.168:6180 · 内部维护账号、任务 008 教员预览。未产生测试任务或训练成绩。</p> | |||||
| <p>保留原宽度适配规则,高度按 3:4 自动计算,视频使用 contain 完整显示。1920×945 下为 122×162.66;1366×768 下为 112×149.33。两个地址、两种窗口和视频/语音两种状态共 8 项尺寸检查通过,页面脚本错误为 0。</p> | |||||
| <p><code>pnpm run build</code>、<code>node scripts/virtual-training-formal-route.contract.test.mjs</code> 均通过;浏览器验证使用一次性 Playwright 检查。<a href="result.json">尺寸与环境记录</a></p> | |||||
| </section> | |||||
| <section><h2>桌面窗口</h2><img src="local-1920-video.png" alt="桌面窗口 3:4 数字教员视频框"></section> | |||||
| <section><h2>小屏窗口</h2><img src="local-1366-video.png" alt="小屏窗口 3:4 数字教员视频框"></section> | |||||
| </html> | |||||
| @@ -0,0 +1,125 @@ | |||||
| { | |||||
| "results": [ | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "viewport": { | |||||
| "width": 1920, | |||||
| "height": 945 | |||||
| }, | |||||
| "mode": "video", | |||||
| "width": 122, | |||||
| "height": 162.65625, | |||||
| "actorWidth": 122, | |||||
| "actorHeight": 162.65625, | |||||
| "videoFit": "contain", | |||||
| "bottom": 824, | |||||
| "viewportHeight": 945 | |||||
| }, | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "viewport": { | |||||
| "width": 1920, | |||||
| "height": 945 | |||||
| }, | |||||
| "mode": "audio", | |||||
| "width": 122, | |||||
| "height": 162.65625, | |||||
| "actorWidth": 122, | |||||
| "actorHeight": 162.65625, | |||||
| "videoFit": "contain", | |||||
| "bottom": 824, | |||||
| "viewportHeight": 945 | |||||
| }, | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "viewport": { | |||||
| "width": 1366, | |||||
| "height": 768 | |||||
| }, | |||||
| "mode": "video", | |||||
| "width": 112, | |||||
| "height": 149.328125, | |||||
| "actorWidth": 112, | |||||
| "actorHeight": 149.328125, | |||||
| "videoFit": "contain", | |||||
| "bottom": 647, | |||||
| "viewportHeight": 768 | |||||
| }, | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "viewport": { | |||||
| "width": 1366, | |||||
| "height": 768 | |||||
| }, | |||||
| "mode": "audio", | |||||
| "width": 112, | |||||
| "height": 149.328125, | |||||
| "actorWidth": 112, | |||||
| "actorHeight": 149.328125, | |||||
| "videoFit": "contain", | |||||
| "bottom": 647, | |||||
| "viewportHeight": 768 | |||||
| }, | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "viewport": { | |||||
| "width": 1920, | |||||
| "height": 945 | |||||
| }, | |||||
| "mode": "video", | |||||
| "width": 122, | |||||
| "height": 162.65625, | |||||
| "actorWidth": 122, | |||||
| "actorHeight": 162.65625, | |||||
| "videoFit": "contain", | |||||
| "bottom": 824, | |||||
| "viewportHeight": 945 | |||||
| }, | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "viewport": { | |||||
| "width": 1920, | |||||
| "height": 945 | |||||
| }, | |||||
| "mode": "audio", | |||||
| "width": 122, | |||||
| "height": 162.65625, | |||||
| "actorWidth": 122, | |||||
| "actorHeight": 162.65625, | |||||
| "videoFit": "contain", | |||||
| "bottom": 824, | |||||
| "viewportHeight": 945 | |||||
| }, | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "viewport": { | |||||
| "width": 1366, | |||||
| "height": 768 | |||||
| }, | |||||
| "mode": "video", | |||||
| "width": 112, | |||||
| "height": 149.328125, | |||||
| "actorWidth": 112, | |||||
| "actorHeight": 149.328125, | |||||
| "videoFit": "contain", | |||||
| "bottom": 647, | |||||
| "viewportHeight": 768 | |||||
| }, | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "viewport": { | |||||
| "width": 1366, | |||||
| "height": 768 | |||||
| }, | |||||
| "mode": "audio", | |||||
| "width": 112, | |||||
| "height": 149.328125, | |||||
| "actorWidth": 112, | |||||
| "actorHeight": 149.328125, | |||||
| "videoFit": "contain", | |||||
| "bottom": 647, | |||||
| "viewportHeight": 768 | |||||
| } | |||||
| ], | |||||
| "errors": [] | |||||
| } | |||||
| @@ -0,0 +1 @@ | |||||
| <!doctype html><meta charset="utf-8"><title>Digital instructor label removal</title><style>body{font:16px system-ui;margin:32px;background:#f3f7f6}img{display:block;margin:16px 0;max-width:100%}</style><h1>Digital instructor label removed</h1><p>Local and LAN preview verified; video playback works. No training records created.</p><a href="result.json">Verification data</a><img src="local.png" alt="Local preview"><img src="lan.png" alt="LAN preview"> | |||||
| @@ -0,0 +1,17 @@ | |||||
| { | |||||
| "checks": [ | |||||
| { | |||||
| "origin": "http://127.0.0.1:6180", | |||||
| "labelRemoved": true, | |||||
| "videoPlaying": true, | |||||
| "file": "local.png" | |||||
| }, | |||||
| { | |||||
| "origin": "http://192.168.31.168:6180", | |||||
| "labelRemoved": true, | |||||
| "videoPlaying": true, | |||||
| "file": "lan.png" | |||||
| } | |||||
| ], | |||||
| "testDataCreated": false | |||||
| } | |||||
| @@ -0,0 +1,59 @@ | |||||
| # 四套桥梁流程 v2 数字人讲解验收 | |||||
| 2026-09-15;本机 Windows,教员1 v2;使用负责人已确认的 005 第一步样片参数。 | |||||
| ## 交付 | |||||
| - TASK-VIRTUAL-005:5 段;006:7 段;007:11 段;008:16 段,共 39 段。 | |||||
| - MP4 位于 `unreal_tran_web/public/legacy/virtual-training/videos/narration/`,已进入前端 `dist`,采用静态地址播放。 | |||||
| - 总时长 264.24 秒,总大小 17,727,827 字节;480×640、25 FPS、H.264/AAC。 | |||||
| - 005 第一步与已确认样片逐字节相同。其余步骤复用各自原讲解音轨,以同一教员1 v2 和捕获方法生成。 | |||||
| - 任务 86–89 的发布版本 533–536 保留;39 个服务端步骤与讲解清单匹配。本次未创建或改写任务、版本、运行或成绩。 | |||||
| - 原 39 个视频与 42 个 WAV 的 SHA-256 均保持一致。讲解可切回语音,视频失败自动使用保留的语音。 | |||||
| ## 验证结果 | |||||
| - 所有 39 段完整解码通过,编码、尺寸、帧率和时长检查通过。 | |||||
| - 39 段均存在有效声音,见 `delivery-validation.json` 中音量记录。 | |||||
| - `public`、`dist`、本机 HTTP 下载、局域网 HTTP 下载的全部文件摘要一致;视频 Range 请求返回 206。 | |||||
| - 逐段预览页包含 39 个有效视频链接;每套流程抽帧检查,画面正常。 | |||||
| - 本机 `http://127.0.0.1:6180` 与局域网 `http://192.168.31.168:6180` 各测试四个真实任务的教员预览。页面用现有登录及教学 API,经同源 `/api` 访问配置的 Gateway 6100。 | |||||
| - 每套检查第一、第二步实际静态视频播放,切换语音/视频,三维操作后切步停止旧视频,损坏视频时回退 WAV,刷新后播放和关闭教员停止。两个环境均通过,页面脚本错误为 0,旧讲解资产下载为 0。 | |||||
| - 预览验证使用内部维护账号;未生成测试任务、学员运行或测试成绩。 | |||||
| ## 已执行命令 | |||||
| 在数字人 API 目录,使用既有 Python 环境: | |||||
| ```powershell | |||||
| python ../../unreal_tran/ute2e/tools/bridge-digital-video-static-generate.py | |||||
| ``` | |||||
| 在 `unreal_tran_web`: | |||||
| ```powershell | |||||
| pnpm run build | |||||
| node --test scripts/bridge-digital-video.contract.test.mjs scripts/bridge-script-narration.test.mjs | |||||
| node --test scripts/bridge-scripts-3d-only.test.mjs | |||||
| node scripts/virtual-training-formal-route.contract.test.mjs | |||||
| ``` | |||||
| 构建成功,11 项视频/语音测试及 2 项三维脚本测试通过,正式入口契约通过。Vite 仍提示部分既有包超过 500 kB,不影响构建。 | |||||
| 在 `ute2e`: | |||||
| ```powershell | |||||
| node tools/bridge-digital-video-static-live.mjs | |||||
| $env:BASE_URL = 'http://192.168.31.168:6180' | |||||
| node tools/bridge-digital-video-static-live.mjs | |||||
| node tools/bridge-digital-video-static-delivery.mjs | |||||
| ``` | |||||
| ## 证据 | |||||
| - `index.html`:39 段视频集中预览。 | |||||
| - `generation.json`、`manifest.json`:素材来源、逐步对应及文件摘要。 | |||||
| - `delivery-validation.json`:全部视频、保留文件、构建输出和两处 HTTP 地址的验证。 | |||||
| - `live-result.json`、`lan-result.json`:实际页面交互结果。 | |||||
| - `TASK-VIRTUAL-005-video.png` 至 `TASK-VIRTUAL-008-video.png`:项目内播放截图。 | |||||
| - 各任务 `*-frame.jpg`:生成视频抽帧。 | |||||