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