|
|
@ -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; |
|
|
|