fix: 修复侧边栏UI BUG
This commit is contained in:
parent
aeaeaad909
commit
e803a79813
@ -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%);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user