diff --git a/packages/frontend/src/components/LayoutRenderer.vue b/packages/frontend/src/components/LayoutRenderer.vue
index cdb6376..3600482 100644
--- a/packages/frontend/src/components/LayoutRenderer.vue
+++ b/packages/frontend/src/components/LayoutRenderer.vue
@@ -155,11 +155,11 @@ const componentProps = computed(() => {
// WorkspaceConnectionList 需要转发 connect-request 等事件
return {
class: 'pane-content',
- // 绑定内部处理器以转发事件 (修正为 kebab-case)
+ // 绑定内部处理器以转发事件 (除了 request-add-connection)
onConnectRequest: (id: number) => emit('connect-request', id),
onOpenNewSession: (id: number) => emit('open-new-session', id),
- onRequestAddConnection: () => emit('request-add-connection'),
- onRequestEditConnection: (conn: any) => emit('request-edit-connection', conn), // 使用 any 避免类型问题
+ // onRequestAddConnection: () => { ... }, // 移除,将在模板中处理
+ onRequestEditConnection: (conn: any) => emit('request-edit-connection', conn),
};
case 'commandHistory':
case 'quickCommands':
@@ -234,7 +234,10 @@ const handlePaneResize = (eventData: { panes: Array<{ size: number; [key: string
@save-editor-tab="emit('saveEditorTab', $event)"
@connect-request="emit('connect-request', $event)"
@open-new-session="emit('open-new-session', $event)"
- @request-add-connection="emit('request-add-connection')"
+ @request-add-connection="() => { // 添加日志
+ console.log(`[LayoutRenderer ${props.layoutNode.id}] Received recursive 'request-add-connection', emitting upwards.`);
+ emit('request-add-connection');
+ }"
@request-edit-connection="emit('request-edit-connection', $event)"
/>
@@ -297,7 +300,22 @@ const handlePaneResize = (eventData: { panes: Array<{ size: number; [key: string
-
+
+ {
+ console.log(`[LayoutRenderer ${props.layoutNode.id}] Template received 'request-add-connection', emitting upwards.`);
+ emit('request-add-connection');
+ }"
+ />
+
+
diff --git a/packages/frontend/src/components/TerminalTabBar.vue b/packages/frontend/src/components/TerminalTabBar.vue
index 967c487..b9e18f2 100644
--- a/packages/frontend/src/components/TerminalTabBar.vue
+++ b/packages/frontend/src/components/TerminalTabBar.vue
@@ -27,7 +27,12 @@ const props = defineProps({
});
// 定义事件
-const emit = defineEmits(['activate-session', 'close-session', 'open-layout-configurator']); // 添加新事件
+const emit = defineEmits([
+ 'activate-session',
+ 'close-session',
+ 'open-layout-configurator',
+ 'request-add-connection-from-popup' // 新增:声明从弹窗发出的添加请求事件
+]);
const activateSession = (sessionId: string) => {
if (sessionId !== props.activeSessionId) {
@@ -57,6 +62,13 @@ const handlePopupConnect = (connectionId: number) => {
showConnectionListPopup.value = false; // 关闭弹出窗口
};
+// 新增:处理从弹窗内部发出的添加连接请求
+const handleRequestAddFromPopup = () => {
+ console.log('[TabBar] Received request-add-connection from popup component.');
+ showConnectionListPopup.value = false; // 关闭弹窗
+ emit('request-add-connection-from-popup'); // 向上发出事件
+};
+
// --- 新增:布局菜单处理 ---
const toggleLayoutMenu = () => {
console.log('Toggling layout menu visibility. Current state:', showLayoutMenu.value); // 添加日志
@@ -151,6 +163,7 @@ const handleTogglePane = (paneName: PaneName) => {
diff --git a/packages/frontend/src/components/WorkspaceConnectionList.vue b/packages/frontend/src/components/WorkspaceConnectionList.vue
index 4e9e156..54c4539 100644
--- a/packages/frontend/src/components/WorkspaceConnectionList.vue
+++ b/packages/frontend/src/components/WorkspaceConnectionList.vue
@@ -197,7 +197,13 @@ const handleOpenInNewTab = (connectionId: number) => {
:placeholder="t('workspaceConnectionList.searchPlaceholder')"
class="search-input"
/>
-
+
diff --git a/packages/frontend/src/views/WorkspaceView.vue b/packages/frontend/src/views/WorkspaceView.vue
index 0168c80..9d3da8f 100644
--- a/packages/frontend/src/views/WorkspaceView.vue
+++ b/packages/frontend/src/views/WorkspaceView.vue
@@ -64,8 +64,9 @@ onBeforeUnmount(() => {
sessionStore.cleanupAllSessions();
});
-// --- 本地方法 (仅处理 UI 状态) ---
+ // --- 本地方法 (仅处理 UI 状态) ---
const handleRequestAddConnection = () => {
+ console.log('[WorkspaceView] handleRequestAddConnection 被调用!'); // 添加日志确认事件到达
connectionToEdit.value = null;
showAddEditForm.value = true;
};
@@ -249,6 +250,7 @@ onBeforeUnmount(() => {
@activate-session="sessionStore.activateSession"
@close-session="sessionStore.closeSession"
@open-layout-configurator="handleOpenLayoutConfigurator"
+ @request-add-connection-from-popup="handleRequestAddConnection"
/>