|
|
@ -27,12 +27,18 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- AI返回结果 --> |
|
|
|
<div v-if="message.sender === 'ai'" class="message-bubble ai-message"> |
|
|
|
<div v-if="message.sender === 'ai'" class="ai-message-container"> |
|
|
|
<!-- 思考过程动图 --> |
|
|
|
<!-- <img v-if="message.gif" :src="message.gif" class="thinking-gif" alt="思考动图" /> --> |
|
|
|
<div class="message-bubble ai-message"> |
|
|
|
<!-- 思考过程动图 --> |
|
|
|
<img v-if="message.gif" :src="message.gif" class="thinking-gif" alt="思考动图" /> |
|
|
|
{{ message.text }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 加载提示 --> |
|
|
|
<div v-if="isLoading" class="loading-container"> |
|
|
|
<div class="loading-content"> |
|
|
@ -970,13 +976,21 @@ function startImageRotation() { |
|
|
|
// 显示思考过程 |
|
|
|
async function showThinkingProcess(stockName = null) { |
|
|
|
// 第一步:正在思考 |
|
|
|
const thinkingMessage1 = reactive({ sender: 'ai', text: '正在思考......' }); |
|
|
|
const thinkingMessage1 = reactive({ |
|
|
|
sender: 'ai', |
|
|
|
text: 'AI情绪大模型正在思考......', |
|
|
|
gif: '/src/assets/img/gif/思考.gif' |
|
|
|
}); |
|
|
|
messages.value.push(thinkingMessage1); |
|
|
|
await new Promise(resolve => setTimeout(resolve, 1500)); |
|
|
|
messages.value.pop(); |
|
|
|
|
|
|
|
// 第二步:正在解析关键数据(持续显示直到获取到股票名称) |
|
|
|
const thinkingMessage2 = reactive({ sender: 'ai', text: '正在解析关键数据......' }); |
|
|
|
const thinkingMessage2 = reactive({ |
|
|
|
sender: 'ai', |
|
|
|
text: 'AI情绪大模型正在解析关键数据......', |
|
|
|
gif: '/src/assets/img/gif/解析.gif' |
|
|
|
}); |
|
|
|
messages.value.push(thinkingMessage2); |
|
|
|
|
|
|
|
// 如果没有股票名称,保持第二步显示 |
|
|
@ -989,7 +1003,11 @@ async function showThinkingProcess(stockName = null) { |
|
|
|
messages.value.pop(); |
|
|
|
|
|
|
|
// 第三步:生成具体股票的量子四维矩阵图 |
|
|
|
const thinkingMessage3 = reactive({ sender: 'ai', text: `正在生成${stockName}量子四维矩阵图......` }); |
|
|
|
const thinkingMessage3 = reactive({ |
|
|
|
sender: 'ai', |
|
|
|
text: `AI情绪大模型正在生成${stockName}量子四维矩阵图......`, |
|
|
|
gif: '/src/assets/img/gif/生成.gif' |
|
|
|
}); |
|
|
|
messages.value.push(thinkingMessage3); |
|
|
|
await new Promise(resolve => setTimeout(resolve, 1500)); |
|
|
|
messages.value.pop(); |
|
|
@ -1017,7 +1035,11 @@ async function continueThinkingProcess(thinkingMessageRef, stockName) { |
|
|
|
} |
|
|
|
|
|
|
|
// 第三步:生成具体股票的量子四维矩阵图 |
|
|
|
const thinkingMessage3 = reactive({ sender: 'ai', text: `正在生成${stockName}量子四维矩阵图......` }); |
|
|
|
const thinkingMessage3 = reactive({ |
|
|
|
sender: 'ai', |
|
|
|
text: `正在生成${stockName}量子四维矩阵图......`, |
|
|
|
gif: '/src/assets/img/gif/生成.gif' |
|
|
|
}); |
|
|
|
messages.value.push(thinkingMessage3); |
|
|
|
|
|
|
|
// 返回第三步消息的引用,以便后续处理 |
|
|
@ -2678,7 +2700,7 @@ const emit = defineEmits(['updateMessage', 'sendMessage', 'ensureAIchat']); |
|
|
|
/* 用户消息容器样式 */ |
|
|
|
.user-message-container { |
|
|
|
display: flex; |
|
|
|
align-items: flex-start; |
|
|
|
align-items: center; |
|
|
|
margin-left: auto; |
|
|
|
gap: 10px; |
|
|
|
} |
|
|
@ -2716,7 +2738,7 @@ const emit = defineEmits(['updateMessage', 'sendMessage', 'ensureAIchat']); |
|
|
|
color: #6d22f8; |
|
|
|
background: white; |
|
|
|
font-weight: bold; |
|
|
|
padding: 20px 20px; |
|
|
|
padding: 15px 20px; |
|
|
|
border-radius: 15px; |
|
|
|
max-width: 60%; |
|
|
|
text-align: left; |
|
|
@ -2725,18 +2747,48 @@ const emit = defineEmits(['updateMessage', 'sendMessage', 'ensureAIchat']); |
|
|
|
/* 将用户消息推到右边 */ |
|
|
|
} |
|
|
|
|
|
|
|
/* AI消息容器样式 */ |
|
|
|
.ai-message-container { |
|
|
|
display: flex; |
|
|
|
align-items: flex-start; |
|
|
|
gap: 10px; |
|
|
|
margin-right: auto; |
|
|
|
max-width: 80%; |
|
|
|
} |
|
|
|
|
|
|
|
/* 思考过程动图样式 */ |
|
|
|
.thinking-gif { |
|
|
|
width: 40px; |
|
|
|
height: 40px; |
|
|
|
object-fit: contain; |
|
|
|
margin-top: 5px; |
|
|
|
border-radius: 8px; |
|
|
|
animation: float 2s ease-in-out infinite; |
|
|
|
} |
|
|
|
|
|
|
|
@keyframes float { |
|
|
|
0%, 100% { |
|
|
|
transform: translateY(0px); |
|
|
|
} |
|
|
|
50% { |
|
|
|
transform: translateY(-5px); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.ai-message { |
|
|
|
background-color: #f1f1f1; |
|
|
|
color: #333; |
|
|
|
font-weight: bold; |
|
|
|
padding: 10px 15px; |
|
|
|
padding: 20px 30px; |
|
|
|
border-radius: 15px; |
|
|
|
max-width: 60%; |
|
|
|
text-align: left; |
|
|
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); |
|
|
|
margin-right: auto; |
|
|
|
/* 将AI消息保持在左边 */ |
|
|
|
padding: 20px 20px; |
|
|
|
white-space: nowrap; |
|
|
|
width: fit-content; |
|
|
|
overflow: visible; |
|
|
|
align-items: center; |
|
|
|
display: flex; |
|
|
|
} |
|
|
|
|
|
|
|
.input-container { |
|
|
|