From 281ea033b811a4c04e027977c1641425b3e8f88a Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Thu, 18 Jan 2024 00:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=BC=E6=8E=A5=E5=91=BD=E4=BB=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HostConnectLogServiceImpl.java | 3 +- .../components/xterm/terminal-view.vue | 2 +- .../handler/terminal-session-handler.ts | 31 +++++++++++++++++++ .../host/terminal/types/terminal.type.ts | 2 ++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java index 0d90f83e..e6a1cfea 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java @@ -101,7 +101,8 @@ public class HostConnectLogServiceImpl implements HostConnectLogService { .like(HostConnectLogDO::getToken, request.getToken()) .eq(HostConnectLogDO::getStatus, request.getStatus()) .ge(HostConnectLogDO::getStartTime, Arrays1.getIfPresent(request.getStartTimeRange(), 0)) - .le(HostConnectLogDO::getStartTime, Arrays1.getIfPresent(request.getStartTimeRange(), 1)); + .le(HostConnectLogDO::getStartTime, Arrays1.getIfPresent(request.getStartTimeRange(), 1)) + .orderByDesc(HostConnectLogDO::getId); } } diff --git a/orion-ops-ui/src/views/host/terminal/components/xterm/terminal-view.vue b/orion-ops-ui/src/views/host/terminal/components/xterm/terminal-view.vue index cc93442d..0dc54a16 100644 --- a/orion-ops-ui/src/views/host/terminal/components/xterm/terminal-view.vue +++ b/orion-ops-ui/src/views/host/terminal/components/xterm/terminal-view.vue @@ -93,8 +93,8 @@ const session = ref(); // TODO - // sftp // 代码片段 + // sftp // 发送命令 const writeCommandInput = async (e: KeyboardEvent) => { diff --git a/orion-ops-ui/src/views/host/terminal/handler/terminal-session-handler.ts b/orion-ops-ui/src/views/host/terminal/handler/terminal-session-handler.ts index 7068737d..0f441cc9 100644 --- a/orion-ops-ui/src/views/host/terminal/handler/terminal-session-handler.ts +++ b/orion-ops-ui/src/views/host/terminal/handler/terminal-session-handler.ts @@ -44,6 +44,7 @@ export default class TerminalSessionHandler implements ITerminalSessionHandler { case 'interrupt': case 'enter': case 'commandEditor': + case 'checkAppendMissing': return this.session.canWrite; case 'disconnect': return this.session.connected; @@ -181,6 +182,36 @@ export default class TerminalSessionHandler implements ITerminalSessionHandler { this.session.disconnect(); } + // 检查追加缺失的部分 + checkAppendMissing(value: string): void { + // 获取最后一行数据 + const buffer = this.inst.buffer?.active; + let lastLine = (buffer?.getLine(buffer?.viewportY + buffer?.cursorY)?.translateToString() || '').trimEnd(); + // 边界检查 + const lastLineLen = lastLine.length; + const spinPartLen = value.length; + let checkEnd; + if (spinPartLen >= lastLineLen) { + checkEnd = lastLineLen; + } else { + checkEnd = spinPartLen; + } + // 获取缺失的数据 + let append = undefined; + for (let i = 0; i < checkEnd; i++) { + if (lastLine.endsWith(value.substring(0, checkEnd - i))) { + append = value.substring(checkEnd - i, spinPartLen); + break; + } + } + // 全部缺失 + if (append == undefined) { + append = value; + } + // 追加 + this.pasteTrimEnd(append); + } + // 截图 async screenshot() { try { 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 e27fc335..e5c533a1 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 @@ -240,6 +240,8 @@ export interface ITerminalSessionHandler { disconnect: () => void; // 截图 screenshot: () => void; + // 检查追加缺失的部分 + checkAppendMissing: (value: string) => void; // 关闭 tab closeTab: () => void; // 切换到前一个 tab