fix: 修复侧边栏UI BUG

This commit is contained in:
Wenjie Zhang 2025-05-18 17:58:27 +08:00
parent aeaeaad909
commit e803a79813
2 changed files with 31 additions and 11 deletions

View File

@ -5,12 +5,13 @@
:current-chat-id="currentChatId" :current-chat-id="currentChatId"
:chats-list="chatsList" :chats-list="chatsList"
:is-sidebar-open="state.isSidebarOpen" :is-sidebar-open="state.isSidebarOpen"
:is-initial-render="state.isInitialRender"
@create-chat="createNewChat" @create-chat="createNewChat"
@select-chat="selectChat" @select-chat="selectChat"
@delete-chat="deleteChat" @delete-chat="deleteChat"
@rename-chat="renameChat" @rename-chat="renameChat"
@toggle-sidebar="toggleSidebar" @toggle-sidebar="toggleSidebar"
:class="{'floating-sidebar': isSmallContainer, 'collapsed': !state.isSidebarOpen && isSmallContainer}" :class="{'floating-sidebar': isSmallContainer, 'sidebar-open': state.isSidebarOpen, 'no-transition': state.isInitialRender}"
/> />
<div class="sidebar-backdrop" v-if="state.isSidebarOpen && isSmallContainer" @click="toggleSidebar"></div> <div class="sidebar-backdrop" v-if="state.isSidebarOpen && isSmallContainer" @click="toggleSidebar"></div>
<div class="chat"> <div class="chat">
@ -129,10 +130,11 @@ const props = defineProps({
const state = reactive({ const state = reactive({
...props.state, ...props.state,
debug_mode: computed(() => props.state.debug_mode ?? false), debug_mode: computed(() => props.state.debug_mode ?? false),
isSidebarOpen: false, isSidebarOpen: localStorage.getItem('chat_sidebar_open') === 'true' || false,
waitingServerResponse: false, waitingServerResponse: false,
isProcessingRequest: false, isProcessingRequest: false,
creatingNewChat: false creatingNewChat: false,
isInitialRender: true
}); });
// //
@ -159,6 +161,11 @@ onMounted(() => {
resizeObserver.observe(chatContainerRef.value); resizeObserver.observe(chatContainerRef.value);
} }
}); });
//
setTimeout(() => {
state.isInitialRender = false;
}, 300);
}); });
onUnmounted(() => { onUnmounted(() => {
@ -671,6 +678,7 @@ const scrollToBottom = async () => {
const toggleSidebar = () => { const toggleSidebar = () => {
state.isSidebarOpen = !state.isSidebarOpen; state.isSidebarOpen = !state.isSidebarOpen;
localStorage.setItem('chat_sidebar_open', state.isSidebarOpen);
console.log("toggleSidebar", state.isSidebarOpen); console.log("toggleSidebar", state.isSidebarOpen);
} }
@ -774,6 +782,10 @@ const mergeMessageChunk = (chunks) => {
width: 80% !important; width: 80% !important;
max-width: 300px; max-width: 300px;
&.no-transition {
transition: none !important;
}
&.collapsed { &.collapsed {
transform: translateX(-100%); transform: translateX(-100%);
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="chat-sidebar" :class="{ 'collapsed': !props.isSidebarOpen }"> <div class="chat-sidebar" :class="{'sidebar-open': isSidebarOpen, 'no-transition': isInitialRender}">
<div class="sidebar-header"> <div class="sidebar-header">
<div class="header-title">{{ currentAgentId }}</div> <div class="header-title">{{ currentAgentId }}</div>
<div class="header-actions"> <div class="header-actions">
@ -78,6 +78,10 @@ const props = defineProps({
isSidebarOpen: { isSidebarOpen: {
type: Boolean, type: Boolean,
default: false default: false
},
isInitialRender: {
type: Boolean,
default: false
} }
}); });
@ -86,7 +90,6 @@ const emit = defineEmits(['create-chat', 'select-chat', 'delete-chat', 'rename-c
// //
const loading = ref(false); const loading = ref(false);
// //
const createNewChat = () => { const createNewChat = () => {
emit('create-chat'); emit('create-chat');
@ -157,18 +160,23 @@ const toggleCollapse = () => {
<style lang="less" scoped> <style lang="less" scoped>
.chat-sidebar { .chat-sidebar {
width: 280px; width: 0;
height: 100%; height: 100%;
background-color: #f9f9f9; background-color: #f9f9f9;
border-right: 1px solid #e8e8e8;
transition: all 0.3s ease; transition: all 0.3s ease;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
border: none;
overflow: hidden;
&.collapsed { &.no-transition {
width: 0; transition: none !important;
border: none; }
overflow: hidden;
&.sidebar-open {
width: 280px;
max-width: 300px;
border-right: 1px solid #e8e8e8;
} }
.sidebar-header { .sidebar-header {