From 1a6067c879699a4b53407be23a6461d41327c597 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Mon, 21 Apr 2025 23:23:54 +0800 Subject: [PATCH] update --- .../src/settings/settings.controller.ts | 3 +- .../src/components/LayoutRenderer.vue | 19 ++- packages/frontend/src/locales/en.json | 12 ++ packages/frontend/src/locales/zh.json | 12 ++ .../frontend/src/stores/settings.store.ts | 17 +- packages/frontend/src/views/SettingsView.vue | 152 ++++++++++++++---- 6 files changed, 174 insertions(+), 41 deletions(-) diff --git a/packages/backend/src/settings/settings.controller.ts b/packages/backend/src/settings/settings.controller.ts index f51820c..955a5d9 100644 --- a/packages/backend/src/settings/settings.controller.ts +++ b/packages/backend/src/settings/settings.controller.ts @@ -35,7 +35,8 @@ export const settingsController = { 'language', 'ipWhitelist', 'maxLoginAttempts', 'loginBanDuration', 'showPopupFileEditor', 'shareFileEditorTabs', 'ipWhitelistEnabled', 'autoCopyOnSelect', 'dockerStatusIntervalSeconds', 'dockerDefaultExpand', - 'statusMonitorIntervalSeconds' // +++ 添加状态监控间隔键 +++ + 'statusMonitorIntervalSeconds', // +++ 添加状态监控间隔键 +++ + 'workspaceSidebarPersistent' // +++ 添加侧边栏固定键 +++ ]; const filteredSettings: Record = {}; for (const key in settingsToUpdate) { diff --git a/packages/frontend/src/components/LayoutRenderer.vue b/packages/frontend/src/components/LayoutRenderer.vue index 7e5ebb6..86b2ff7 100644 --- a/packages/frontend/src/components/LayoutRenderer.vue +++ b/packages/frontend/src/components/LayoutRenderer.vue @@ -7,6 +7,7 @@ import { Splitpanes, Pane } from 'splitpanes'; import { useLayoutStore, type LayoutNode, type PaneName } from '../stores/layout.store'; import { useSessionStore } from '../stores/session.store'; import { useFileEditorStore } from '../stores/fileEditor.store'; // <-- Import FileEditorStore +import { useSettingsStore } from '../stores/settings.store'; // +++ Import SettingsStore +++ import { storeToRefs } from 'pinia'; import { defineEmits } from 'vue'; @@ -67,8 +68,10 @@ const emit = defineEmits({ const layoutStore = useLayoutStore(); const sessionStore = useSessionStore(); const fileEditorStore = useFileEditorStore(); // <-- Initialize FileEditorStore +const settingsStore = useSettingsStore(); // +++ Initialize SettingsStore +++ const { t } = useI18n(); // <-- Get translation function const { activeSession } = storeToRefs(sessionStore); +const { workspaceSidebarPersistentBoolean } = storeToRefs(settingsStore); // +++ Get sidebar setting +++ const { sidebarPanes } = storeToRefs(layoutStore); const { orderedTabs: editorTabsFromStore, activeTabId: activeEditorTabIdFromStore } = storeToRefs(fileEditorStore); // <-- Get editor state @@ -354,6 +357,14 @@ watch(() => props.activeSessionId, () => { // closeSidebars(); // 取消注释以在切换会话时关闭侧栏 }); +// +++ 新方法:处理主内容区域点击,用于非固定模式下关闭侧边栏 +++ +const handleMainAreaClick = () => { + // 仅当侧边栏激活且不处于固定模式时才关闭 + if ((activeLeftSidebarPane.value || activeRightSidebarPane.value) && !workspaceSidebarPersistentBoolean.value) { + closeSidebars(); + } +}; + // --- Debug Watcher for sidebarPanes from store --- watch(sidebarPanes, (newVal) => { console.log('[LayoutRenderer] Received updated sidebarPanes from store:', JSON.parse(JSON.stringify(newVal))); @@ -393,7 +404,7 @@ const getIconClasses = (paneName: PaneName): string[] => { -
+