From e3fd75e570800cd8eb18ce55bf1bdb84962cf8a4 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Tue, 16 Apr 2024 10:55:08 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E4=BC=98=E5=8C=96=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=98=BE=E7=A4=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/transfer/transfer-drawer.vue | 2 +- .../terminal/handler/sftp-transfer-manager.ts | 30 ++++++++++++++++--- .../host/terminal/types/terminal.type.ts | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/orion-ops-ui/src/views/host/terminal/components/transfer/transfer-drawer.vue b/orion-ops-ui/src/views/host/terminal/components/transfer/transfer-drawer.vue index 44c198ec..47967067 100644 --- a/orion-ops-ui/src/views/host/terminal/components/transfer/transfer-drawer.vue +++ b/orion-ops-ui/src/views/host/terminal/components/transfer/transfer-drawer.vue @@ -48,7 +48,7 @@ {{ getFileSize(item.totalSize) }} - {{ (item.currentSize / item.totalSize * 100).toFixed(2) }}% + {{ item.progress }}% diff --git a/orion-ops-ui/src/views/host/terminal/handler/sftp-transfer-manager.ts b/orion-ops-ui/src/views/host/terminal/handler/sftp-transfer-manager.ts index ec26b22e..fe3aa4b6 100644 --- a/orion-ops-ui/src/views/host/terminal/handler/sftp-transfer-manager.ts +++ b/orion-ops-ui/src/views/host/terminal/handler/sftp-transfer-manager.ts @@ -15,6 +15,8 @@ export default class SftpTransferManager implements ISftpTransferManager { private run: boolean; + private progressId?: number; + private currentItem?: SftpTransferItem; private currentUploader?: ISftpTransferUploader; @@ -39,6 +41,7 @@ export default class SftpTransferManager implements ISftpTransferManager { name: s.webkitRelativePath || s.name, currentSize: 0, totalSize: s.size, + progress: 0, status: TransferStatus.WAITING, parentPath: parentPath, file: s @@ -63,6 +66,7 @@ export default class SftpTransferManager implements ISftpTransferManager { parentPath: currentPath, currentSize: 0, totalSize: s.size, + progress: 0, status: TransferStatus.WAITING, }; }) as Array; @@ -111,20 +115,30 @@ export default class SftpTransferManager implements ISftpTransferManager { }).forEach(s => { s.status = TransferStatus.ERROR; }); - // 关闭会话重置 run - this.run = false; + // 关闭会话 + this.close(); return; } + // 关闭会话 this.client.onclose = event => { - // 关闭会话重置 run - this.run = false; console.warn('transfer close', event); + this.close(); }; + // 处理消息 this.client.onmessage = this.resolveMessage.bind(this); + // 计算传输进度 + this.progressId = setInterval(this.calcProgress.bind(this), 500); // 打开后自动传输下一个任务 this.transferNextItem(); } + // 计算传输进度 + private calcProgress() { + this.transferList.forEach(item => { + item.progress = (item.currentSize / item.totalSize * 100).toFixed(2); + }); + } + // 传输下一条任务 private transferNextItem() { this.currentUploader = undefined; @@ -247,4 +261,12 @@ export default class SftpTransferManager implements ISftpTransferManager { this.transferNextItem(); } + // 关闭 释放资源 + private close() { + // 重置 run + this.run = false; + // 关闭传输进度 + clearInterval(this.progressId); + } + } diff --git a/orion-ops-ui/src/views/host/terminal/types/terminal.type.ts b/orion-ops-ui/src/views/host/terminal/types/terminal.type.ts index 6e9002b2..79729912 100644 --- a/orion-ops-ui/src/views/host/terminal/types/terminal.type.ts +++ b/orion-ops-ui/src/views/host/terminal/types/terminal.type.ts @@ -441,6 +441,7 @@ export interface SftpTransferItem { parentPath: string; currentSize: number, totalSize: number; + progress: number | string; status: string; errorMessage?: string; file: File;