|
|
@ -172,7 +172,8 @@ |
|
|
|
<!-- 返回顶部按钮 --> |
|
|
|
<div class="back-to-top" @click="scrollToTop" v-show="isPageLoaded"> |
|
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|
|
|
<path d="M12 4L12 20M12 4L6 10M12 4L18 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> |
|
|
|
<path d="M12 4L12 20M12 4L6 10M12 4L18 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" |
|
|
|
stroke-linejoin="round" /> |
|
|
|
</svg> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -797,18 +798,6 @@ function startTypewriterEffect(conclusion, onComplete) { |
|
|
|
for (let i = 0; i <= disclaimerText.length; i++) { |
|
|
|
const timer = setTimeout(() => { |
|
|
|
displayedTexts.value.disclaimer = disclaimerText.substring(0, i); |
|
|
|
// 在打字机效果的最后一个字符显示完成后,滚动到底部并调用完成回调 |
|
|
|
if (i === disclaimerText.length) { |
|
|
|
setTimeout(() => { |
|
|
|
scrollToBottom(); |
|
|
|
// 调用完成回调,重新启用输入框 |
|
|
|
if (onComplete && typeof onComplete === 'function') { |
|
|
|
onComplete(); |
|
|
|
// 清除保存的回调函数 |
|
|
|
currentOnCompleteCallback.value = null; |
|
|
|
} |
|
|
|
}, 100); |
|
|
|
} |
|
|
|
}, totalDelay + i * typeSpeed); |
|
|
|
typewriterTimers.value.push(timer); |
|
|
|
} |
|
|
@ -858,9 +847,9 @@ function playAudio(url) { |
|
|
|
emotionAudioStore.isPlaying = true; |
|
|
|
console.log('开始播放场景应用语音'); |
|
|
|
// 音频开始播放时,滚动到底部 |
|
|
|
setTimeout(() => { |
|
|
|
scrollToBottom(); |
|
|
|
}, 100); |
|
|
|
// setTimeout(() => { |
|
|
|
// scrollToBottom(); |
|
|
|
// }, 100); |
|
|
|
}, |
|
|
|
onend: () => { |
|
|
|
isAudioPlaying.value = false; |
|
|
@ -964,27 +953,27 @@ async function handleSendMessage(input, onComplete) { |
|
|
|
} |
|
|
|
|
|
|
|
// 检查用户是否有使用次数(检查是否有任何权限) |
|
|
|
const hasPermission = userStore.brainPerssion || userStore.swordPerssion || |
|
|
|
userStore.pricePerssion || userStore.timePerssion || |
|
|
|
userStore.aibullPerssion || userStore.aiGnbullPerssion || |
|
|
|
userStore.airadarPerssion; |
|
|
|
|
|
|
|
if (!hasPermission) { |
|
|
|
const userMessage = reactive({ sender: 'user', text: input }); |
|
|
|
messages.value.push(userMessage); |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: '您当前没有可用权限,请联系客服或购买服务包。' }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
// 停止图片旋转,恢复历史数据 |
|
|
|
isRotating.value = false; |
|
|
|
messages.value = [...previousMessages, ...messages.value]; |
|
|
|
// 调用完成回调,重新启用输入框 |
|
|
|
if (onComplete && typeof onComplete === 'function') { |
|
|
|
onComplete(); |
|
|
|
// 清除保存的回调函数 |
|
|
|
currentOnCompleteCallback.value = null; |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
// const hasPermission = userStore.brainPerssion || userStore.swordPerssion || |
|
|
|
// userStore.pricePerssion || userStore.timePerssion || |
|
|
|
// userStore.aibullPerssion || userStore.aiGnbullPerssion || |
|
|
|
// userStore.airadarPerssion; |
|
|
|
|
|
|
|
// if (!hasPermission) { |
|
|
|
// const userMessage = reactive({ sender: 'user', text: input }); |
|
|
|
// messages.value.push(userMessage); |
|
|
|
// const aiMessage = reactive({ sender: 'ai', text: '您当前没有可用权限,请联系客服或购买服务包。' }); |
|
|
|
// messages.value.push(aiMessage); |
|
|
|
// // 停止图片旋转,恢复历史数据 |
|
|
|
// isRotating.value = false; |
|
|
|
// messages.value = [...previousMessages, ...messages.value]; |
|
|
|
// // 调用完成回调,重新启用输入框 |
|
|
|
// if (onComplete && typeof onComplete === 'function') { |
|
|
|
// onComplete(); |
|
|
|
// // 清除保存的回调函数 |
|
|
|
// currentOnCompleteCallback.value = null; |
|
|
|
// } |
|
|
|
// return; |
|
|
|
// } |
|
|
|
|
|
|
|
const userMessage = reactive({ sender: 'user', text: input }); |
|
|
|
messages.value.push(userMessage); |
|
|
@ -996,14 +985,22 @@ async function handleSendMessage(input, onComplete) { |
|
|
|
userData: { |
|
|
|
token: localStorage.getItem('localToken'), |
|
|
|
language: "cn", |
|
|
|
brainPrivilegeState: userStore.brainPerssion, |
|
|
|
swordPrivilegeState: userStore.swordPerssion, |
|
|
|
stockForecastPrivilegeState: userStore.pricePerssion, |
|
|
|
spaceForecastPrivilegeState: userStore.timePerssion, |
|
|
|
aibullPrivilegeState: userStore.aibullPerssion, |
|
|
|
aigoldBullPrivilegeState: userStore.aiGnbullPerssion, |
|
|
|
airadarPrivilegeState: userStore.airadarPerssion, |
|
|
|
marketList: userStore.aiGoldMarketList, |
|
|
|
// brainPrivilegeState: userStore.brainPerssion, |
|
|
|
// swordPrivilegeState: userStore.swordPerssion, |
|
|
|
// stockForecastPrivilegeState: userStore.pricePerssion, |
|
|
|
// spaceForecastPrivilegeState: userStore.timePerssion, |
|
|
|
// aibullPrivilegeState: userStore.aibullPerssion, |
|
|
|
// aigoldBullPrivilegeState: userStore.aiGnbullPerssion, |
|
|
|
// airadarPrivilegeState: userStore.airadarPerssion, |
|
|
|
// marketList: userStore.aiGoldMarketList, |
|
|
|
brainPrivilegeState: '1', |
|
|
|
swordPrivilegeState: '1', |
|
|
|
stockForecastPrivilegeState: '1', |
|
|
|
spaceForecastPrivilegeState: '1', |
|
|
|
aibullPrivilegeState: '1', |
|
|
|
aigoldBullPrivilegeState: '1', |
|
|
|
airadarPrivilegeState: '1', |
|
|
|
marketList: "hk,cn,usa,my,sg,vi,in,gb", |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
@ -1521,21 +1518,21 @@ function renderCharts(data) { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
const scrollToBottom = async () => { |
|
|
|
// 如果用户正在手动滚动,则不执行自动滚动 |
|
|
|
if (isUserScrolling.value) { |
|
|
|
console.log('用户正在手动滚动,跳过自动滚动'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const container = userInputDisplayRef.value; |
|
|
|
if (!container) return; |
|
|
|
await nextTick(); |
|
|
|
console.log(container.scrollHeight, "container.scrollHeight"); |
|
|
|
console.log(container.scrollTop, "container.scrollTop"); |
|
|
|
console.log(container.offsetHeight, "container.offsetHeight"); |
|
|
|
container.scrollTop = container.scrollHeight - container.offsetHeight; |
|
|
|
}; |
|
|
|
// const scrollToBottom = async () => { |
|
|
|
// // 如果用户正在手动滚动,则不执行自动滚动 |
|
|
|
// if (isUserScrolling.value) { |
|
|
|
// console.log('用户正在手动滚动,跳过自动滚动'); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
|
|
|
|
// const container = userInputDisplayRef.value; |
|
|
|
// if (!container) return; |
|
|
|
// await nextTick(); |
|
|
|
// console.log(container.scrollHeight, "container.scrollHeight"); |
|
|
|
// console.log(container.scrollTop, "container.scrollTop"); |
|
|
|
// console.log(container.offsetHeight, "container.offsetHeight"); |
|
|
|
// container.scrollTop = container.scrollHeight - container.offsetHeight; |
|
|
|
// }; |
|
|
|
|
|
|
|
// 处理用户滚动事件 |
|
|
|
const handleUserScroll = () => { |
|
|
|