diff --git a/web/src/components/AgentChatComponent.vue b/web/src/components/AgentChatComponent.vue index 4f41df8b..d45e706d 100644 --- a/web/src/components/AgentChatComponent.vue +++ b/web/src/components/AgentChatComponent.vue @@ -4,6 +4,7 @@ :current-chat-id="currentChatId" :chats-list="chatsList" :is-sidebar-open="chatUIStore.isSidebarOpen" + :is-floating="isSidebarFloating" :is-initial-render="localUIState.isInitialRender" :single-mode="props.singleMode" :agents="agents" @@ -72,7 +73,7 @@
-
+
isStreaming.value) // ==================== SCROLL & RESIZE HANDLING ==================== const scrollController = new ScrollController('.chat-main') +const chatMainRef = ref(null) +const isSidebarFloating = ref(false) +let chatMainResizeObserver = null onMounted(() => { nextTick(() => { @@ -498,6 +502,30 @@ onMounted(() => { if (chatMainContainer) { chatMainContainer.addEventListener('scroll', scrollController.handleScroll, { passive: true }) } + + if (window.ResizeObserver && chatMainRef.value) { + chatMainResizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const width = entry.contentRect.width + const isTakingSpace = chatUIStore.isSidebarOpen && !isSidebarFloating.value + + if (isTakingSpace) { + if (width < 600) { + isSidebarFloating.value = true + chatUIStore.isSidebarOpen = false + localStorage.setItem('chat_sidebar_open', 'false') + } + } else { + if (width >= 880) { + isSidebarFloating.value = false + } else { + isSidebarFloating.value = true + } + } + } + }) + chatMainResizeObserver.observe(chatMainRef.value) + } }) setTimeout(() => { localUIState.isInitialRender = false @@ -506,6 +534,9 @@ onMounted(() => { onUnmounted(() => { scrollController.cleanup() + if (chatMainResizeObserver) { + chatMainResizeObserver.disconnect() + } // 清理所有线程状态 resetOnGoingConv() }) diff --git a/web/src/components/ChatSidebarComponent.vue b/web/src/components/ChatSidebarComponent.vue index 07773148..8c91e043 100644 --- a/web/src/components/ChatSidebarComponent.vue +++ b/web/src/components/ChatSidebarComponent.vue @@ -1,7 +1,7 @@