From 06bba2fbafca00bb5068287757c8dae486974d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Sun, 22 Jun 2025 17:15:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=9E=E7=A9=BA=E5=88=A4=E6=96=AD=EF=BC=9Bmd?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/AiEmotion.vue | 43 +++++++++++++++++++++++++++++++++++++++---- src/views/homePage.vue | 8 +++++++- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/views/AiEmotion.vue b/src/views/AiEmotion.vue index 420bfbd..803f7d0 100644 --- a/src/views/AiEmotion.vue +++ b/src/views/AiEmotion.vue @@ -185,10 +185,40 @@ import { useEmotionStore } from '@/store/emotion'; // 导入Pinia store import { useAudioStore } from '@/store/audio.js'; // 导入音频store import { Howl, Howler } from 'howler'; // 导入音频播放库 import { reactive } from 'vue'; +import { marked } from 'marked'; // 引入marked库 // 使用Pinia store const emotionStore = useEmotionStore(); const audioStore = useAudioStore(); +// 处理refuse数据的函数 +function processRefuseMessage(refuseData) { + if (!refuseData) return '未知错误'; + + // 如果refuse数据包含Markdown格式,进行转换 + try { + // 配置marked选项 + marked.setOptions({ + breaks: true, // 支持换行符转换为
+ gfm: true, // 启用 GitHub Flavored Markdown + sanitize: false, // 不清理 HTML + smartLists: true, // 智能列表 + smartypants: true, // 智能标点符号 + xhtml: false, // 不使用 XHTML 输出 + }); + + // 将Markdown转换为HTML + const htmlContent = marked(refuseData); + + // 移除HTML标签,只保留纯文本用于ElMessage显示 + const tempDiv = document.createElement('div'); + tempDiv.innerHTML = htmlContent; + return tempDiv.textContent || tempDiv.innerText || refuseData; + } catch (error) { + console.error('处理refuse消息时出错:', error); + return refuseData; + } +} + // 组件引用 const marketTemperatureRef = ref(null); // 引用市场温度计组件 const emoEnergyConverterRef = ref(null) @@ -726,6 +756,11 @@ async function handleSendMessage(input) { console.log("发送内容:", input); // 检查用户输入内容是否为空 + if (!input || !input.trim()) { + ElMessage.warning("输入内容不能为空"); + return; + } + if (input.trim()) { const userMessage = reactive({ sender: 'user', text: input }); messages.value.push(userMessage); @@ -791,7 +826,7 @@ async function handleSendMessage(input) { emotionStore.updateActiveStockConclusion(conclusionResponse.data); } } else { - ElMessage.error(parsedData.refuse); + ElMessage.error(processRefuseMessage(parsedData.refuse)); } } catch (error) { ElMessage.error('请求工作流接口失败,请检查网络连接'); @@ -800,7 +835,7 @@ async function handleSendMessage(input) { isRotating.value = false; } } else { - ElMessage.error(parsedData.refuse); + ElMessage.error(processRefuseMessage(parsedData.refuse)); } } @@ -848,10 +883,10 @@ async function fetchData(code, market, stockName, queryText) { // 将股票数据添加到store中 emotionStore.addStock(stockData); } else { - ElMessage.error(stockDataResponse.refuse); + ElMessage.error(processRefuseMessage(stockDataResponse.refuse)); } } catch (error) { - ElMessage.error(stockDataResponse.refuse); + ElMessage.error(processRefuseMessage(stockDataResponse?.refuse || '请求失败,请检查网络连接')); } } diff --git a/src/views/homePage.vue b/src/views/homePage.vue index e8e034c..babee2d 100644 --- a/src/views/homePage.vue +++ b/src/views/homePage.vue @@ -143,6 +143,13 @@ const sendMessage = async () => { ElMessage.error("请先登录"); return; } + + // 检查输入内容是否为空 + if (!message.value || !message.value.trim()) { + ElMessage.warning("输入内容不能为空"); + return; + } + isScrolling.value = false; // 判断当前是否为 AiEmotion 组件 @@ -157,7 +164,6 @@ const sendMessage = async () => { ensureAIchat(); console.log(chatStore.isLoading, "isLoading.value1111"); - if (!message.value) return; if (chatStore.isLoading) return; chatStore.setLoading(true); console.log(chatStore.isLoading, "isLoading.value2222");