Skip to content

Commit 44c5e16

Browse files
committed
fix(webui): handle history wheel on preview container
1 parent f842562 commit 44c5e16

2 files changed

Lines changed: 12 additions & 40 deletions

File tree

dashboard/src/components/chat/MessageList.vue

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
<template>
2-
<div
3-
class="messages-container"
4-
ref="messageContainer"
5-
:class="{ 'is-dark': isDark }"
6-
:tabindex="manualWheelScroll ? -1 : null"
7-
@wheel="handleWheelScroll">
2+
<div class="messages-container" ref="messageContainer" :class="{ 'is-dark': isDark }">
83
<!-- 加载指示器 -->
94
<div v-if="isLoadingMessages" class="loading-overlay" :class="{ 'is-dark': isDark }">
105
<v-progress-circular indeterminate size="48" width="4" color="primary"></v-progress-circular>
@@ -229,10 +224,6 @@ export default {
229224
isLoadingMessages: {
230225
type: Boolean,
231226
default: false
232-
},
233-
manualWheelScroll: {
234-
type: Boolean,
235-
default: false
236227
}
237228
},
238229
emits: ['openImagePreview', 'replyMessage', 'replyWithText', 'openRefs'],
@@ -767,34 +758,6 @@ export default {
767758
this.isUserNearBottom = distanceFromBottom <= this.scrollThreshold;
768759
}
769760
},
770-
771-
handleWheelScroll(event) {
772-
if (!this.manualWheelScroll || event.ctrlKey) {
773-
return;
774-
}
775-
776-
const container = this.$refs.messageContainer;
777-
if (!container) {
778-
return;
779-
}
780-
781-
if (document.activeElement !== container) {
782-
container.focus({ preventScroll: true });
783-
}
784-
785-
const deltaMultiplier = event.deltaMode === 1
786-
? 16
787-
: event.deltaMode === 2
788-
? container.clientHeight
789-
: 1;
790-
791-
container.scrollTop += event.deltaY * deltaMultiplier;
792-
793-
event.preventDefault();
794-
event.stopPropagation();
795-
this.handleScroll();
796-
},
797-
798761
// 组件销毁时移除监听器
799762
beforeUnmount() {
800763
const container = this.$refs.messageContainer;

dashboard/src/views/ConversationPage.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,17 @@
198198
</div>
199199

200200
<!-- 预览模式 - 聊天界面 -->
201-
<div v-else class="conversation-messages-container" style="background-color: var(--v-theme-surface);">
201+
<div v-else class="conversation-messages-container" style="background-color: var(--v-theme-surface);"
202+
ref="messagesContainer"
203+
@wheel.prevent="onContainerWheel">
202204
<!-- 空对话提示 -->
203205
<div v-if="conversationHistory.length === 0" class="text-center py-5">
204206
<v-icon size="48" color="grey">mdi-chat-remove</v-icon>
205207
<p class="text-disabled mt-2">{{ tm('status.emptyContent') }}</p>
206208
</div>
207209

208210
<!-- 消息列表组件 -->
209-
<MessageList v-else :messages="formattedMessages" :isDark="isDark" :manualWheelScroll="true" />
211+
<MessageList v-else :messages="formattedMessages" :isDark="isDark" />
210212
</div>
211213
</v-card-text>
212214

@@ -1052,6 +1054,13 @@ export default {
10521054
return parts;
10531055
},
10541056
1057+
// Manually handle wheel scrolling inside the dialog preview container.
1058+
onContainerWheel(event) {
1059+
const el = this.$refs.messagesContainer;
1060+
if (!el) return;
1061+
el.scrollTop += event.deltaY;
1062+
},
1063+
10551064
// 从内容中提取文本(保留用于其他用途)
10561065
extractTextFromContent(content) {
10571066
if (typeof content === 'string') {

0 commit comments

Comments
 (0)