|
|
@ -17,15 +17,6 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 输入框和发送按钮 --> |
|
|
|
<!-- <footer class="input-container fixed-bottom"> |
|
|
|
<input type="text" v-model="userInput" placeholder="请输入内容..." class="input-box" /> |
|
|
|
<button @click="handleSendMessage(userInput)" class="send-button">发送</button> |
|
|
|
</footer> --> |
|
|
|
<!-- <div class="input-container fixed-bottom"> |
|
|
|
<input type="text" v-model="userInput" placeholder="请输入内容..." class="input-box" /> |
|
|
|
<button @click="sendMessage" class="send-button">发送</button> |
|
|
|
</div> --> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
@ -132,18 +123,9 @@ |
|
|
|
<div class="class09"> |
|
|
|
<img src="@/assets/img/AiEmotion/场景应用.png" alt="场景应用标题"> |
|
|
|
<div class="bk-image"> |
|
|
|
<!-- <div class="text-container"> |
|
|
|
<p>情绪监控-金融宇宙的【量子检测网络】核心任务:构建全市场情绪引力场雷达</p> |
|
|
|
<p>情绪解码-主力思维的【神经破译矩阵】核心任务:解构资金行为的量子密码</p> |
|
|
|
<p>情绪推演-未来战争的【时空推演舱】核心任务:情绪推演</p> |
|
|
|
<p>情绪套利-财富裂变的【粒子对撞机】核心任务:将情绪差转化为a收益粒子流</p> |
|
|
|
</div> --> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- <div v-else class="loading"> |
|
|
|
<p>数据加载中,请稍候...</p> |
|
|
|
</div> --> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script setup> |
|
|
@ -163,30 +145,16 @@ const marketTemperatureRef = ref(null); // 引用市场温度计组件 |
|
|
|
const emoEnergyConverterRef = ref(null) |
|
|
|
const emotionDecodRef = ref(null) |
|
|
|
const emotionalBottomRadarRef = ref(null) |
|
|
|
const userInput = ref(''); |
|
|
|
const messages = ref([]); |
|
|
|
const displayDate = ref(''); // 用于存储显示的日期 |
|
|
|
const isPageLoaded = ref(false); // 控制页面是否显示 |
|
|
|
const isPageLoaded = ref(true); // 控制页面是否显示 |
|
|
|
const isRotating = ref(false);//控制旋转 |
|
|
|
const userInputDisplayRef = ref(null);//消息区域的引用 |
|
|
|
const data1 = ref(null); // 个股温度 |
|
|
|
const data2 = ref(); // 大盘温度 |
|
|
|
const version1 = ref(2); // 版本号 |
|
|
|
//导出方法供外部使用 |
|
|
|
defineExpose({ handleSendMessage }) |
|
|
|
|
|
|
|
// 从本地存储中加载对话历史的方法 |
|
|
|
const loadMessagesFromLocalStorage = () => { |
|
|
|
const storedMessages = localStorage.getItem('chatMessages'); |
|
|
|
if (storedMessages) { |
|
|
|
messages.value = JSON.parse(storedMessages); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 将对话历史保存到本地存储的方法 |
|
|
|
const saveMessagesToLocalStorage = () => { |
|
|
|
localStorage.setItem('chatMessages', JSON.stringify(messages.value)); |
|
|
|
}; |
|
|
|
|
|
|
|
// 触发图片旋转的方法 |
|
|
|
function startImageRotation() { |
|
|
|
isRotating.value = true; |
|
|
@ -214,13 +182,6 @@ async function handleSendMessage(input) { |
|
|
|
if (input.trim()) { |
|
|
|
const userMessage = reactive({ sender: 'user', text: input }); |
|
|
|
messages.value.push(userMessage); |
|
|
|
userInput.value = ''; // 清空输入框 |
|
|
|
|
|
|
|
// 添加等待提示信息 |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: '数据加载中,请稍候...' |
|
|
|
}); |
|
|
|
// 触发图片旋转 |
|
|
|
isRotating.value = true; |
|
|
|
|
|
|
@ -262,32 +223,18 @@ async function handleSendMessage(input) { |
|
|
|
updateSpan01(); |
|
|
|
} else { |
|
|
|
console.error('工作流接口返回非股票信息:', parsedData.refuse); |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: `工作流接口返回信息: ${parsedData.refuse || '未知错误'}`, |
|
|
|
}); |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.error('请求工作流接口失败:', error); |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: '工作流接口请求失败,请稍后再试。', |
|
|
|
}); |
|
|
|
} finally { |
|
|
|
// 停止图片旋转 |
|
|
|
isRotating.value = false; |
|
|
|
|
|
|
|
// 保存对话历史到本地存储 |
|
|
|
saveMessagesToLocalStorage(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: '请输入内容后再发送。', |
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
const version1 = ref(2); // 版本号 |
|
|
|
|
|
|
|
// 请求数据接口 |
|
|
|
async function fetchData(code, market) { |
|
|
|
try { |
|
|
@ -319,45 +266,28 @@ async function fetchData(code, market) { |
|
|
|
console.log('图表数据接口返回数据:', stockDataResponse.data); |
|
|
|
|
|
|
|
if (stockDataResponse.code === 200 && stockDataResponse.data) { |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: `股票数据已成功获取`, |
|
|
|
}); |
|
|
|
// 数据清洗并四舍五入xx |
|
|
|
const lastTwoNumbers = stockDataResponse.data.GSWDJ.map(([date, num1, num2]) => [ |
|
|
|
date, |
|
|
|
Math.round(num1), |
|
|
|
Math.round(num2) |
|
|
|
]).at(-1); |
|
|
|
console.log('111111111111111111111111111') |
|
|
|
// 取最后一条数据 |
|
|
|
displayDate.value = lastTwoNumbers[0];//最新数据日期 |
|
|
|
data1.value = lastTwoNumbers[1] // 个股温度 |
|
|
|
data2.value = lastTwoNumbers[2] // 市场温度 |
|
|
|
console.log('1111111111111111111111') |
|
|
|
// 调用渲染图表的方法 |
|
|
|
const chatStore = useChatStore(); |
|
|
|
renderCharts(chatStore.kLineData[chatStore.kLineData.length - 1]); |
|
|
|
console.log('2222222222222222222222') |
|
|
|
// 设置当天日期 |
|
|
|
const today = new Date(); |
|
|
|
const year = today.getFullYear(); |
|
|
|
const month = String(today.getMonth() + 1).padStart(2, '0'); |
|
|
|
const day = String(today.getDate()).padStart(2, '0'); |
|
|
|
displayDate.value = `${year}/${month}/${day}`; |
|
|
|
|
|
|
|
// 数据和图表加载完成,显示页面 |
|
|
|
isPageLoaded.value = true; |
|
|
|
// isPageLoaded.value = true; |
|
|
|
} else { |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: '图表数据接口返回数据不完整,请稍后再试。', |
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
messages.value.push({ |
|
|
|
sender: 'ai', |
|
|
|
text: '图表数据接口请求失败,请稍后再试。', |
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -400,7 +330,6 @@ function renderCharts(data) { |
|
|
|
// 页面挂载完成后触发图片旋转 |
|
|
|
onMounted(() => { |
|
|
|
startImageRotation(); |
|
|
|
loadMessagesFromLocalStorage();//加载历史对话 |
|
|
|
}); |
|
|
|
|
|
|
|
</script> |
|
|
|