Browse Source

fix: 容器终端断开连接时,保持抽屉打开 (#1926)

pull/1934/head
ssongliu 1 year ago committed by GitHub
parent
commit
18e8af6234
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 32
      frontend/src/components/terminal/index.vue
  2. 10
      frontend/src/views/container/container/terminal/index.vue

32
frontend/src/components/terminal/index.vue

@ -13,20 +13,7 @@ const terminalElement = ref<HTMLDivElement | null>(null);
const fitAddon = new FitAddon(); const fitAddon = new FitAddon();
const termReady = ref(false); const termReady = ref(false);
const webSocketReady = ref(false); const webSocketReady = ref(false);
const term = ref( const term = ref();
new Terminal({
lineHeight: 1.2,
fontSize: 12,
fontFamily: "Monaco, Menlo, Consolas, 'Courier New', monospace",
theme: {
background: '#000000',
},
cursorBlink: true,
cursorStyle: 'underline',
scrollback: 100,
tabStopWidth: 4,
}),
);
const terminalSocket = ref<WebSocket>(); const terminalSocket = ref<WebSocket>();
const heartbeatTimer = ref<number>(); const heartbeatTimer = ref<number>();
const latency = ref(0); const latency = ref(0);
@ -56,6 +43,21 @@ const acceptParams = (props: WsProps) => {
}); });
}; };
const newTerm = () => {
term.value = new Terminal({
lineHeight: 1.2,
fontSize: 12,
fontFamily: "Monaco, Menlo, Consolas, 'Courier New', monospace",
theme: {
background: '#000000',
},
cursorBlink: true,
cursorStyle: 'underline',
scrollback: 100,
tabStopWidth: 4,
});
};
const init = (endpoint: string, args: string) => { const init = (endpoint: string, args: string) => {
if (initTerminal(true)) { if (initTerminal(true)) {
initWebSocket(endpoint, args); initWebSocket(endpoint, args);
@ -78,11 +80,13 @@ function onClose(isKeepShow: boolean = false) {
term.value.dispose(); term.value.dispose();
} catch {} } catch {}
} }
terminalElement.value.innerHTML = '';
} }
// terminal start // terminal start
const initTerminal = (online: boolean = false): boolean => { const initTerminal = (online: boolean = false): boolean => {
newTerm();
if (terminalElement.value) { if (terminalElement.value) {
term.value.open(terminalElement.value); term.value.open(terminalElement.value);
term.value.loadAddon(fitAddon); term.value.loadAddon(fitAddon);

10
frontend/src/views/container/container/terminal/index.vue

@ -43,7 +43,7 @@
<el-button v-if="!terminalOpen" @click="initTerm(formRef)"> <el-button v-if="!terminalOpen" @click="initTerm(formRef)">
{{ $t('commons.button.conn') }} {{ $t('commons.button.conn') }}
</el-button> </el-button>
<el-button v-else @click="handleClose()">{{ $t('commons.button.disconn') }}</el-button> <el-button v-else @click="onClose()">{{ $t('commons.button.disconn') }}</el-button>
<Terminal style="height: calc(100vh - 302px)" ref="terminalRef"></Terminal> <Terminal style="height: calc(100vh - 302px)" ref="terminalRef"></Terminal>
</el-form> </el-form>
</el-drawer> </el-drawer>
@ -99,10 +99,14 @@ const initTerm = (formEl: FormInstance | undefined) => {
}); });
}; };
function handleClose() { const onClose = () => {
terminalRef.value?.onClose(); terminalRef.value?.onClose();
terminalVisiable.value = false;
terminalOpen.value = false; terminalOpen.value = false;
};
function handleClose() {
onClose();
terminalVisiable.value = false;
} }
defineExpose({ defineExpose({

Loading…
Cancel
Save