|
|
@ -124,7 +124,7 @@ |
|
|
<!-- loading --> |
|
|
<!-- loading --> |
|
|
<view |
|
|
<view |
|
|
class="loading-dots" |
|
|
class="loading-dots" |
|
|
v-if="message.isThinking || message.isTyping" |
|
|
|
|
|
|
|
|
v-if="message.isThinking " |
|
|
> |
|
|
> |
|
|
<text class="dot"></text> |
|
|
<text class="dot"></text> |
|
|
<text class="dot"></text> |
|
|
<text class="dot"></text> |
|
|
@ -313,20 +313,23 @@ const simulateBotResponse = (userMessage) => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
// 模拟流式响应 |
|
|
// 模拟流式响应 |
|
|
let responseText = `我已经收到您的消息: "${userMessage}"。作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?`; |
|
|
|
|
|
|
|
|
let responseText = `我已经收到您的消息: "${userMessage}"。作为您的股市顾问,我可以为您提供专业的投资建议。请问您想了解哪方面的信息?`; |
|
|
let index = 0; |
|
|
let index = 0; |
|
|
|
|
|
|
|
|
const typeWriter = () => { |
|
|
const typeWriter = () => { |
|
|
if (index < responseText.length) { |
|
|
if (index < responseText.length) { |
|
|
botMsg.content += responseText.charAt(index); |
|
|
|
|
|
|
|
|
// 使用 Vue 的响应式更新机制 |
|
|
|
|
|
messages.value[messages.value.length - 1].content = responseText.substring(0, index + 1); |
|
|
index++; |
|
|
index++; |
|
|
|
|
|
|
|
|
// 滚动到底部 |
|
|
// 滚动到底部 |
|
|
scrollToBottom(); |
|
|
|
|
|
|
|
|
nextTick(() => { |
|
|
|
|
|
scrollToBottom(); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
setTimeout(typeWriter, 30); |
|
|
setTimeout(typeWriter, 30); |
|
|
} else { |
|
|
} else { |
|
|
botMsg.isTyping = false; |
|
|
|
|
|
|
|
|
messages.value[messages.value.length - 1].isTyping = false; |
|
|
isSending.value = false; |
|
|
isSending.value = false; |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|