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