Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
version: '3.3'
|
version: '3.3'
|
||||||
services:
|
services:
|
||||||
service:
|
service:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- 1081:80
|
- 1081:80
|
||||||
@@ -32,7 +32,7 @@ services:
|
|||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
mysql:
|
mysql:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- 3307:3306
|
- 3307:3306
|
||||||
@@ -52,7 +52,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
start_period: 3s
|
start_period: 3s
|
||||||
redis:
|
redis:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- 6380:6379
|
- 6380:6379
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
version: '3.3'
|
version: '3.3'
|
||||||
services:
|
services:
|
||||||
service:
|
service:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- ${SERVICE_PORT:-1081}:80
|
- ${SERVICE_PORT:-1081}:80
|
||||||
@@ -32,7 +32,7 @@ services:
|
|||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
mysql:
|
mysql:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- 3307:3306
|
- 3307:3306
|
||||||
@@ -52,7 +52,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
start_period: 3s
|
start_period: 3s
|
||||||
redis:
|
redis:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.3
|
||||||
privileged: true
|
privileged: true
|
||||||
ports:
|
ports:
|
||||||
- 6380:6379
|
- 6380:6379
|
||||||
@@ -68,7 +68,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
start_period: 3s
|
start_period: 3s
|
||||||
adminer:
|
adminer:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:2.1.2
|
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:2.1.3
|
||||||
ports:
|
ports:
|
||||||
- 8081:8080
|
- 8081:8080
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.1.2
|
version=2.1.3
|
||||||
docker build -t orion-visor-adminer:${version} .
|
docker build -t orion-visor-adminer:${version} .
|
||||||
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
|
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.1.2
|
version=2.1.3
|
||||||
cp -r ../../sql ./sql
|
cp -r ../../sql ./sql
|
||||||
docker build -t orion-visor-mysql:${version} .
|
docker build -t orion-visor-mysql:${version} .
|
||||||
rm -rf ./sql
|
rm -rf ./sql
|
||||||
docker tag orion-visor-mysql:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
|
docker tag orion-visor-mysql:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
|
|
||||||
|
|||||||
6
docker/push.sh
Normal file
6
docker/push.sh
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#/bin/bash
|
||||||
|
version=2.1.3
|
||||||
|
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
|
||||||
|
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
|
||||||
|
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
|
||||||
|
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.1.2
|
version=2.1.3
|
||||||
docker build -t orion-visor-redis:${version} .
|
docker build -t orion-visor-redis:${version} .
|
||||||
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
|
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
version=2.1.2
|
version=2.1.3
|
||||||
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
|
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
|
||||||
mv ../../orion-visor-ui/dist ./dist
|
mv ../../orion-visor-ui/dist ./dist
|
||||||
docker build -t orion-visor-service:${version} .
|
docker build -t orion-visor-service:${version} .
|
||||||
rm -rf ./orion-visor-launch.jar
|
rm -rf ./orion-visor-launch.jar
|
||||||
rm -rf ./dist
|
rm -rf ./dist
|
||||||
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
|
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
|
||||||
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<url>https://github.com/dromara/orion-visor</url>
|
<url>https://github.com/dromara/orion-visor</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>2.1.2</revision>
|
<revision>2.1.3</revision>
|
||||||
<spring.boot.version>2.7.17</spring.boot.version>
|
<spring.boot.version>2.7.17</spring.boot.version>
|
||||||
<spring.boot.admin.version>2.7.15</spring.boot.admin.version>
|
<spring.boot.admin.version>2.7.15</spring.boot.admin.version>
|
||||||
<flatten.maven.plugin.version>1.5.0</flatten.maven.plugin.version>
|
<flatten.maven.plugin.version>1.5.0</flatten.maven.plugin.version>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public interface AppConst extends OrionConst {
|
|||||||
/**
|
/**
|
||||||
* 同 ${orion.version} 迭代时候需要手动更改
|
* 同 ${orion.version} 迭代时候需要手动更改
|
||||||
*/
|
*/
|
||||||
String VERSION = "2.1.2";
|
String VERSION = "2.1.3";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同 ${spring.application.name}
|
* 同 ${spring.application.name}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.orion.lang.exception.argument.InvalidArgumentException;
|
|||||||
import com.orion.lang.utils.Exceptions;
|
import com.orion.lang.utils.Exceptions;
|
||||||
import com.orion.lang.utils.Strings;
|
import com.orion.lang.utils.Strings;
|
||||||
import com.orion.net.host.SessionHolder;
|
import com.orion.net.host.SessionHolder;
|
||||||
|
import com.orion.net.host.SessionLogger;
|
||||||
import com.orion.net.host.SessionStore;
|
import com.orion.net.host.SessionStore;
|
||||||
import com.orion.visor.framework.common.constant.Const;
|
import com.orion.visor.framework.common.constant.Const;
|
||||||
import com.orion.visor.framework.common.utils.CryptoUtils;
|
import com.orion.visor.framework.common.utils.CryptoUtils;
|
||||||
@@ -40,6 +41,7 @@ public class SessionStores {
|
|||||||
CURRENT_ADDRESS.set(address);
|
CURRENT_ADDRESS.set(address);
|
||||||
// 创建会话
|
// 创建会话
|
||||||
SessionHolder sessionHolder = SessionHolder.create();
|
SessionHolder sessionHolder = SessionHolder.create();
|
||||||
|
sessionHolder.setLogger(SessionLogger.INFO);
|
||||||
SessionStore session = createSessionStore(conn, sessionHolder);
|
SessionStore session = createSessionStore(conn, sessionHolder);
|
||||||
// 连接
|
// 连接
|
||||||
session.connect();
|
session.connect();
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ public class TerminalPreferenceStrategy extends AbstractGenericsDataStrategy<Ter
|
|||||||
String actionBarSetting = TerminalPreferenceModel.ActionBarSettingModel.builder()
|
String actionBarSetting = TerminalPreferenceModel.ActionBarSettingModel.builder()
|
||||||
.commandInput(false)
|
.commandInput(false)
|
||||||
.connectStatus(true)
|
.connectStatus(true)
|
||||||
.toTop(true)
|
.toTop(false)
|
||||||
.toBottom(true)
|
.toBottom(false)
|
||||||
.selectAll(false)
|
.selectAll(false)
|
||||||
.search(true)
|
.search(true)
|
||||||
.copy(true)
|
.copy(true)
|
||||||
@@ -113,8 +113,8 @@ public class TerminalPreferenceStrategy extends AbstractGenericsDataStrategy<Ter
|
|||||||
.fontSizePlus(false)
|
.fontSizePlus(false)
|
||||||
.fontSizeSubtract(false)
|
.fontSizeSubtract(false)
|
||||||
.commandEditor(true)
|
.commandEditor(true)
|
||||||
.fontSizePlus(true)
|
.fontSizePlus(false)
|
||||||
.fontSizeSubtract(true)
|
.fontSizeSubtract(false)
|
||||||
.openSftp(true)
|
.openSftp(true)
|
||||||
.uploadFile(true)
|
.uploadFile(true)
|
||||||
.clear(true)
|
.clear(true)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
VITE_API_BASE_URL= 'http://127.0.0.1:9200/orion-visor/api'
|
VITE_API_BASE_URL= 'http://127.0.0.1:9200/orion-visor/api'
|
||||||
VITE_WS_BASE_URL= 'ws://127.0.0.1:9200/orion-visor/keep-alive'
|
VITE_WS_BASE_URL= 'ws://127.0.0.1:9200/orion-visor/keep-alive'
|
||||||
VITE_APP_VERSION= '2.1.2'
|
VITE_APP_VERSION= '2.1.3'
|
||||||
VITE_APP_RELEASE= 'community'
|
VITE_APP_RELEASE= 'community'
|
||||||
VITE_SFTP_PREVIEW_MB= 2
|
VITE_SFTP_PREVIEW_MB= 2
|
||||||
VITE_DEMO_MODE= false
|
VITE_DEMO_MODE= false
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
VITE_API_BASE_URL= '/orion-visor/api'
|
VITE_API_BASE_URL= '/orion-visor/api'
|
||||||
VITE_WS_BASE_URL= '/orion-visor/keep-alive'
|
VITE_WS_BASE_URL= '/orion-visor/keep-alive'
|
||||||
VITE_APP_VERSION= '2.1.2'
|
VITE_APP_VERSION= '2.1.3'
|
||||||
VITE_APP_RELEASE= 'community'
|
VITE_APP_RELEASE= 'community'
|
||||||
VITE_SFTP_PREVIEW_MB= 2
|
VITE_SFTP_PREVIEW_MB= 2
|
||||||
VITE_DEMO_MODE= false
|
VITE_DEMO_MODE= false
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "orion-visor-ui",
|
"name": "orion-visor-ui",
|
||||||
"description": "Orion Visor UI",
|
"description": "Orion Visor UI",
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"author": "Jiahang Li",
|
"author": "Jiahang Li",
|
||||||
"license": "Apache 2.0",
|
"license": "Apache 2.0",
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
import { downloadExecCommandLogFile } from '@/api/exec/exec-command-log';
|
import { downloadExecCommandLogFile } from '@/api/exec/exec-command-log';
|
||||||
import { downloadExecJobLogFile } from '@/api/job/exec-job-log';
|
import { downloadExecJobLogFile } from '@/api/job/exec-job-log';
|
||||||
import { downloadFile } from '@/utils/file';
|
import { downloadFile } from '@/utils/file';
|
||||||
import XtermSearchModal from '@/components/xtrem/search-modal/index.vue';
|
import XtermSearchModal from '@/components/xterm/search-modal/index.vue';
|
||||||
import '@xterm/xterm/css/xterm.css';
|
import '@xterm/xterm/css/xterm.css';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import type { ImageAddon } from '@xterm/addon-image';
|
|||||||
import type { Unicode11Addon } from '@xterm/addon-unicode11';
|
import type { Unicode11Addon } from '@xterm/addon-unicode11';
|
||||||
|
|
||||||
// 默认字体
|
// 默认字体
|
||||||
export const defaultFontFamily = 'Courier New, Monaco, courier, monospace';
|
export const defaultFontFamily = 'Consolas, Courier New, Monaco, courier, monospace';
|
||||||
|
|
||||||
// 默认主题
|
// 默认主题
|
||||||
export const defaultTheme = {
|
export const defaultTheme = {
|
||||||
|
|||||||
@@ -199,6 +199,7 @@
|
|||||||
height: var(--header-height);
|
height: var(--header-height);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
transition: all .3s;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@@ -11,7 +11,10 @@
|
|||||||
<!-- 右侧按钮 -->
|
<!-- 右侧按钮 -->
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<a-space class="panel-extra">
|
<a-space class="panel-extra">
|
||||||
<span class="extra-icon" @click="close">
|
<!-- 关闭 -->
|
||||||
|
<span class="extra-icon"
|
||||||
|
title="关闭面板"
|
||||||
|
@click="close">
|
||||||
<icon-close />
|
<icon-close />
|
||||||
</span>
|
</span>
|
||||||
</a-space>
|
</a-space>
|
||||||
@@ -21,7 +24,10 @@
|
|||||||
<!-- 标题 -->
|
<!-- 标题 -->
|
||||||
<template #title>
|
<template #title>
|
||||||
<span class="tab-title-wrapper usn"
|
<span class="tab-title-wrapper usn"
|
||||||
:style="{ 'border-bottom': `2px ${tab.color || 'transparent'} solid` }"
|
:style="{
|
||||||
|
'--color': getDictValue(tabColorKey, tab.color, 'color', 'transparent'),
|
||||||
|
'--bg': panel.active === tab.key ? getDictValue(tabColorKey, tab.color, 'bg', 'transparent') : 'transparent',
|
||||||
|
}"
|
||||||
@dblclick="copySession(tab, index)">
|
@dblclick="copySession(tab, index)">
|
||||||
<span class="tab-title-icon">
|
<span class="tab-title-icon">
|
||||||
<component :is="tab.icon" />
|
<component :is="tab.icon" />
|
||||||
@@ -47,8 +53,8 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { ISshSession, ITerminalTabManager, TerminalPanelTabItem } from '../../types/define';
|
import type { ISshSession, ITerminalTabManager, TerminalPanelTabItem } from '../../types/define';
|
||||||
import { watch } from 'vue';
|
import { watch } from 'vue';
|
||||||
import { useTerminalStore } from '@/store';
|
import { useDictStore, useTerminalStore } from '@/store';
|
||||||
import { PanelSessionType } from '../../types/const';
|
import { tabColorKey, PanelSessionType } from '../../types/const';
|
||||||
import SshView from '../ssh/ssh-view.vue';
|
import SshView from '../ssh/ssh-view.vue';
|
||||||
import SftpView from '../sftp/sftp-view.vue';
|
import SftpView from '../sftp/sftp-view.vue';
|
||||||
|
|
||||||
@@ -60,6 +66,7 @@
|
|||||||
const emits = defineEmits(['close', 'openNewConnect']);
|
const emits = defineEmits(['close', 'openNewConnect']);
|
||||||
|
|
||||||
const { sessionManager, copySession } = useTerminalStore();
|
const { sessionManager, copySession } = useTerminalStore();
|
||||||
|
const { getDictValue } = useDictStore();
|
||||||
|
|
||||||
// 监听 tab 切换
|
// 监听 tab 切换
|
||||||
watch(() => props.panel.active, (active, before) => {
|
watch(() => props.panel.active, (active, before) => {
|
||||||
@@ -107,12 +114,28 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 11px 18px 9px 14px;
|
padding: 11px 18px 9px 14px;
|
||||||
margin: 0 2px;
|
background: var(--bg);
|
||||||
|
position: relative;
|
||||||
|
transition: all .3s;
|
||||||
|
|
||||||
.tab-title-icon {
|
.tab-title-icon {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover{
|
||||||
|
filter: brightness(1.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
width: calc(100% - 3px);
|
||||||
|
height: 2px;
|
||||||
|
background: var(--color);
|
||||||
|
position: absolute;
|
||||||
|
left: 1px;
|
||||||
|
bottom: -1px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.panel-extra {
|
.panel-extra {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<a-form class="terminal-setting-form"
|
<a-form class="terminal-setting-form"
|
||||||
:model="formModel"
|
:model="formModel"
|
||||||
layout="vertical">
|
layout="vertical">
|
||||||
<a-space>
|
<a-space size="large">
|
||||||
<!-- 顶部操作按钮 -->
|
<!-- 顶部操作按钮 -->
|
||||||
<a-form-item field="actions" label="顶部操作按钮">
|
<a-form-item field="actions" label="顶部操作按钮">
|
||||||
<icon-actions class="form-item-actions"
|
<icon-actions class="form-item-actions"
|
||||||
@@ -27,7 +27,6 @@
|
|||||||
<!-- 命令输入框 -->
|
<!-- 命令输入框 -->
|
||||||
<a-form-item field="commandInput" label="命令输入框">
|
<a-form-item field="commandInput" label="命令输入框">
|
||||||
<a-switch v-model="formModel.commandInput"
|
<a-switch v-model="formModel.commandInput"
|
||||||
class="form-item-command-input"
|
|
||||||
:default-checked="true"
|
:default-checked="true"
|
||||||
type="round" />
|
type="round" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -107,8 +106,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-item-actions, .form-item-command-input {
|
.form-item-actions {
|
||||||
margin-right: 48px;
|
margin-right: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.arco-form) {
|
:deep(.arco-form) {
|
||||||
|
|||||||
@@ -22,11 +22,11 @@
|
|||||||
:filter-option="labelFilter">
|
:filter-option="labelFilter">
|
||||||
<!-- label -->
|
<!-- label -->
|
||||||
<template #label="{ data }">
|
<template #label="{ data }">
|
||||||
<span :style="{ fontFamily: data.value }">{{ data.label }}</span>
|
<span :style="{ fontFamily: data.value === '_' ? defaultFontFamily : data.value }">{{ data.label }}</span>
|
||||||
</template>
|
</template>
|
||||||
<!-- 选项 -->
|
<!-- 选项 -->
|
||||||
<template #option="{ data }">
|
<template #option="{ data }">
|
||||||
<span :style="{ fontFamily: data.value }">{{ data.label }}</span>
|
<span :style="{ fontFamily: data.value === '_' ? defaultFontFamily : data.value }">{{ data.label }}</span>
|
||||||
</template>
|
</template>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<template v-for="color in toOptions(tabColorKey)">
|
<template v-for="color in toOptions(tabColorKey)">
|
||||||
<div class="color-wrapper"
|
<div class="color-wrapper"
|
||||||
:class="[formModel.color === color.value ? 'selected-color' : '']"
|
:class="[formModel.color === color.value ? 'selected-color' : '']"
|
||||||
:style="{ '--color': `${color.value}` }"
|
:style="{ '--color': `${color.color}` }"
|
||||||
@click="clickColor(color.value as string)">
|
@click="clickColor(color.value as string)">
|
||||||
<div class="color-item">
|
<div class="color-item">
|
||||||
<div class="color-item-dot" />
|
<div class="color-item-dot" />
|
||||||
|
|||||||
@@ -6,9 +6,10 @@
|
|||||||
<div class="ssh-header-left">
|
<div class="ssh-header-left">
|
||||||
<!-- 主机地址 -->
|
<!-- 主机地址 -->
|
||||||
<span class="address-wrapper">
|
<span class="address-wrapper">
|
||||||
{{ tab.address }}
|
<span class="text-copy"
|
||||||
<span class="address-copy copy-right" title="复制" @click="copy(tab.address as string)">
|
:title="tab.address"
|
||||||
<icon-copy />
|
@click="copy(tab.address as string, true)">
|
||||||
|
{{ tab.address }}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,7 +80,7 @@
|
|||||||
import IconActions from '../layout/icon-actions.vue';
|
import IconActions from '../layout/icon-actions.vue';
|
||||||
import SshContextMenu from './ssh-context-menu.vue';
|
import SshContextMenu from './ssh-context-menu.vue';
|
||||||
import SftpUploadModal from '../sftp/sftp-upload-modal.vue';
|
import SftpUploadModal from '../sftp/sftp-upload-modal.vue';
|
||||||
import XtermSearchModal from '@/components/xtrem/search-modal/index.vue';
|
import XtermSearchModal from '@/components/xterm/search-modal/index.vue';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
tab: TerminalPanelTabItem;
|
tab: TerminalPanelTabItem;
|
||||||
@@ -182,7 +183,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-left {
|
&-left {
|
||||||
width: 34%;
|
width: 25%;
|
||||||
|
|
||||||
.address-wrapper {
|
.address-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -190,16 +191,6 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|
||||||
.address-copy {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
.address-copy {
|
|
||||||
display: unset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: 'IP:';
|
content: 'IP:';
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
@@ -208,7 +199,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-right {
|
&-right {
|
||||||
width: 66%;
|
width: 75%;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
|
||||||
.command-input {
|
.command-input {
|
||||||
|
|||||||
@@ -157,12 +157,14 @@
|
|||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
// 卸载时清除 cache
|
// 卸载时清除 cache
|
||||||
useCacheStore().reset('authorizedHostKeys', 'authorizedHostIdentities', 'commandSnippetGroups', 'pathBookmarkGroups');
|
useCacheStore().reset('authorizedHostKeys', 'authorizedHostIdentities', 'commandSnippetGroups', 'pathBookmarkGroups');
|
||||||
// 移除关闭视口事件
|
|
||||||
window.removeEventListener('beforeunload', handleBeforeUnload);
|
|
||||||
// 去除 body style
|
// 去除 body style
|
||||||
document.body.removeAttribute('terminal-theme');
|
document.body.removeAttribute('terminal-theme');
|
||||||
// 重置 title
|
// 重置 title
|
||||||
document.title = originTitle;
|
document.title = originTitle;
|
||||||
|
// 移除关闭视口事件
|
||||||
|
if (!debug) {
|
||||||
|
window.removeEventListener('beforeunload', handleBeforeUnload);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -22,7 +22,7 @@
|
|||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>2.1.2</revision>
|
<revision>2.1.3</revision>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
<maven.surefire.plugin.version>3.0.0-M5</maven.surefire.plugin.version>
|
<maven.surefire.plugin.version>3.0.0-M5</maven.surefire.plugin.version>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ INSERT INTO `dict_key` VALUES (27, 'hostConnectType', 'STRING', '[{\"name\": \"c
|
|||||||
INSERT INTO `dict_key` VALUES (28, 'hostConnectStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"COLOR\"}]', '主机连接状态', '2023-12-26 23:23:51', '2023-12-26 23:28:15', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (28, 'hostConnectStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"COLOR\"}]', '主机连接状态', '2023-12-26 23:23:51', '2023-12-26 23:28:15', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (29, 'terminalConnectStatus', 'INTEGER', '[{\"name\": \"status\", \"type\": \"STRING\"}]', '终端连接状态', '2024-01-09 00:32:00', '2024-01-09 00:32:16', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (29, 'terminalConnectStatus', 'INTEGER', '[{\"name\": \"status\", \"type\": \"STRING\"}]', '终端连接状态', '2024-01-09 00:32:00', '2024-01-09 00:32:16', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (31, 'terminalEmulationType', 'STRING', '[]', '伪终端类型', '2024-01-11 23:35:01', '2024-01-11 23:35:01', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (31, 'terminalEmulationType', 'STRING', '[]', '伪终端类型', '2024-01-11 23:35:01', '2024-01-11 23:35:01', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (32, 'terminalTabColor', 'COLOR', '[]', '终端标签页颜色', '2024-03-01 15:01:44', '2024-03-01 15:01:44', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (32, 'terminalTabColor', 'COLOR', '[{\"name\": \"color\", \"type\": \"COLOR\"}, {\"name\": \"bg\", \"type\": \"COLOR\"}]', '终端标签页颜色', '2024-03-01 15:01:44', '2024-08-05 12:36:54', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (33, 'sftpOperatorType', 'STRING', '[]', 'SFTP 操作类型', '2024-03-05 16:49:54', '2024-03-05 16:49:54', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (33, 'sftpOperatorType', 'STRING', '[]', 'SFTP 操作类型', '2024-03-05 16:49:54', '2024-03-05 16:49:54', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (34, 'execStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"STRING\"}]', '批量执行状态', '2024-03-13 15:08:43', '2024-03-13 15:39:46', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (34, 'execStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"STRING\"}]', '批量执行状态', '2024-03-13 15:08:43', '2024-03-13 15:39:46', '1', '1', 0);
|
||||||
INSERT INTO `dict_key` VALUES (35, 'execHostStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"COLOR\"}, {\"name\": \"execColor\", \"type\": \"COLOR\"}]', '主机执行状态', '2024-03-13 15:09:10', '2024-03-17 20:31:07', '1', '1', 0);
|
INSERT INTO `dict_key` VALUES (35, 'execHostStatus', 'STRING', '[{\"name\": \"color\", \"type\": \"COLOR\"}, {\"name\": \"execColor\", \"type\": \"COLOR\"}]', '主机执行状态', '2024-03-13 15:09:10', '2024-03-17 20:31:07', '1', '1', 0);
|
||||||
@@ -197,16 +197,16 @@ INSERT INTO `dict_value` VALUES (199, 2, 'operatorLogType', 'host-terminal:sftp-
|
|||||||
INSERT INTO `dict_value` VALUES (200, 2, 'operatorLogType', 'host-terminal:sftp-set-content', '修改文件内容', '{}', 80, '2024-02-23 17:54:37', '2024-02-23 17:54:37', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (200, 2, 'operatorLogType', 'host-terminal:sftp-set-content', '修改文件内容', '{}', 80, '2024-02-23 17:54:37', '2024-02-23 17:54:37', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (201, 2, 'operatorLogType', 'host-terminal:sftp-upload', '上传文件', '{}', 90, '2024-02-23 17:54:52', '2024-02-23 17:54:52', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (201, 2, 'operatorLogType', 'host-terminal:sftp-upload', '上传文件', '{}', 90, '2024-02-23 17:54:52', '2024-02-23 17:54:52', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (202, 2, 'operatorLogType', 'host-terminal:sftp-download', '下载文件', '{}', 100, '2024-02-23 17:55:03', '2024-02-23 17:55:03', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (202, 2, 'operatorLogType', 'host-terminal:sftp-download', '下载文件', '{}', 100, '2024-02-23 17:55:03', '2024-02-23 17:55:03', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (203, 32, 'terminalTabColor', 'rgb(var(--red-6))', '红色', '{}', 10, '2024-03-01 15:07:41', '2024-03-01 15:07:41', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (203, 32, 'terminalTabColor', 'red', '红色', '{\"bg\": \"rgb(var(--red-2))\", \"color\": \"rgb(var(--red-6))\"}', 10, '2024-03-01 15:07:41', '2024-08-05 14:24:28', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (204, 32, 'terminalTabColor', 'rgb(var(--orange-6))', '橙色', '{}', 20, '2024-03-01 15:07:55', '2024-03-01 15:07:55', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (204, 32, 'terminalTabColor', 'orange', '橙色', '{\"bg\": \"rgb(var(--orange-2))\", \"color\": \"rgb(var(--orange-6))\"}', 20, '2024-03-01 15:07:55', '2024-08-05 14:24:23', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (205, 32, 'terminalTabColor', 'rgb(var(--yellow-6))', '黄色', '{}', 30, '2024-03-01 15:08:13', '2024-03-01 15:08:13', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (205, 32, 'terminalTabColor', 'yellow', '黄色', '{\"bg\": \"rgb(var(--yellow-2))\", \"color\": \"rgb(var(--yellow-6))\"}', 30, '2024-03-01 15:08:13', '2024-08-05 14:24:15', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (206, 32, 'terminalTabColor', 'rgb(var(--green-6))', '绿色', '{}', 40, '2024-03-01 15:08:23', '2024-03-01 15:08:23', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (206, 32, 'terminalTabColor', 'green', '绿色', '{\"bg\": \"rgb(var(--green-2))\", \"color\": \"rgb(var(--green-6))\"}', 40, '2024-03-01 15:08:23', '2024-08-05 14:24:09', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (207, 32, 'terminalTabColor', 'rgb(var(--cyan-6))', '青色', '{}', 50, '2024-03-01 15:08:46', '2024-03-01 15:08:46', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (207, 32, 'terminalTabColor', 'cyan', '青色', '{\"bg\": \"rgb(var(--cyan-2))\", \"color\": \"rgb(var(--cyan-6))\"}', 50, '2024-03-01 15:08:46', '2024-08-05 14:24:03', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (208, 32, 'terminalTabColor', 'rgb(var(--blue-6))', '浅蓝', '{}', 60, '2024-03-01 15:11:01', '2024-03-01 15:11:01', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (208, 32, 'terminalTabColor', 'blue', '浅蓝', '{\"bg\": \"rgb(var(--blue-2))\", \"color\": \"rgb(var(--blue-6))\"}', 60, '2024-03-01 15:11:01', '2024-08-05 14:23:59', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (209, 32, 'terminalTabColor', 'rgb(var(--arcoblue-6))', '蓝色', '{}', 70, '2024-03-01 15:11:11', '2024-03-01 15:11:11', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (209, 32, 'terminalTabColor', 'arcoblue', '蓝色', '{\"bg\": \"rgb(var(--arcoblue-2))\", \"color\": \"rgb(var(--arcoblue-6))\"}', 70, '2024-03-01 15:11:11', '2024-08-05 14:23:55', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (210, 32, 'terminalTabColor', 'rgb(var(--purple-6))', '紫色', '{}', 80, '2024-03-01 15:11:20', '2024-03-01 15:11:20', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (210, 32, 'terminalTabColor', 'purple', '紫色', '{\"bg\": \"rgb(var(--purple-2))\", \"color\": \"rgb(var(--purple-6))\"}', 80, '2024-03-01 15:11:20', '2024-08-05 14:23:51', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (211, 32, 'terminalTabColor', 'rgb(var(--pinkpurple-6))', '粉紫', '{}', 90, '2024-03-01 15:11:41', '2024-03-01 15:11:41', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (211, 32, 'terminalTabColor', 'pinkpurple', '粉紫', '{\"bg\": \"rgb(var(--pinkpurple-2))\", \"color\": \"rgb(var(--pinkpurple-6))\"}', 90, '2024-03-01 15:11:41', '2024-08-05 14:23:47', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (213, 32, 'terminalTabColor', 'rgb(var(--gray-6))', '灰色', '{}', 100, '2024-03-01 15:12:01', '2024-03-01 15:39:34', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (213, 32, 'terminalTabColor', 'gray', '灰色', '{\"bg\": \"rgb(var(--gray-2))\", \"color\": \"rgb(var(--gray-6))\"}', 100, '2024-03-01 15:12:01', '2024-08-05 14:23:43', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (214, 28, 'hostConnectStatus', 'FORCE_OFFLINE', '强制下线', '{\"color\": \"rgb(var(--red-6))\"}', 40, '2024-03-04 12:51:13', '2024-03-04 12:51:13', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (214, 28, 'hostConnectStatus', 'FORCE_OFFLINE', '强制下线', '{\"color\": \"rgb(var(--red-6))\"}', 40, '2024-03-04 12:51:13', '2024-03-04 12:51:13', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (215, 1, 'operatorLogModule', 'asset:host-connect-log', '主机连接日志', '{}', 2060, '2024-03-04 13:43:33', '2024-03-04 13:43:33', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (215, 1, 'operatorLogModule', 'asset:host-connect-log', '主机连接日志', '{}', 2060, '2024-03-04 13:43:33', '2024-03-04 13:43:33', '1', '1', 0);
|
||||||
INSERT INTO `dict_value` VALUES (216, 2, 'operatorLogType', 'host-connect-log:delete', '删除记录', '{}', 10, '2024-03-04 13:44:34', '2024-03-04 13:44:34', '1', '1', 0);
|
INSERT INTO `dict_value` VALUES (216, 2, 'operatorLogType', 'host-connect-log:delete', '删除记录', '{}', 10, '2024-03-04 13:44:34', '2024-03-04 13:44:34', '1', '1', 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user