From 2016b87b6e799e8bf2c70f3994de0ae1bf65a4a2 Mon Sep 17 00:00:00 2001 From: jing <1683105490@qq.com> Date: Wed, 23 Sep 2026 17:12:11 +0800 Subject: [PATCH] =?UTF-8?q?chore=EF=BC=9A=E5=9B=9E=E7=AD=94=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E8=A7=86=E5=8F=A3=E9=9A=8F=E6=96=87=E5=AD=97=E5=A2=9E?= =?UTF-8?q?=E9=95=BF=E4=B8=80=E7=9B=B4=E6=98=AF=E8=B4=B4=E7=9D=80=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E4=B8=80=E5=8F=A5=E5=BE=80=E4=B8=8A=E8=B5=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages_tool/ai-chat/ai-chat-message.vue | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pages_tool/ai-chat/ai-chat-message.vue b/pages_tool/ai-chat/ai-chat-message.vue index 7f6d66b..9c8add5 100644 --- a/pages_tool/ai-chat/ai-chat-message.vue +++ b/pages_tool/ai-chat/ai-chat-message.vue @@ -2402,17 +2402,20 @@ _handleStreamError(msg) { return m + 'm' + (s < 10 ? '0' + s : s) + 's' }, - // 滚动到底部 - 统一使用 scroll-into-view + // 滚动到底部 - 流式长回答时持续跟随最新文字 + // 关键: 之前用 scroll-into-view 把最后一条消息滚入视野, 但流式过程中 AI 消息 id 不变, + // scroll-into-view 只在 id 变化/重新赋值时触发, 且会把元素"顶到顶部对齐"而非贴底, + // 导致长回答越写越长时, 最新文字被挤出可视区、看不到(你反馈的问题)。 + // 改法: 改用 scroll-top 赋一个不断递增且恒大于内容高度的值, 强制滚动条贴底, + // 每个新文字块到达都重设 → 视口随答案增长缓缓上移, 始终显示 AI 最新回复。 scrollToBottom() { if (this.messages.length === 0) return - // 取真实最后一条消息(包括空内容的流式消息) - const lastMsg = this.messages[this.messages.length - 1] - const lastIndex = this.messages.length - 1 - const key = lastMsg.id || lastMsg.timestamp || lastIndex - // 先清空再设置,确保 scroll-into-view 重新触发 + // 取消可能冲突的 scroll-into-view (搜索跳转用, 不走这里) this.scrollIntoViewId = '' this.$nextTick(() => { - this.scrollIntoViewId = 'msg-' + key + '-' + lastIndex + // 递增超大值: 保证每次调用都触发重新滚动(同值在部分平台不重排), 且恒大于内容高度=贴底 + this._bottomCounter = (this._bottomCounter || 0) + 100000 + this.scrollTop = this._bottomCounter }) },