diff --git a/packages/backend/src/settings/settings.controller.ts b/packages/backend/src/settings/settings.controller.ts index 8107242..658a6c0 100644 --- a/packages/backend/src/settings/settings.controller.ts +++ b/packages/backend/src/settings/settings.controller.ts @@ -41,6 +41,7 @@ export const settingsController = { 'autoCopyOnSelect', 'dockerStatusIntervalSeconds', 'dockerDefaultExpand', 'statusMonitorIntervalSeconds', // +++ 添加状态监控间隔键 +++ 'workspaceSidebarPersistent', // +++ 添加侧边栏固定键 +++ + 'showPopupFileManager', // +++ 添加弹窗文件管理器设置键 +++ 'sidebarPaneWidths', // +++ 添加侧边栏宽度对象键 +++ 'fileManagerRowSizeMultiplier', // +++ 添加文件管理器行大小键 +++ 'fileManagerColWidths', // +++ 添加文件管理器列宽键 +++ diff --git a/packages/frontend/src/components/CommandInputBar.vue b/packages/frontend/src/components/CommandInputBar.vue index 2d60782..aab1960 100644 --- a/packages/frontend/src/components/CommandInputBar.vue +++ b/packages/frontend/src/components/CommandInputBar.vue @@ -9,7 +9,8 @@ import { useQuickCommandsStore } from '../stores/quickCommands.store'; import { useCommandHistoryStore } from '../stores/commandHistory.store'; import QuickCommandsModal from './QuickCommandsModal.vue'; // +++ Import the modal component +++ import SuspendedSshSessionsModal from './SuspendedSshSessionsModal.vue'; // +++ Import the new modal +++ -import { useWorkspaceEventEmitter } from '../composables/workspaceEvents'; +import { useFileEditorStore } from '../stores/fileEditor.store'; // +++ Import File Editor Store +++ +import { useWorkspaceEventEmitter } from '../composables/workspaceEvents'; // Disable attribute inheritance as this component has multiple root nodes (div + modal) defineOptions({ inheritAttrs: false }); @@ -23,9 +24,10 @@ const settingsStore = useSettingsStore(); const quickCommandsStore = useQuickCommandsStore(); const commandHistoryStore = useCommandHistoryStore(); const sessionStore = useSessionStore(); // +++ 初始化 Session Store +++ +const fileEditorStore = useFileEditorStore(); // +++ Initialize File Editor Store +++ // Get reactive setting from store -const { commandInputSyncTarget } = storeToRefs(settingsStore); +const { commandInputSyncTarget, showPopupFileManagerBoolean, showPopupFileEditorBoolean } = storeToRefs(settingsStore); // +++ Import showPopupFileEditorBoolean +++ // Get reactive state and actions from quick commands store const { selectedIndex: quickCommandsSelectedIndex, flatVisibleCommands: quickCommandsFiltered } = storeToRefs(quickCommandsStore); const { resetSelection: resetQuickCommandsSelection } = quickCommandsStore; @@ -298,6 +300,28 @@ const closeSuspendedSshSessionsModal = () => { showSuspendedSshSessionsModal.value = false; }; +// +++ Function to request opening the file manager modal via event bus +++ +const openFileManagerModal = () => { + if (activeSessionId.value) { + console.log(`[CommandInputBar] Emitting fileManager:openModalRequest for session: ${activeSessionId.value}`); + emitWorkspaceEvent('fileManager:openModalRequest', { sessionId: activeSessionId.value }); + } else { + console.warn('[CommandInputBar] Cannot open file manager modal: No active session ID.'); + // Optionally, show a notification to the user + } +}; + +// +++ Function to request opening the file editor modal +++ +const openFileEditorModal = () => { + if (activeSessionId.value) { + console.log(`[CommandInputBar] Triggering popup editor for session: ${activeSessionId.value}`); + fileEditorStore.triggerPopup('', activeSessionId.value); // Call store action directly + } else { + console.warn('[CommandInputBar] Cannot open file editor modal: No active session ID.'); + // Optionally, show a notification to the user + } +}; + // +++ Handler for command execution from the modal +++ const handleQuickCommandExecute = (command: string) => { console.log(`[CommandInputBar] Executing quick command: ${command}`); @@ -418,6 +442,22 @@ const handleQuickCommandExecute = (command: string) => { + + + + @@ -434,6 +474,7 @@ const handleQuickCommandExecute = (command: string) => { :is-visible="showSuspendedSshSessionsModal" @close="closeSuspendedSshSessionsModal" /> +