Browse Source

修复情绪大模型结论闪烁的问题。

songjie/feature-20250628160649-上线前优化
宋杰 4 weeks ago
parent
commit
0aa9440331
  1. 82
      src/views/AiEmotion.vue

82
src/views/AiEmotion.vue

@ -276,10 +276,11 @@
<div class="scenario-application-section" ref="scenarioApplicationRef">
<img src="@/assets/img/AiEmotion/场景应用.png" alt="场景应用标题" />
<div class="bk-image">
<div class="conclusion-container">
<!-- 只有在状态准备好时才显示结论内容 -->
<div class="conclusion-container" v-if="isStockStateReady(stock)">
<!-- 使用当前股票项的结论数据显示内容支持打字机效果 -->
<!-- L1: 情绪监控 -->
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).one) || (getStockConclusion(stock) && !getStockTypewriterVisibility(stock) && (getStockConclusion(stock).one1 || getStockConclusion(stock).one2))">
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).one) || (getStockConclusion(stock) && !getStockTypewriterTexts(stock) && (getStockConclusion(stock).one1 || getStockConclusion(stock).one2))">
<h4 class="conclusion-title">L1: 情绪监控</h4>
<!-- 打字机效果文本 -->
<p class="conclusion-text" v-if="getStockTypewriterTexts(stock) && getStockTypewriterTexts(stock).one1">
@ -289,51 +290,56 @@
{{ getStockTypewriterTexts(stock).one2 }}
</p>
<!-- 完整文本 -->
<p class="conclusion-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock) && getStockConclusion(stock).one1">
<p class="conclusion-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock) && getStockConclusion(stock).one1">
{{ getStockConclusion(stock).one1 }}
</p>
<p class="conclusion-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock) && getStockConclusion(stock).one2">
<p class="conclusion-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock) && getStockConclusion(stock).one2">
{{ getStockConclusion(stock).one2 }}
</p>
</div>
<!-- L2: 情绪解码 -->
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).two) || (getStockConclusion(stock) && !getStockTypewriterVisibility(stock) && getStockConclusion(stock).two)">
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).two) || (getStockConclusion(stock) && !getStockTypewriterTexts(stock) && getStockConclusion(stock).two)">
<h4 class="conclusion-title">L2: 情绪解码</h4>
<!-- 打字机效果文本 -->
<p class="conclusion-text" v-if="getStockTypewriterTexts(stock) && getStockTypewriterTexts(stock).two">
{{ getStockTypewriterTexts(stock).two }}
</p>
<!-- 完整文本 -->
<p class="conclusion-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock) && getStockConclusion(stock).two">
<p class="conclusion-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock) && getStockConclusion(stock).two">
{{ getStockConclusion(stock).two }}
</p>
</div>
<!-- L3: 情绪推演 -->
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).three) || (getStockConclusion(stock) && !getStockTypewriterVisibility(stock) && getStockConclusion(stock).three)">
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).three) || (getStockConclusion(stock) && !getStockTypewriterTexts(stock) && getStockConclusion(stock).three)">
<h4 class="conclusion-title">L3: 情绪推演</h4>
<!-- 打字机效果文本 -->
<p class="conclusion-text" v-if="getStockTypewriterTexts(stock) && getStockTypewriterTexts(stock).three">
{{ getStockTypewriterTexts(stock).three }}
</p>
<!-- 完整文本 -->
<p class="conclusion-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock) && getStockConclusion(stock).three">
<p class="conclusion-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock) && getStockConclusion(stock).three">
{{ getStockConclusion(stock).three }}
</p>
</div>
<!-- L4: 情绪套利 -->
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).four) || (getStockConclusion(stock) && !getStockTypewriterVisibility(stock) && getStockConclusion(stock).four)">
<div class="conclusion-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).four) || (getStockConclusion(stock) && !getStockTypewriterTexts(stock) && getStockConclusion(stock).four)">
<h4 class="conclusion-title">L4: 情绪套利</h4>
<!-- 打字机效果文本 -->
<p class="conclusion-text" v-if="getStockTypewriterTexts(stock) && getStockTypewriterTexts(stock).four">
{{ getStockTypewriterTexts(stock).four }}
</p>
<!-- 完整文本 -->
<p class="conclusion-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock) && getStockConclusion(stock).four">
<p class="conclusion-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock) && getStockConclusion(stock).four">
{{ getStockConclusion(stock).four }}
</p>
</div>
</div>
<!-- 状态准备中的提示 -->
<div class="conclusion-placeholder" v-if="!isStockStateReady(stock) && getStockConclusion(stock)">
<p>请稍候...</p>
</div>
<!-- 等待数据加载的提示 -->
<div
class="conclusion-placeholder"
v-if="!getStockConclusion(stock) || (!getStockConclusion(stock).one1 && !getStockConclusion(stock).one2 && !getStockConclusion(stock).two && !getStockConclusion(stock).three && !getStockConclusion(stock).four)"
@ -342,13 +348,13 @@
</div>
</div>
<!-- AI生成内容免责声明 -->
<div class="disclaimer-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).disclaimer) || (getStockConclusion(stock) && !getStockTypewriterVisibility(stock))">
<div class="disclaimer-item" v-if="(getStockTypewriterVisibility(stock) && getStockTypewriterVisibility(stock).disclaimer) || (getStockConclusion(stock) && !getStockTypewriterTexts(stock))">
<!-- 打字机效果文本 -->
<p class="disclaimer-text" v-if="getStockTypewriterTexts(stock) && getStockTypewriterTexts(stock).disclaimer">
{{ getStockTypewriterTexts(stock).disclaimer }}
</p>
<!-- 完整文本 -->
<p class="disclaimer-text" v-if="!getStockTypewriterVisibility(stock) && getStockConclusion(stock)">
<p class="disclaimer-text" v-if="!getStockTypewriterTexts(stock) && getStockConclusion(stock)">
该内容由AI生成请注意甄别
</p>
</div>
@ -914,7 +920,8 @@ const getStockTypewriterTexts = (stock) => {
console.warn('getStockTypewriterTexts: 无法获取股票唯一标识');
return null;
}
return stockTypewriterTexts.value.get(stockUniqueId) || null;
const texts = stockTypewriterTexts.value.get(stockUniqueId);
return texts || null;
};
//
@ -937,6 +944,29 @@ const isStockTypewriting = (stock) => {
return stockTypewriterShown.value.has(stockUniqueId) && !stockTypewriterTexts.value.has(stockUniqueId);
};
//
const isStockStateReady = (stock) => {
const stockUniqueId = getStockUniqueId(stock);
if (!stockUniqueId) {
return false;
}
const conclusion = getStockConclusion(stock);
if (!conclusion) {
return false;
}
const isFirstTime = !stockTypewriterShown.value.has(stockUniqueId);
//
if (isFirstTime && isUserInitiated.value) {
return stockTypewriterTexts.value.has(stockUniqueId) && stockTypewriterVisibility.value.has(stockUniqueId);
}
//
return true;
};
//
watch(
() => emotionStore.stockList,
@ -2326,6 +2356,32 @@ async function handleSendMessage(input, onComplete) {
// store
emotionStore.updateActiveStockConclusion(conclusionResponse.data);
//
const stockUniqueId = getStockUniqueId(parsedData);
if (stockUniqueId) {
const isFirstTime = !stockTypewriterShown.value.has(stockUniqueId);
if (isFirstTime && isUserInitiated.value) {
//
console.log('初始化打字机状态:', parsedData.name);
stockTypewriterTexts.value.set(stockUniqueId, {
one1: "", one2: "", two: "", three: "", four: "", disclaimer: ""
});
stockTypewriterVisibility.value.set(stockUniqueId, {
one: false, two: false, three: false, four: false, disclaimer: false
});
} else {
//
console.log('设置完整显示模式:', parsedData.name);
stockTypewriterTexts.value.delete(stockUniqueId);
stockTypewriterVisibility.value.delete(stockUniqueId);
}
//
nextTick(() => {
console.log('状态设置完成,股票状态准备就绪:', parsedData.name, 'isReady:', isStockStateReady(parsedData));
});
}
//
// isLoading.value = false;
isPageLoaded.value = true;

Loading…
Cancel
Save