|
@ -109,13 +109,17 @@ |
|
|
<div class="bk-image"> |
|
|
<div class="bk-image"> |
|
|
<div class="text-container"> |
|
|
<div class="text-container"> |
|
|
<p><span class="title">🔍 情绪监控-金融宇宙的【量子检测网络】</span> |
|
|
<p><span class="title">🔍 情绪监控-金融宇宙的【量子检测网络】</span> |
|
|
<span class="content">核心任务:构建全市场情绪引力场雷达,实时监测资金流向和情绪波动</span></p> |
|
|
|
|
|
|
|
|
<span class="content">核心任务:构建全市场情绪引力场雷达,实时监测资金流向和情绪波动</span> |
|
|
|
|
|
</p> |
|
|
<p><span class="title">🧠 情绪解码-主力思维的【神经破译矩阵】</span> |
|
|
<p><span class="title">🧠 情绪解码-主力思维的【神经破译矩阵】</span> |
|
|
<span class="content">核心任务:解构资金行为的量子密码,破译主力操盘意图和策略布局</span></p> |
|
|
|
|
|
|
|
|
<span class="content">核心任务:解构资金行为的量子密码,破译主力操盘意图和策略布局</span> |
|
|
|
|
|
</p> |
|
|
<p><span class="title">🔮 情绪推演-未来战争的【时空推演舱】</span> |
|
|
<p><span class="title">🔮 情绪推演-未来战争的【时空推演舱】</span> |
|
|
<span class="content">核心任务:基于情绪数据推演未来走势,预测市场转折点和机会窗口</span></p> |
|
|
|
|
|
|
|
|
<span class="content">核心任务:基于情绪数据推演未来走势,预测市场转折点和机会窗口</span> |
|
|
|
|
|
</p> |
|
|
<p><span class="title">💰 情绪套利-财富裂变的【粒子对撞机】</span> |
|
|
<p><span class="title">💰 情绪套利-财富裂变的【粒子对撞机】</span> |
|
|
<span class="content">核心任务:将情绪差转化为收益粒子流,实现情绪能量的价值转换</span></p> |
|
|
|
|
|
|
|
|
<span class="content">核心任务:将情绪差转化为收益粒子流,实现情绪能量的价值转换</span> |
|
|
|
|
|
</p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<!-- 核心逻辑 --> |
|
|
<!-- 核心逻辑 --> |
|
@ -353,17 +357,17 @@ watch(currentStock, (newStock) => { |
|
|
|
|
|
|
|
|
nextTick(() => { |
|
|
nextTick(() => { |
|
|
renderCharts(newStock.apiData); |
|
|
renderCharts(newStock.apiData); |
|
|
|
|
|
|
|
|
|
|
|
console.log('0000000000000000000000000',newStock.apiData) |
|
|
// 检查场景应用部分是否已经在视口中,如果是则立即触发效果 |
|
|
// 检查场景应用部分是否已经在视口中,如果是则立即触发效果 |
|
|
setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
if (scenarioApplicationRef.value && parsedConclusion.value) { |
|
|
if (scenarioApplicationRef.value && parsedConclusion.value) { |
|
|
const stockCode = newStock.stockInfo?.code || newStock.stockInfo?.symbol; |
|
|
const stockCode = newStock.stockInfo?.code || newStock.stockInfo?.symbol; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果该股票已经显示过,不需要再处理 |
|
|
// 如果该股票已经显示过,不需要再处理 |
|
|
if (stockCode && stockTypewriterShown.value.has(stockCode)) { |
|
|
if (stockCode && stockTypewriterShown.value.has(stockCode)) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const rect = scenarioApplicationRef.value.getBoundingClientRect(); |
|
|
const rect = scenarioApplicationRef.value.getBoundingClientRect(); |
|
|
const isInViewport = rect.top < window.innerHeight && rect.bottom > 0; |
|
|
const isInViewport = rect.top < window.innerHeight && rect.bottom > 0; |
|
|
|
|
|
|
|
@ -395,7 +399,7 @@ watch(currentStock, (newStock) => { |
|
|
} else { |
|
|
} else { |
|
|
// 非第一次或已经触发过:直接显示完整内容,不播放音频和打字机效果 |
|
|
// 非第一次或已经触发过:直接显示完整内容,不播放音频和打字机效果 |
|
|
console.log('非第一次股票切换或已触发过,直接显示完整内容'); |
|
|
console.log('非第一次股票切换或已触发过,直接显示完整内容'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 直接显示完整内容 |
|
|
// 直接显示完整内容 |
|
|
const conclusion = parsedConclusion.value; |
|
|
const conclusion = parsedConclusion.value; |
|
|
displayedTexts.value = { |
|
|
displayedTexts.value = { |
|
@ -469,7 +473,7 @@ watch(parsedConclusion, (newConclusion) => { |
|
|
if (stockTypewriterShown.value.has(stockCode)) { |
|
|
if (stockTypewriterShown.value.has(stockCode)) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 该股票第一次:播放音频和打字机效果 |
|
|
// 该股票第一次:播放音频和打字机效果 |
|
|
console.log('该股票第一次音频准备完成且场景应用部分在视口中,立即触发效果'); |
|
|
console.log('该股票第一次音频准备完成且场景应用部分在视口中,立即触发效果'); |
|
|
hasTriggeredTypewriter.value = true; |
|
|
hasTriggeredTypewriter.value = true; |
|
@ -876,7 +880,7 @@ function renderCharts(data) { |
|
|
// 深拷贝数据避免污染原始数据 |
|
|
// 深拷贝数据避免污染原始数据 |
|
|
const clonedData = JSON.parse(JSON.stringify(data)); |
|
|
const clonedData = JSON.parse(JSON.stringify(data)); |
|
|
console.log('已深拷贝数据,避免污染原始数据'); |
|
|
console.log('已深拷贝数据,避免污染原始数据'); |
|
|
|
|
|
|
|
|
|
|
|
console.log('所有数据1111111111111:', clonedData) |
|
|
// 渲染股市温度计图表 |
|
|
// 渲染股市温度计图表 |
|
|
if (marketTemperatureRef.value && clonedData.GSWDJ) { |
|
|
if (marketTemperatureRef.value && clonedData.GSWDJ) { |
|
|
console.log("开始渲染股市温度计图表"); |
|
|
console.log("开始渲染股市温度计图表"); |
|
@ -894,7 +898,7 @@ function renderCharts(data) { |
|
|
// 渲染情绪探底雷达图表 |
|
|
// 渲染情绪探底雷达图表 |
|
|
if (emotionalBottomRadarRef.value && clonedData.QXTDLD) { |
|
|
if (emotionalBottomRadarRef.value && clonedData.QXTDLD) { |
|
|
console.log("开始渲染情绪探底雷达图表"); |
|
|
console.log("开始渲染情绪探底雷达图表"); |
|
|
console.log("数据", clonedData.QXTDLD); |
|
|
|
|
|
|
|
|
console.log("探底雷达数据", clonedData.QXTDLD); |
|
|
emotionalBottomRadarRef.value.initEmotionalBottomRadar( |
|
|
emotionalBottomRadarRef.value.initEmotionalBottomRadar( |
|
|
clonedData.KLine20, |
|
|
clonedData.KLine20, |
|
|
clonedData.QXTDLD |
|
|
clonedData.QXTDLD |
|
@ -1051,7 +1055,7 @@ function setupIntersectionObserver() { |
|
|
} else { |
|
|
} else { |
|
|
// 非第一次或已经触发过:直接显示完整内容,不播放音频和打字机效果 |
|
|
// 非第一次或已经触发过:直接显示完整内容,不播放音频和打字机效果 |
|
|
console.log('非第一次进入场景应用或已触发过,直接显示完整内容'); |
|
|
console.log('非第一次进入场景应用或已触发过,直接显示完整内容'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 直接显示完整内容 |
|
|
// 直接显示完整内容 |
|
|
const conclusion = parsedConclusion.value; |
|
|
const conclusion = parsedConclusion.value; |
|
|
displayedTexts.value = { |
|
|
displayedTexts.value = { |
|
@ -1421,10 +1425,6 @@ defineExpose({ |
|
|
margin-bottom: 1%; |
|
|
margin-bottom: 1%; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* .class0503 { |
|
|
|
|
|
min-width: 100%; |
|
|
|
|
|
} */ |
|
|
|
|
|
|
|
|
|
|
|
.class0402 { |
|
|
.class0402 { |
|
|
width: 80%; |
|
|
width: 80%; |
|
|
margin: 0 auto; |
|
|
margin: 0 auto; |
|
@ -1580,7 +1580,7 @@ defineExpose({ |
|
|
/* 设置容器宽度 */ |
|
|
/* 设置容器宽度 */ |
|
|
height: auto; |
|
|
height: auto; |
|
|
/* 高度根据内容动态变化 */ |
|
|
/* 高度根据内容动态变化 */ |
|
|
min-height: 72rem; |
|
|
|
|
|
|
|
|
min-height: 66rem; |
|
|
/* 设置最小高度,确保图片显示 */ |
|
|
/* 设置最小高度,确保图片显示 */ |
|
|
margin: 0 auto; |
|
|
margin: 0 auto; |
|
|
} |
|
|
} |
|
@ -1596,7 +1596,7 @@ defineExpose({ |
|
|
/* 设置容器宽度 */ |
|
|
/* 设置容器宽度 */ |
|
|
height: auto; |
|
|
height: auto; |
|
|
/* 高度根据内容动态变化 */ |
|
|
/* 高度根据内容动态变化 */ |
|
|
min-height: 70rem; |
|
|
|
|
|
|
|
|
min-height: 86rem; |
|
|
/* 设置最小高度,确保图片显示 */ |
|
|
/* 设置最小高度,确保图片显示 */ |
|
|
margin: 0 auto; |
|
|
margin: 0 auto; |
|
|
} |
|
|
} |
|
@ -2178,7 +2178,7 @@ defineExpose({ |
|
|
background-repeat: no-repeat; |
|
|
background-repeat: no-repeat; |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
height: auto; |
|
|
height: auto; |
|
|
min-height: 45rem; |
|
|
|
|
|
|
|
|
min-height: 48rem; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.class06 { |
|
|
.class06 { |
|
@ -2186,7 +2186,7 @@ defineExpose({ |
|
|
background-repeat: no-repeat; |
|
|
background-repeat: no-repeat; |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
height: auto; |
|
|
height: auto; |
|
|
min-height: 33rem; |
|
|
|
|
|
|
|
|
min-height: 35rem; |
|
|
margin: 0 auto; |
|
|
margin: 0 auto; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -2259,6 +2259,7 @@ defineExpose({ |
|
|
padding-top: 10%; |
|
|
padding-top: 10%; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* 加载提示样式 */ |
|
|
/* 加载提示样式 */ |
|
|
.loading-container { |
|
|
.loading-container { |
|
|
display: flex; |
|
|
display: flex; |
|
@ -2289,8 +2290,13 @@ defineExpose({ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@keyframes spin { |
|
|
@keyframes spin { |
|
|
0% { transform: rotate(0deg); } |
|
|
|
|
|
100% { transform: rotate(360deg); } |
|
|
|
|
|
|
|
|
0% { |
|
|
|
|
|
transform: rotate(0deg); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
100% { |
|
|
|
|
|
transform: rotate(360deg); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.loading-text { |
|
|
.loading-text { |
|
@ -2300,5 +2306,4 @@ defineExpose({ |
|
|
text-shadow: 0 2px 8px rgba(0, 212, 255, 0.5); |
|
|
text-shadow: 0 2px 8px rgba(0, 212, 255, 0.5); |
|
|
letter-spacing: 1px; |
|
|
letter-spacing: 1px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
</style> |
|
|
</style> |