You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- 背景图片-->
<image class="background" src="@/static/homepages/puppy_chat/pictures/chat_image.png"></image>
<view class="chat">
<!-- 渲染聊天消息气泡 -->
<view v-for="(message, index) in send_messages" :key="index" :class="['chat_area', message.sender === 'user' ? 'user_message' : 'ai_message']">
<!-- 头像部分(放在气泡外部) -->
<view v-if="message.sender === 'ai'" class="avatar_container ai_avatar_container">
<image class="ai_avatar" src="@/static/homepages/puppy_chat/pictures/ai_avatar.png"></image>
</view>
<view v-if="message.sender === 'user'" class="avatar_container user_avatar_container">
<image class="user_avatar" src="@/static/homepages/puppy_chat/pictures/user_avatar.png"></image>
</view>
<!-- 消息内容 -->
<view class="message_content">
<text>{{ message.message }}</text>
</view>
</view>
</view>
<!-- 输入框部分 -->
<view class="input_box">
<image class="input_box_background" src="@/static/homepages/puppy_chat/pictures/input_box_background.png"></image>
<image class="send_button" src="@/static/homepages/puppy_chat/pictures/send_button.png" @click="handleSendMessage"></image>
<input class="input_words" type="text" placeholder="fit journey-Ai能回答你任何问题" v-model="input_message"></input>
</view>
<!-- 底部菜单栏部分 -->
<tarbar_puppy_chat></tarbar_puppy_chat>
</template>
<script>
export default {
data() {
return {
token:uni.getStorageSync("access_token"),
input_message: '',
send_message:'',
send_messages: [], // 存储消息的数组
conversation_id: 'e97ec0f2-2a94-42e7-b6db-b04883d349e8',//默认的聊天回话id
answer: '', // AI的回答
};
},
onLoad() {
//向后端获取conversation_id
const app = getApp();
console.log(app.globalData.token);
console.log(app.globalData.fit_journey_ai_address);
// 向后端发送请求
uni.request({
url: app.globalData.fit_journey_ai_address + '/ai/create-conversation',
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded',
'Authorization': this.token
},
data: {
},
success: (res) => {
console.log("请求成功!请求数据是", res);
this.conversation_id= res.data.data.conversation_id;
},
error: (res) => {
console.log("请求失败!请求数据是", res);
}
});
this.send_messages.push({
sender: 'ai', // 标记为用户消息
message: ":" +"我是fit journey的专属AI小助手有什么问题都可以问我哦~"
});
},
methods: {
handleSendMessage() {
// 获取发送消息的用户的消息数量
const userMessageCount = this.send_messages.filter(msg => msg.sender === 'user').length;
if (userMessageCount >= 2) {
// 如果用户已经发送了2条消息提示用户不能再发送
uni.showToast({
title: "AI 可是要交钱的哦,最多发送两条消息",
icon: "none",
});
} else {
// 如果用户未发送2条消息继续发送
if (this.input_message.trim() !== "") {
// 用户发送的消息
this.send_messages.push({
sender: 'user', // 标记为用户消息
message: ":" + this.input_message
});
this.send_messages.push({
sender: 'ai', // 标记为用户消息
message: ":正在分析您的问题等待puppy一会呢"
});
this.send_message=this.input_message;
this.input_message = ""; // 清空输入框
// 模拟向后端请求AI回答
this.fetchAIResponse();
} else {
// 如果输入为空,提示用户
uni.showToast({
title: "请输入内容后发送",
icon: "none",
});
}
}
},
fetchAIResponse() {
const app = getApp();
console.log(app.globalData.token);
console.log(app.globalData.fit_journey_ai_address);
// 向后端发送请求
uni.request({
url: app.globalData.fit_journey_ai_address + '/ai/chat-with-no-stream',//TODO:后期这里改成服务器地址!
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded',
'Authorization': this.token
},
data: {
conversationId: this.conversation_id,
ask: this.send_message,
},
success: (res) => {
console.log("请求成功!请求数据是", res.data.data);
//这里请求数据成功!
this.answer = res.data.data;
// AI的消息
this.send_messages.pop();//弹出正在加载问题的字样 马上放入该问题
this.send_messages.push({
sender: 'ai', // 标记为AI消息
message:':'+ this.answer
});
},
error: (res) => {
console.log("请求失败!请求数据是", res);
}
});
}
}
}
</script>
<style lang="scss">
@import "@/static/homepages/puppy_chat/css/puppy_chat.scss";
</style>