diff --git a/client/src/pages/Recorder.tsx b/client/src/pages/Recorder.tsx index d9a401e..58e4f3b 100644 --- a/client/src/pages/Recorder.tsx +++ b/client/src/pages/Recorder.tsx @@ -211,6 +211,13 @@ export default function Recorder() { const archiveProgress = archiveTaskQuery.data?.progress ?? getArchiveProgress(mediaSession); const archivePhaseLabel = getArchivePhaseLabel(mode, mediaSession, archiveTaskQuery.data?.progress); const totalUploadBytes = uploadBytes + queuedBytes; + const uploadStillDraining = mode === "finalizing" && (queuedBytes > 0 || queuedSegments > 0 || finalizeTaskMutation.isPending); + const archiveRunning = + archiveTaskQuery.data?.status === "queued" || + archiveTaskQuery.data?.status === "running" || + mediaSession?.archiveStatus === "queued" || + mediaSession?.archiveStatus === "processing"; + const canLeaveRecorderPage = !uploadStillDraining && (archiveRunning || mode === "archived"); const syncSessionState = useCallback((session: MediaSession | null) => { currentSessionRef.current = session; @@ -1025,6 +1032,30 @@ export default function Recorder() { ) : null} + {uploadStillDraining ? ( + + + 仍需停留在当前页面 + + 结束已提交,但还有 {queuedSegments} 个分段、约 {formatFileSize(queuedBytes)} 待上传。 + 请先保持当前页面和网络连接,等“待上传缓存”变为 0 后再离开,否则本次录制尾段可能缺失。 + + + ) : null} + + {canLeaveRecorderPage ? ( + + + ) : null} +
@@ -1226,6 +1257,21 @@ export default function Recorder() { ? mediaSession.lastError || "归档失败,请检查媒体服务日志。" : `Worker 正在合并分段并生成归档文件,当前已上传 ${formatFileSize(uploadBytes)}。`}

+
+ {uploadStillDraining + ? `仍需停留:还有 ${queuedSegments} 个分段、约 ${formatFileSize(queuedBytes)} 待上传,待上传清零后再离开当前页面。` + : canLeaveRecorderPage + ? "上传已完成:无需继续停留在此页面,后台会继续生成回放并把结果写入视频库。" + : "结束录制后会先清空本地待上传缓存,再转入后台归档。"} +
)}