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, + }; +}