Browse Source

token为0时加入充值链接。

songjie/feature-20250628160649-上线前优化
宋杰 4 weeks ago
parent
commit
b6a5bb0f62
  1. 1
      src/store/emotion.ts
  2. 135
      src/views/AiEmotion.vue
  3. 1
      src/views/homePage.vue

1
src/store/emotion.ts

@ -209,4 +209,5 @@ interface ConversationMessage {
timestamp?: string; // 消息时间戳 timestamp?: string; // 消息时间戳
id?: string; // 消息唯一标识(可选) id?: string; // 消息唯一标识(可选)
type?: string; // 消息类型(可选,如 'text', 'error', 'system' 等) type?: string; // 消息类型(可选,如 'text', 'error', 'system' 等)
isHtml?: boolean; // 是否为HTML内容(可选)
} }

135
src/views/AiEmotion.vue

@ -59,7 +59,10 @@
<span class="dot">.</span> <span class="dot">.</span>
</span> </span>
</div> </div>
<div v-else>{{ message.text }}</div>
<div v-else>
<div v-if="message.isHtml" v-html="message.text"></div>
<div v-else>{{ message.text }}</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -532,6 +535,7 @@ const loadConversationsFromStore = () => {
messages.value = storedConversations.map((conv) => ({ messages.value = storedConversations.map((conv) => ({
sender: conv.sender, sender: conv.sender,
text: conv.text, 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", marketList: "hk,cn,usa,my,sg,vi,in,gb",
content: userMessage.text, content: userMessage.text,
}); });
const response = result;
const parsedData = response.data;
const parsedData = result.data;
console.log("第一个接口返回的完整数据:", parsedData); 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) {
// 406token0
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,
'<span class="token-link" style="color: blue; cursor: pointer; text-decoration: underline;" onclick="window.handleTokenClick()">获取token次数</span>'
);
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 (!parsedData || !parsedData.market || !parsedData.code) {
// //
if (thinkingMessageRef) { if (thinkingMessageRef) {
@ -2221,7 +2339,7 @@ async function handleSendMessage(input, onComplete) {
// refuse // refuse
// isLoading.value = false; // isLoading.value = false;
isPageLoaded.value = false; isPageLoaded.value = false;
const refuseMessage = response && response.msg ? response.msg : "系统正在为您努力加载中,请稍后再试";
const refuseMessage = result && result.msg ? result.msg : "系统正在为您努力加载中,请稍后再试";
const aiMessage = reactive({ const aiMessage = reactive({
sender: "ai", sender: "ai",
text: processRefuseMessage(refuseMessage), text: processRefuseMessage(refuseMessage),
@ -3332,6 +3450,11 @@ const handleContainerScroll = () => {
// //
onMounted(async () => { onMounted(async () => {
//
window.handleTokenClick = () => {
emit('showCount');
};
// //
loadConversationsFromStore(); loadConversationsFromStore();
// stockList // stockList
@ -3538,7 +3661,7 @@ onUnmounted(() => {
}); });
// //
const emit = defineEmits(["updateMessage", "sendMessage", "ensureAIchat", "enableInput", "scrollToBottom"]);
const emit = defineEmits(["updateMessage", "sendMessage", "ensureAIchat", "enableInput", "scrollToBottom", "showCount"]);
// 使 // 使
</script> </script>

1
src/views/homePage.vue

@ -1319,6 +1319,7 @@ onUnmounted(() => {
@ensureAIchat="ensureAIchat" @ensureAIchat="ensureAIchat"
@enableInput="enableInput" @enableInput="enableInput"
@scrollToBottom="handleAiEmotionScrollToBottom" @scrollToBottom="handleAiEmotionScrollToBottom"
@showCount="showCount"
ref="aiEmotionRef" ref="aiEmotionRef"
/> />
</div> </div>

Loading…
Cancel
Save