|
|
@ -180,7 +180,7 @@ import emoEnergyConverter from '@/views/components/emoEnergyConverter.vue'; // |
|
|
|
import marketTemperature from '@/views/components/marketTemperature.vue'; |
|
|
|
import StockTabs from '@/views/components/StockTabs.vue'; // 导入股票标签页组件 |
|
|
|
import blueBorderImg from '@/assets/img/AiEmotion/blueBorder.png' //导入蓝色背景框图片 |
|
|
|
import { ElMessage } from 'element-plus'; |
|
|
|
import { ElMessage } from 'element-plus'; // 接口失败提示已改为对话形式,保留用于输入验证 |
|
|
|
import { useEmotionStore } from '@/store/emotion'; // 导入Pinia store |
|
|
|
import { useEmotionAudioStore } from '@/store/emotionAudio.js'; // 导入音频store |
|
|
|
import { useChatStore } from '@/store/chat.js'; // 导入聊天store |
|
|
@ -784,30 +784,31 @@ async function handleSendMessage(input) { |
|
|
|
ElMessage.warning("输入内容不能为空"); |
|
|
|
return; |
|
|
|
} |
|
|
|
// 触发图片旋转 |
|
|
|
isRotating.value = true; |
|
|
|
// 设置加载状态,隐藏图表页面 |
|
|
|
isLoading.value = true; |
|
|
|
|
|
|
|
if (input.trim()) { |
|
|
|
// 检查用户是否有使用次数(检查是否有任何权限) |
|
|
|
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); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const userMessage = reactive({ sender: 'user', text: input }); |
|
|
|
messages.value.push(userMessage); |
|
|
|
|
|
|
|
try { |
|
|
|
// 用来调用工作流接口的参数 |
|
|
|
// 第一步:调用第一个接口验证用户输入内容是否合法 |
|
|
|
const params = { |
|
|
|
content: userMessage.text, |
|
|
|
userData: { |
|
|
|
token: localStorage.getItem('localToken'), |
|
|
|
language: "cn", |
|
|
|
// brainPrivilegeState: "1", |
|
|
|
// swordPrivilegeState: "1", |
|
|
|
// stockForecastPrivile: "1", |
|
|
|
// spaceForecastPrivile: "1", |
|
|
|
// aibullPrivilegeState: "1", |
|
|
|
// aigoldBullPrivilegeS: "1", |
|
|
|
// airadarPrivilegeStat: "1", |
|
|
|
// marketList: "hk,cn,can,usa,my,sg,vi,in,gb", |
|
|
|
brainPrivilegeState: userStore.brainPerssion, |
|
|
|
swordPrivilegeState: userStore.swordPerssion, |
|
|
|
stockForecastPrivilegeState: userStore.pricePerssion, |
|
|
@ -820,14 +821,25 @@ async function handleSendMessage(input) { |
|
|
|
}; |
|
|
|
|
|
|
|
const result = await getReplyAPI(params); |
|
|
|
const response = await result.json(); // 解析返回的 JSON 数据 |
|
|
|
// 解析 data 字段 |
|
|
|
const parsedData = JSON.parse(response.data); // 将字符串形式的 JSON 转换为对象 |
|
|
|
console.log("解析后的数据:", parsedData); |
|
|
|
const response = await result.json(); |
|
|
|
const parsedData = JSON.parse(response.data); |
|
|
|
console.log("第一个接口解析后的数据:", parsedData); |
|
|
|
|
|
|
|
// 检查用户输入是否合法 |
|
|
|
if (!parsedData || !parsedData.market || !parsedData.code) { |
|
|
|
// 输入不合法,返回refuse信息,不进行后续处理 |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: processRefuseMessage(parsedData.refuse) }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (parsedData && parsedData.market && parsedData.code) { |
|
|
|
console.log("工作流接口返回股票信息:", parsedData); |
|
|
|
// 输入合法,开始显示等待提示和后续处理 |
|
|
|
// 触发图片旋转 |
|
|
|
isRotating.value = true; |
|
|
|
// 设置加载状态,隐藏图表页面 |
|
|
|
isLoading.value = true; |
|
|
|
|
|
|
|
console.log("工作流接口返回股票信息:", parsedData); |
|
|
|
isPageLoaded.value = false; |
|
|
|
|
|
|
|
// 调用第二个工作流接口 |
|
|
@ -857,13 +869,9 @@ async function handleSendMessage(input) { |
|
|
|
// 将结论数据存储到store中的当前激活股票 |
|
|
|
emotionStore.updateActiveStockConclusion(conclusionResponse.data); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 不是股票信息,显示refuse信息,但不隐藏页面数据 |
|
|
|
ElMessage.error(processRefuseMessage(parsedData.refuse)); |
|
|
|
return; // 直接返回,不进行后续处理 |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
ElMessage.error('请求工作流接口失败,请检查网络连接'); |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: '请求工作流接口失败,请检查网络连接' }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
return; // 请求失败时直接返回 |
|
|
|
} finally { |
|
|
|
// 停止图片旋转(只有在设置了旋转状态时才需要停止) |
|
|
@ -872,7 +880,7 @@ async function handleSendMessage(input) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 请求数据接口 |
|
|
|
async function fetchData(code, market, stockName, queryText) { |
|
|
@ -918,10 +926,12 @@ async function fetchData(code, market, stockName, queryText) { |
|
|
|
// 将股票数据添加到store中 |
|
|
|
emotionStore.addStock(stockData); |
|
|
|
} else { |
|
|
|
ElMessage.error('请求失败,请检查网络连接'); |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: '请求失败,请检查网络连接' }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
ElMessage.error('请求失败,请检查网络连接'); |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: '请求失败,请检查网络连接' }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -969,7 +979,8 @@ function renderCharts(data) { |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.error('图表渲染过程中发生错误:', error); |
|
|
|
ElMessage.error('图表渲染失败,请重试'); |
|
|
|
const aiMessage = reactive({ sender: 'ai', text: '图表渲染失败,请重试' }); |
|
|
|
messages.value.push(aiMessage); |
|
|
|
} |
|
|
|
}, 100); // 100ms延迟确保DOM稳定 |
|
|
|
}); |
|
|
|