Browse Source

去除了滚动到视口播放音频的逻辑,加载完成直接播放。

songjie/feature-20250628160649-上线前优化
宋杰 5 days ago
parent
commit
6c36fe778d
  1. 93
      src/views/AiEmotion.vue

93
src/views/AiEmotion.vue

@ -28,7 +28,7 @@
<div v-if="isLoading" class="loading-container">
<div class="loading-content">
<div class="loading-spinner"></div>
<div class="loading-text">AI小财神正在分析中请稍候...</div>
<div class="loading-text">AI小财神正在加载图表数据和音频内容请稍候...</div>
</div>
</div>
@ -320,8 +320,7 @@ const parsedConclusion = computed(() => {
//
watch(currentStock, (newStock) => {
if (newStock && newStock.apiData) {
isPageLoaded.value = true;
isLoading.value = false; //
// handleSendMessage
//
stopAudio();
//
@ -390,9 +389,11 @@ watch(currentStock, (newStock) => {
};
}
//
if (isPageLoaded.value) {
nextTick(() => {
renderCharts(newStock.apiData);
console.log('0000000000000000000000000', newStock.apiData)
console.log('图表数据已准备完成,开始渲染:', newStock.apiData)
//
setTimeout(() => {
if (scenarioApplicationRef.value && parsedConclusion.value) {
@ -465,7 +466,10 @@ watch(currentStock, (newStock) => {
}, 500); // 500ms
});
} else {
isPageLoaded.value = false;
console.log('页面尚未加载完成,等待数据加载完成后再渲染图表');
}
} else {
console.log('股票数据不存在或API数据未加载');
}
}, { immediate: true });
@ -495,22 +499,20 @@ watch(parsedConclusion, (newConclusion) => {
audioUrl.value = voiceUrl;
console.log('音频URL已准备,检查是否需要立即触发效果');
//
//
nextTick(() => {
setTimeout(() => {
if (scenarioApplicationRef.value && currentStock.value?.stockInfo) {
if (currentStock.value?.stockInfo && isPageLoaded.value) {
const stockCode = currentStock.value.stockInfo.code || currentStock.value.stockInfo.symbol;
const rect = scenarioApplicationRef.value.getBoundingClientRect();
const isInViewport = rect.top < window.innerHeight && rect.bottom > 0;
if (isInViewport && parsedConclusion.value && stockCode) {
if (parsedConclusion.value && stockCode) {
//
if (stockTypewriterShown.value.has(stockCode)) {
return;
}
//
console.log('该股票第一次音频准备完成且场景应用部分在视口中,立即触发效果');
console.log('音频准备完成且页面已加载,立即触发效果');
hasTriggeredTypewriter.value = true;
hasTriggeredAudio.value = true;
@ -785,6 +787,11 @@ async function handleSendMessage(input) {
return;
}
//
isRotating.value = true;
const previousMessages = [...messages.value]; //
messages.value = []; //
// 使
const hasPermission = userStore.brainPerssion || userStore.swordPerssion ||
userStore.pricePerssion || userStore.timePerssion ||
@ -796,6 +803,9 @@ async function handleSendMessage(input) {
messages.value.push(userMessage);
const aiMessage = reactive({ sender: 'ai', text: '您当前没有可用次数,请联系客服或购买服务包。' });
messages.value.push(aiMessage);
//
isRotating.value = false;
messages.value = [...previousMessages, ...messages.value];
return;
}
@ -827,15 +837,15 @@ async function handleSendMessage(input) {
//
if (!parsedData || !parsedData.market || !parsedData.code) {
// refuse
// refuse
const aiMessage = reactive({ sender: 'ai', text: processRefuseMessage(parsedData.refuse) });
messages.value.push(aiMessage);
isRotating.value = false;
messages.value = [...previousMessages, ...messages.value];
return;
}
//
//
isRotating.value = true;
//
//
isLoading.value = true;
@ -863,16 +873,57 @@ async function handleSendMessage(input) {
const conclusionResponse = await conclusionResult.json();
console.log("第二个工作流接口返回数据:", conclusionResponse);
//
if (conclusionResponse && conclusionResponse.data && fetchDataResult) {
// store
if (conclusionResponse && conclusionResponse.data) {
conclusionData.value = conclusionResponse.data;
// store
emotionStore.updateActiveStockConclusion(conclusionResponse.data);
//
isLoading.value = false;
isPageLoaded.value = true;
console.log('所有数据加载完成,开始渲染页面');
//
nextTick(() => {
if (currentStock.value && currentStock.value.apiData) {
renderCharts(currentStock.value.apiData);
console.log('数据加载完成后开始渲染图表');
//
if (parsedConclusion.value && audioUrl.value) {
const stockCode = currentStock.value.stockInfo?.code || currentStock.value.stockInfo?.symbol;
if (stockCode && !stockTypewriterShown.value.has(stockCode)) {
console.log('数据加载完成,立即触发音频和打字机效果');
startTypewriterEffect(parsedConclusion.value);
if (!stockAudioPlayed.value.has(stockCode)) {
stockAudioPlayed.value.set(stockCode, true);
playAudio(audioUrl.value);
}
stockTypewriterShown.value.set(stockCode, true);
}
}
}
});
} else {
//
isLoading.value = false;
const aiMessage = reactive({ sender: 'ai', text: '数据加载失败,请重试' });
messages.value.push(aiMessage);
isRotating.value = false;
messages.value = [...previousMessages, ...messages.value];
return;
}
} catch (error) {
const aiMessage = reactive({ sender: 'ai', text: '请求工作流接口失败,请检查网络连接' });
messages.value.push(aiMessage);
return; //
//
isRotating.value = false;
messages.value = [...previousMessages, ...messages.value];
return;
} finally {
//
if (isRotating.value) {
@ -925,13 +976,17 @@ async function fetchData(code, market, stockName, queryText) {
};
// store
emotionStore.addStock(stockData);
return true; //
} else {
const aiMessage = reactive({ sender: 'ai', text: '请求失败,请检查网络连接' });
const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' });
messages.value.push(aiMessage);
return false; //
}
} catch (error) {
const aiMessage = reactive({ sender: 'ai', text: '请求失败,请检查网络连接' });
console.error('fetchData error:', error);
const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' });
messages.value.push(aiMessage);
return false; //
}
}

Loading…
Cancel
Save