diff --git a/src/store/emotion.ts b/src/store/emotion.ts
index 7cf7874..c1d3c3a 100644
--- a/src/store/emotion.ts
+++ b/src/store/emotion.ts
@@ -209,4 +209,5 @@ interface ConversationMessage {
timestamp?: string; // 消息时间戳
id?: string; // 消息唯一标识(可选)
type?: string; // 消息类型(可选,如 'text', 'error', 'system' 等)
+ isHtml?: boolean; // 是否为HTML内容(可选)
}
\ No newline at end of file
diff --git a/src/views/AiEmotion.vue b/src/views/AiEmotion.vue
index 3d1c238..b2ef2f6 100644
--- a/src/views/AiEmotion.vue
+++ b/src/views/AiEmotion.vue
@@ -59,7 +59,10 @@
.
-
{{ message.text }}
+
@@ -532,6 +535,7 @@ const loadConversationsFromStore = () => {
messages.value = storedConversations.map((conv) => ({
sender: conv.sender,
text: conv.text,
+ isHtml: conv.isHtml || false,
}));
};
@@ -2205,10 +2209,124 @@ async function handleSendMessage(input, onComplete) {
marketList: "hk,cn,usa,my,sg,vi,in,gb",
content: userMessage.text,
});
- const response = result;
- const parsedData = response.data;
+ const parsedData = result.data;
console.log("第一个接口返回的完整数据:", parsedData);
- // 检查用户输入是否合法
+
+ // 根据状态码判断并处理不同情况
+ if (result.code === 400) {
+ // 状态码400:用户输入内容不合法
+ if (thinkingMessageRef) {
+ const index = messages.value.indexOf(thinkingMessageRef);
+ if (index > -1) {
+ messages.value.splice(index, 1);
+ }
+ }
+
+ isPageLoaded.value = false;
+ const refuseMessage = result.msg || "用户输入内容不合法,请重新输入";
+ const aiMessage = reactive({
+ sender: "ai",
+ text: processRefuseMessage(refuseMessage),
+ });
+ messages.value.push(aiMessage);
+
+ emotionStore.addConversation({
+ sender: "ai",
+ text: processRefuseMessage(refuseMessage),
+ timestamp: new Date().toISOString(),
+ });
+ isRotating.value = false;
+ messages.value = [...previousMessages, ...messages.value];
+
+ nextTick(() => {
+ scrollToBottom();
+ });
+
+ if (onComplete && typeof onComplete === "function") {
+ onComplete();
+ currentOnCompleteCallback.value = null;
+ }
+ return;
+ } else if (result.code === 406) {
+ // 状态码406:token为0
+ if (thinkingMessageRef) {
+ const index = messages.value.indexOf(thinkingMessageRef);
+ if (index > -1) {
+ messages.value.splice(index, 1);
+ }
+ }
+
+ isPageLoaded.value = false;
+ const refuseMessage = result.msg || "您的使用次数已用完,请联系客服或购买服务包";
+
+ // 处理消息中的"获取token次数"文字,将其转换为可点击的链接
+ const processedMessage = processRefuseMessage(refuseMessage).replace(
+ /获取token次数/g,
+ '获取token次数'
+ );
+
+ const aiMessage = reactive({
+ sender: "ai",
+ text: processedMessage,
+ isHtml: true, // 标记这是HTML内容
+ });
+ messages.value.push(aiMessage);
+
+ emotionStore.addConversation({
+ sender: "ai",
+ text: processedMessage,
+ isHtml: true, // 保存HTML标记
+ timestamp: new Date().toISOString(),
+ });
+ isRotating.value = false;
+ messages.value = [...previousMessages, ...messages.value];
+
+ nextTick(() => {
+ scrollToBottom();
+ });
+
+ if (onComplete && typeof onComplete === "function") {
+ onComplete();
+ currentOnCompleteCallback.value = null;
+ }
+ return;
+ } else if (result.code !== 200) {
+ // 其他非200状态码,显示通用错误信息
+ if (thinkingMessageRef) {
+ const index = messages.value.indexOf(thinkingMessageRef);
+ if (index > -1) {
+ messages.value.splice(index, 1);
+ }
+ }
+
+ isPageLoaded.value = false;
+ const refuseMessage = result.msg || "系统异常,请稍后再试";
+ const aiMessage = reactive({
+ sender: "ai",
+ text: processRefuseMessage(refuseMessage),
+ });
+ messages.value.push(aiMessage);
+
+ emotionStore.addConversation({
+ sender: "ai",
+ text: processRefuseMessage(refuseMessage),
+ timestamp: new Date().toISOString(),
+ });
+ isRotating.value = false;
+ messages.value = [...previousMessages, ...messages.value];
+
+ nextTick(() => {
+ scrollToBottom();
+ });
+
+ if (onComplete && typeof onComplete === "function") {
+ onComplete();
+ currentOnCompleteCallback.value = null;
+ }
+ return;
+ }
+
+ // 状态码200:用户输入内容合法,检查数据完整性
if (!parsedData || !parsedData.market || !parsedData.code) {
// 输入不合法,先清理思考过程消息
if (thinkingMessageRef) {
@@ -2221,7 +2339,7 @@ async function handleSendMessage(input, onComplete) {
// 关闭加载状态和等待提示,返回refuse信息,停止图片旋转,恢复历史数据
// isLoading.value = false;
isPageLoaded.value = false;
- const refuseMessage = response && response.msg ? response.msg : "系统正在为您努力加载中,请稍后再试";
+ const refuseMessage = result && result.msg ? result.msg : "系统正在为您努力加载中,请稍后再试";
const aiMessage = reactive({
sender: "ai",
text: processRefuseMessage(refuseMessage),
@@ -3332,6 +3450,11 @@ const handleContainerScroll = () => {
// 页面挂载完成后触发图片旋转和设置滚动监听
onMounted(async () => {
+ // 设置全局点击处理函数
+ window.handleTokenClick = () => {
+ emit('showCount');
+ };
+
// 恢复对话记录
loadConversationsFromStore();
// 从stockList加载对话记录
@@ -3538,7 +3661,7 @@ onUnmounted(() => {
});
// 声明组件可以触发的事件
-const emit = defineEmits(["updateMessage", "sendMessage", "ensureAIchat", "enableInput", "scrollToBottom"]);
+const emit = defineEmits(["updateMessage", "sendMessage", "ensureAIchat", "enableInput", "scrollToBottom", "showCount"]);
// 导出方法供外部使用(已在上方定义)
diff --git a/src/views/homePage.vue b/src/views/homePage.vue
index f663f57..a8ecba0 100644
--- a/src/views/homePage.vue
+++ b/src/views/homePage.vue
@@ -1319,6 +1319,7 @@ onUnmounted(() => {
@ensureAIchat="ensureAIchat"
@enableInput="enableInput"
@scrollToBottom="handleAiEmotionScrollToBottom"
+ @showCount="showCount"
ref="aiEmotionRef"
/>