w
This commit is contained in:
1 parent
70b3e19798
commit
9b9f07dea5
5 files changed
+167
-34
No files matched your search
@@ -201,6 +201,7 @@ const toUploadView = (r: Record<string, any>): DmsFileUploadViewDisplayData =>
|
||||
onUnmounted(() => {
|
||||
sound.value?.stop();
|
||||
clearRefreshTimers();
|
||||
stopTranscodeTip();
|
||||
});
|
||||
|
||||
const play = (src: string) => {
|
||||
@@ -298,16 +299,58 @@ const resolveUploadFilePath = () => {
|
||||
return bindOption?.Value || currFilePath.value;
|
||||
};
|
||||
|
||||
const onUploadStart = () => {
|
||||
loading.value = true;
|
||||
/** 本次上传的是否是视频:只有视频才需要转码/截图 */
|
||||
const uploadingVideo = ref<boolean>(false);
|
||||
|
||||
/**
|
||||
* "视频转码中 x%" 提示。
|
||||
*
|
||||
* 最后一片发出去后,服务端要先 ffmpeg 截封面(要解码一段视频,最多 25 秒)才返回,
|
||||
* 这段时间前端进度停在 99%/100% 一动不动,看起来像卡死。
|
||||
* 这里用一个按时间推进的估算进度(与后端 25 秒上限对齐,最高 99%)告诉用户还在处理。
|
||||
*/
|
||||
const TRANSCODE_MAX_MS = 25000;
|
||||
let transcodeTimer = 0;
|
||||
|
||||
const startTranscodeTip = () => {
|
||||
if (transcodeTimer) return;
|
||||
const startAt = Date.now();
|
||||
spinTip.value = "预览10秒视频转码中 0%";
|
||||
transcodeTimer = window.setInterval(() => {
|
||||
const ratio = Math.min(0.99, (Date.now() - startAt) / TRANSCODE_MAX_MS);
|
||||
spinTip.value = `预览10秒视频转码中 ${Math.round(ratio * 100)}%`;
|
||||
}, 300);
|
||||
};
|
||||
|
||||
const onUploadProgress = (payload: { text?: string }) => {
|
||||
const stopTranscodeTip = () => {
|
||||
if (!transcodeTimer) return;
|
||||
clearInterval(transcodeTimer);
|
||||
transcodeTimer = 0;
|
||||
};
|
||||
|
||||
const onUploadStart = (file: File) => {
|
||||
loading.value = true;
|
||||
uploadingVideo.value = !!file && fileTypePolicy.isVideo(file?.name || "");
|
||||
};
|
||||
|
||||
const onUploadProgress = (payload: { text?: string; percent?: number }) => {
|
||||
// 99%/100% 之后就是服务端转码阶段,换成转码提示,别让用户以为卡住了
|
||||
if (uploadingVideo.value && (payload?.percent ?? 0) >= 99) {
|
||||
startTranscodeTip();
|
||||
return;
|
||||
}
|
||||
// 进度回到低处说明开始传下一个文件了,转码提示到此为止
|
||||
stopTranscodeTip();
|
||||
spinTip.value = payload?.text || "上传中...";
|
||||
};
|
||||
|
||||
/** 单个文件传完:这里不刷新,等一批都传完再统一刷,避免选了多个文件反复刷列表 */
|
||||
const onUploadSuccess = () => {
|
||||
// 字节已传完,服务端还在合并分片 + ffmpeg 截图/转码
|
||||
if (uploadingVideo.value) {
|
||||
startTranscodeTip();
|
||||
return;
|
||||
}
|
||||
spinTip.value = "上传完成,等待服务端处理...";
|
||||
};
|
||||
|
||||
@@ -326,11 +369,15 @@ const clearRefreshTimers = () => {
|
||||
const onUploadComplete = (payload: { count?: number }) => {
|
||||
const count = payload?.count ?? 1;
|
||||
const sec = 2500 + (count - 1) * 1000;
|
||||
spinTip.value = "加载中...";
|
||||
// 视频场景由转码提示接管文案,等首刷完成后再切回"加载中..."
|
||||
if (!uploadingVideo.value) spinTip.value = "加载中...";
|
||||
clearRefreshTimers();
|
||||
|
||||
refreshTimers.push(
|
||||
window.setTimeout(() => {
|
||||
// 列表已经刷出来了,转码提示到此为止(后续补刷沿用默认的"加载中...")
|
||||
stopTranscodeTip();
|
||||
uploadingVideo.value = false;
|
||||
onReSearch();
|
||||
loading.value = false;
|
||||
}, sec),
|
||||
@@ -359,6 +406,7 @@ const onUploadInterrupted = (payload: {
|
||||
uploaded: payload?.uploaded ?? 0,
|
||||
total: payload?.total ?? 0,
|
||||
};
|
||||
stopTranscodeTip();
|
||||
loading.value = false;
|
||||
spinTip.value = "加载中...";
|
||||
showResumeModal.value = true;
|
||||
@@ -376,10 +424,14 @@ const onResumeUpload = () => {
|
||||
const onDiscardUpload = () => {
|
||||
showResumeModal.value = false;
|
||||
operatorStationRef.value?.discardUpload();
|
||||
stopTranscodeTip();
|
||||
uploadingVideo.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
const onUploadError = () => {
|
||||
stopTranscodeTip();
|
||||
uploadingVideo.value = false;
|
||||
loading.value = false;
|
||||
spinTip.value = "加载中...";
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user