From fc151216f131cc762828574a388e50b0ecb06571 Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Tue, 8 Jul 2025 00:34:30 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E9=80=BB=E8=BE=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orion-visor-ui/src/api/asset/host-extra.ts | 1 + .../src/store/modules/terminal/index.ts | 4 +- .../src/store/modules/terminal/types.ts | 1 - .../display/terminal-rdp-action-bar-block.vue | 17 ++------ .../display/terminal-ssh-action-bar-block.vue | 23 ++++------- .../display/terminal-ssh-display-block.vue | 20 +++------ .../display/terminal-ssh-right-menu-block.vue | 21 ++++------ .../display/terminal-vnc-action-bar-block.vue | 17 ++------ .../setting/extra/rdp-extra-form.vue | 2 +- .../setting/extra/vnc-extra-form.vue | 10 ++++- .../general/terminal-rdp-graph-block.vue | 17 ++------ .../general/terminal-rdp-session-block.vue | 16 ++------ .../general/terminal-ssh-interact-block.vue | 16 ++------ .../general/terminal-ssh-plugins-block.vue | 16 +------- .../general/terminal-vnc-graph-block.vue | 35 +++++----------- .../terminal/service/channel/vnc-channel.ts | 1 - .../terminal/types/use-terminal-preference.ts | 41 +++++++++++++++++++ 17 files changed, 104 insertions(+), 154 deletions(-) create mode 100644 orion-visor-ui/src/views/terminal/types/use-terminal-preference.ts diff --git a/orion-visor-ui/src/api/asset/host-extra.ts b/orion-visor-ui/src/api/asset/host-extra.ts index 08ebbbca..62419d8d 100644 --- a/orion-visor-ui/src/api/asset/host-extra.ts +++ b/orion-visor-ui/src/api/asset/host-extra.ts @@ -37,6 +37,7 @@ export interface HostRdpExtraSettingModel { export interface HostVncExtraSettingModel { port: number; lowBandwidthMode: boolean; + swapRedBlue: boolean; } // 标签额外配置 diff --git a/orion-visor-ui/src/store/modules/terminal/index.ts b/orion-visor-ui/src/store/modules/terminal/index.ts index 2d142b16..2722faa8 100644 --- a/orion-visor-ui/src/store/modules/terminal/index.ts +++ b/orion-visor-ui/src/store/modules/terminal/index.ts @@ -30,7 +30,7 @@ import { getPreference, updatePreference } from '@/api/user/preference'; import { getLatestConnectHostId } from '@/api/terminal/terminal-connect-log'; import { useCacheStore } from '@/store'; import { nextId } from '@/utils'; -import { isObject } from '@/utils/is'; +import { isArray, isObject } from '@/utils/is'; import { Message } from '@arco-design/web-vue'; import { TerminalSessionTypes, TerminalTabs } from '@/views/terminal/types/const'; import TerminalTabManager from '@/views/terminal/service/tab/terminal-tab-manager'; @@ -146,7 +146,7 @@ export default defineStore('terminal', { await updatePreference({ type: 'TERMINAL', item, - value: isObject(value) ? JSON.stringify(value) : value, + value: (isObject(value) || isArray(value)) ? JSON.stringify(value) : value, }); } catch (e) { Message.error('同步失败'); diff --git a/orion-visor-ui/src/store/modules/terminal/types.ts b/orion-visor-ui/src/store/modules/terminal/types.ts index 7bd40f11..0200445b 100644 --- a/orion-visor-ui/src/store/modules/terminal/types.ts +++ b/orion-visor-ui/src/store/modules/terminal/types.ts @@ -121,7 +121,6 @@ export interface TerminalVncGraphSetting { displayHeight?: number; colorDepth?: number; forceLossless?: boolean; - swapRedBlue?: boolean; cursor?: string; compressLevel?: number; qualityLevel?: number; diff --git a/orion-visor-ui/src/views/terminal/components/setting/display/terminal-rdp-action-bar-block.vue b/orion-visor-ui/src/views/terminal/components/setting/display/terminal-rdp-action-bar-block.vue index 8a8c1d54..57ac4007 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/display/terminal-rdp-action-bar-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/display/terminal-rdp-action-bar-block.vue @@ -40,25 +40,16 @@ diff --git a/orion-visor-ui/src/views/terminal/components/setting/display/terminal-ssh-right-menu-block.vue b/orion-visor-ui/src/views/terminal/components/setting/display/terminal-ssh-right-menu-block.vue index 02ef7f63..88f85126 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/display/terminal-ssh-right-menu-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/display/terminal-ssh-right-menu-block.vue @@ -26,7 +26,7 @@ class="action-item-wrapper" v-for="(action, index) in SshActionBarItems" :key="index"> -
+
@@ -62,7 +62,7 @@
{{ action.content }}
-
+
@@ -86,22 +86,15 @@ diff --git a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-rdp-session-block.vue b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-rdp-session-block.vue index 419645f3..f3eaa86e 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-rdp-session-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-rdp-session-block.vue @@ -36,25 +36,15 @@ diff --git a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-interact-block.vue b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-interact-block.vue index 27e2dfe3..0aa8a695 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-interact-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-interact-block.vue @@ -110,26 +110,16 @@ diff --git a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-plugins-block.vue b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-plugins-block.vue index 520a18f5..e0ce53fb 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-plugins-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-ssh-plugins-block.vue @@ -40,23 +40,11 @@ diff --git a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-vnc-graph-block.vue b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-vnc-graph-block.vue index 4ac5634a..237c0d08 100644 --- a/orion-visor-ui/src/views/terminal/components/setting/general/terminal-vnc-graph-block.vue +++ b/orion-visor-ui/src/views/terminal/components/setting/general/terminal-vnc-graph-block.vue @@ -32,9 +32,12 @@ - - - + + + @@ -59,15 +62,6 @@ placeholder="图像质量等级 0 ~ 9" /> - - - - - -
@@ -80,23 +74,16 @@ diff --git a/orion-visor-ui/src/views/terminal/service/channel/vnc-channel.ts b/orion-visor-ui/src/views/terminal/service/channel/vnc-channel.ts index 2216786e..9efa3b0a 100644 --- a/orion-visor-ui/src/views/terminal/service/channel/vnc-channel.ts +++ b/orion-visor-ui/src/views/terminal/service/channel/vnc-channel.ts @@ -17,7 +17,6 @@ export default class VncChannel extends BaseGuacdChannel { extra: { colorDepth: setting.colorDepth || 24, forceLossless: setting.forceLossless, - swapRedBlue: setting.swapRedBlue, cursor: setting.cursor, compressLevel: setting.compressLevel, qualityLevel: setting.qualityLevel, diff --git a/orion-visor-ui/src/views/terminal/types/use-terminal-preference.ts b/orion-visor-ui/src/views/terminal/types/use-terminal-preference.ts new file mode 100644 index 00000000..8eb43fd9 --- /dev/null +++ b/orion-visor-ui/src/views/terminal/types/use-terminal-preference.ts @@ -0,0 +1,41 @@ +import { ref, watch } from 'vue'; +import { useDebounceFn } from '@vueuse/core'; +import { useTerminalStore } from '@/store'; +import { isArray, isObject } from '@/utils/is'; + +const { preference, updateTerminalPreference } = useTerminalStore(); + +// 更新终端偏好 +export default function useTerminalPreference(key: string, + setLocal = false, + filler?: (v: T, before: T) => void, + delay = 500) { + // 默认配置 + let initialValue = preference[key as keyof typeof preference] as T; + if (isArray(initialValue)) { + initialValue = [...initialValue] as T; + } else if (isObject(initialValue)) { + initialValue = { ...initialValue } as T; + } + const formModel = ref(initialValue); + + // 防抖更新 + const debouncedUpdate = useDebounceFn(async (value: T) => { + // 更新 + await updateTerminalPreference(key, value, setLocal); + }, delay); + + // 监听表单 + watch(formModel, async (v, before) => { + if (!v) { + return; + } // 填充 + filler?.(v, before); + // 更新 + await debouncedUpdate(v); + }, { deep: true }); + + return { + formModel, + }; +}