diff --git a/src/views/AiEmotion.vue b/src/views/AiEmotion.vue index c3f3fb3..8c25099 100644 --- a/src/views/AiEmotion.vue +++ b/src/views/AiEmotion.vue @@ -587,6 +587,8 @@ const addStock = (stockData) => { // 设置为历史记录模式,并重置用户主动搜索标志 isHistoryMode.value = true; isUserInitiated.value = false; + // 历史记录恢复场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 1. 先清空页面显示节点和stockList中的数据 isPageLoaded.value = false; // 隐藏页面显示节点 @@ -666,6 +668,7 @@ const hasTriggeredAudio = ref(false); // 是否已触发音频播放 const hasTriggeredTypewriter = ref(false); // 是否已触发打字机效果 const intersectionObserver = ref(null); // 存储observer实例 const isUserInitiated = ref(false); // 标记是否为用户主动搜索 +const shouldEnableAutoScroll = ref(false); // 标记是否应该启动自动滚动(仅在搜索新数据成功后为true) // 打字机效果相关的变量已移除,现在直接使用parsedConclusion显示内容 @@ -2202,6 +2205,8 @@ async function handleSendMessage(input, onComplete) { messages.value = []; // 清空已添加股票的记录,避免重复添加 addedStocks.value.clear(); + // 搜索新数据成功,启用自动滚动 + shouldEnableAutoScroll.value = true; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部 @@ -2323,6 +2328,8 @@ async function handleSendMessage(input, onComplete) { // 使用nextTick确保DOM更新后清空对话显示并启动高度监听器 nextTick(() => { messages.value = []; + // 搜索失败恢复场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部 @@ -2410,6 +2417,8 @@ async function fetchData(code, market, stockName, queryText, stockId) { // 使用nextTick确保DOM更新后清空对话显示并启动高度监听器 nextTick(() => { messages.value = []; + // 数据验证失败恢复场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部 @@ -2468,6 +2477,8 @@ async function fetchData(code, market, stockName, queryText, stockId) { // 使用nextTick确保DOM更新后清空对话显示并启动高度监听器 nextTick(() => { messages.value = []; + // API请求失败恢复场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部 @@ -2510,6 +2521,8 @@ async function fetchData(code, market, stockName, queryText, stockId) { // 使用nextTick确保DOM更新后清空对话显示并启动高度监听器 nextTick(() => { messages.value = []; + // 网络异常恢复场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部 @@ -3011,6 +3024,12 @@ const startHeightObserver = () => { // 先停止之前的监听器 stopHeightObserver(); + // 只有在应该启用自动滚动时才启动监听器 + if (!shouldEnableAutoScroll.value) { + console.log("跳过启动自动滚动监听器:非搜索新数据场景"); + return; + } + isAutoScrollEnabled.value = true; // 创建ResizeObserver监听页面内容变化 @@ -3219,6 +3238,8 @@ onMounted(async () => { // 使用nextTick确保DOM更新后清空对话显示并启动高度监听器 nextTick(() => { messages.value = []; + // 组件挂载时恢复数据场景,不启用自动滚动 + shouldEnableAutoScroll.value = false; // 启动页面高度监听器,实时监听内容变化并自动滚动 startHeightObserver(); // 立即滚动到底部