|
|
@@ -1,9 +1,11 @@
|
|
|
import { Component, OnInit } from '@angular/core';
|
|
|
-import { IonButton, IonContent, IonHeader, IonToolbar, IonTitle, IonInput, IonItem, IonLabel, IonList, IonFooter, IonRow, IonCol, IonButtons } from '@ionic/angular/standalone';
|
|
|
+import { IonButton, IonContent, IonHeader, IonToolbar, IonTitle, IonInput, IonItem, IonLabel, IonList, IonFooter, IonRow, IonCol, IonButtons, ModalController } from '@ionic/angular/standalone';
|
|
|
import { FmodeChatCompletion } from 'fmode-ng';
|
|
|
import { FormsModule } from '@angular/forms';
|
|
|
import { CommonModule } from '@angular/common'; // 导入 CommonModule
|
|
|
import { CloudObject, CloudUser } from 'src/lib/ncloud';
|
|
|
+import { ChatPanelOptions, FmodeChat, openChatPanelModal, FmodeChatMessage } from 'fmode-ng';
|
|
|
+
|
|
|
|
|
|
@Component({
|
|
|
selector: 'app-home',
|
|
|
@@ -16,90 +18,92 @@ import { CloudObject, CloudUser } from 'src/lib/ncloud';
|
|
|
],
|
|
|
})
|
|
|
export class GexinhualiaotianComponent implements OnInit {
|
|
|
- userInput: string = ''; // 用户输入的消息
|
|
|
- messages: { content: string; sender: string }[] = []; // 消息数组
|
|
|
- isSending: boolean = false; // 标记是否正在发送消息
|
|
|
- chatContent: any[] = []; // 添加 chatContent 属性
|
|
|
-
|
|
|
- constructor() {}
|
|
|
-
|
|
|
- ngOnInit() {}
|
|
|
-
|
|
|
- // 发送用户输入的消息
|
|
|
- sendUserMessage() {
|
|
|
- if (this.userInput.trim() && !this.isSending) {
|
|
|
- // 将用户输入添加到消息数组
|
|
|
- this.messages.push({ content: this.userInput, sender: 'user' });
|
|
|
- this.sendMessage(); // 发送消息后调用 sendMessage 方法
|
|
|
- this.saveChat(); // 确保在此处调用 saveChat 方法
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 保存聊天记录到 Chat 表
|
|
|
- async saveChat() {
|
|
|
- const currentUser = new CloudUser(); // 假设您有当前用户的信息
|
|
|
- if (!currentUser?.id) {
|
|
|
- console.error('当前用户无效,无法保存聊天记录。');
|
|
|
- return; // 如果没有有效的用户,退出方法
|
|
|
- }
|
|
|
-
|
|
|
- const chatObject = new CloudObject("Chat"); // 创建 Chat 对象
|
|
|
- let ACL: any = { // 公开访客 不可读 不可写
|
|
|
- "*": { read: false, write: false }
|
|
|
- };
|
|
|
- ACL[currentUser?.id] = { read: true, write: true }; // 当前用户 可读 可写
|
|
|
- let chatContentString = this.userInput;
|
|
|
- let now = new Date();
|
|
|
-
|
|
|
- // 设置聊天内容和用户信息
|
|
|
- chatObject.set({
|
|
|
- chatContent: chatContentString,
|
|
|
- chatTime: now, // 使用 Date 对象
|
|
|
- user: currentUser.toPointer(),
|
|
|
- });
|
|
|
-
|
|
|
- try {
|
|
|
- await chatObject.save(); // 保存聊天记录
|
|
|
- console.log('聊天记录已成功保存:', chatContentString);
|
|
|
- } catch (error) {
|
|
|
- console.error('保存聊天记录时出错:', error);
|
|
|
- }
|
|
|
- // 清空聊天记录
|
|
|
- this.chatContent = [];
|
|
|
- }
|
|
|
-
|
|
|
- // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象
|
|
|
- sendMessage() {
|
|
|
- console.log("创建消息");
|
|
|
- this.isSending = true; // 设置为正在发送状态
|
|
|
-
|
|
|
- let completion = new FmodeChatCompletion([
|
|
|
- { role: "system", content: "你是一名心理医生,请根据用户的输入进行聊天。" },
|
|
|
- { role: "user", content: this.userInput }
|
|
|
- ]);
|
|
|
-
|
|
|
- completion.sendCompletion().subscribe((message: any) => {
|
|
|
- // 赋值消息内容给组件内属性
|
|
|
- const responseMsg = message.content;
|
|
|
-
|
|
|
- // 使用 setTimeout 确保消息体完全输出再打印
|
|
|
- setTimeout(() => {
|
|
|
- // 打印消息体
|
|
|
- console.log(responseMsg);
|
|
|
-
|
|
|
- // 清空之前的AI消息,只添加最后的AI回复
|
|
|
- if (this.messages[this.messages.length - 1]?.sender === 'ai') {
|
|
|
- this.messages.pop(); // 移除最后一条AI消息
|
|
|
- }
|
|
|
- this.messages.push({ content: responseMsg, sender: 'ai' }); // 添加最后的AI回复
|
|
|
-
|
|
|
- this.isSending = false; // 发送完成,重置状态
|
|
|
- }, 0); // 立即执行,但确保在当前调用栈结束后执行
|
|
|
-
|
|
|
- // 清空用户输入
|
|
|
- this.userInput = '';
|
|
|
- });
|
|
|
- }
|
|
|
+ // userInput: string = ''; // 用户输入的消息
|
|
|
+ // messages: { content: string; sender: string }[] = []; // 消息数组
|
|
|
+ // isSending: boolean = false; // 标记是否正在发送消息
|
|
|
+ // chatContent: any[] = []; // 添加 chatContent 属性
|
|
|
+
|
|
|
+ constructor( private modalCtrl:ModalController ) {}
|
|
|
+
|
|
|
+ ngOnInit() {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+ // // 发送用户输入的消息
|
|
|
+ // sendUserMessage() {
|
|
|
+ // if (this.userInput.trim() && !this.isSending) {
|
|
|
+ // // 将用户输入添加到消息数组
|
|
|
+ // this.messages.push({ content: this.userInput, sender: 'user' });
|
|
|
+ // this.sendMessage(); // 发送消息后调用 sendMessage 方法
|
|
|
+ // this.saveChat(); // 确保在此处调用 saveChat 方法
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // // 保存聊天记录到 Chat 表
|
|
|
+ // async saveChat() {
|
|
|
+ // const currentUser = new CloudUser(); // 假设您有当前用户的信息
|
|
|
+ // if (!currentUser?.id) {
|
|
|
+ // console.error('当前用户无效,无法保存聊天记录。');
|
|
|
+ // return; // 如果没有有效的用户,退出方法
|
|
|
+ // }
|
|
|
+
|
|
|
+ // const chatObject = new CloudObject("Chat"); // 创建 Chat 对象
|
|
|
+ // let ACL: any = { // 公开访客 不可读 不可写
|
|
|
+ // "*": { read: false, write: false }
|
|
|
+ // };
|
|
|
+ // ACL[currentUser?.id] = { read: true, write: true }; // 当前用户 可读 可写
|
|
|
+ // let chatContentString = this.userInput;
|
|
|
+ // let now = new Date();
|
|
|
+
|
|
|
+ // // 设置聊天内容和用户信息
|
|
|
+ // chatObject.set({
|
|
|
+ // chatContent: chatContentString,
|
|
|
+ // chatTime: now, // 使用 Date 对象
|
|
|
+ // user: currentUser.toPointer(),
|
|
|
+ // });
|
|
|
+
|
|
|
+ // try {
|
|
|
+ // await chatObject.save(); // 保存聊天记录
|
|
|
+ // console.log('聊天记录已成功保存:', chatContentString);
|
|
|
+ // } catch (error) {
|
|
|
+ // console.error('保存聊天记录时出错:', error);
|
|
|
+ // }
|
|
|
+ // // 清空聊天记录
|
|
|
+ // this.chatContent = [];
|
|
|
+ // }
|
|
|
+
|
|
|
+ // // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象
|
|
|
+ // sendMessage() {
|
|
|
+ // console.log("创建消息");
|
|
|
+ // this.isSending = true; // 设置为正在发送状态
|
|
|
+
|
|
|
+ // let completion = new FmodeChatCompletion([
|
|
|
+ // { role: "system", content: "你是一名心理医生,请根据用户的输入进行聊天。" },
|
|
|
+ // { role: "user", content: this.userInput }
|
|
|
+ // ]);
|
|
|
+
|
|
|
+ // completion.sendCompletion().subscribe((message: any) => {
|
|
|
+ // // 赋值消息内容给组件内属性
|
|
|
+ // const responseMsg = message.content;
|
|
|
+
|
|
|
+ // // 使用 setTimeout 确保消息体完全输出再打印
|
|
|
+ // setTimeout(() => {
|
|
|
+ // // 打印消息体
|
|
|
+ // console.log(responseMsg);
|
|
|
+
|
|
|
+ // // 清空之前的AI消息,只添加最后的AI回复
|
|
|
+ // if (this.messages[this.messages.length - 1]?.sender === 'ai') {
|
|
|
+ // this.messages.pop(); // 移除最后一条AI消息
|
|
|
+ // }
|
|
|
+ // this.messages.push({ content: responseMsg, sender: 'ai' }); // 添加最后的AI回复
|
|
|
+
|
|
|
+ // this.isSending = false; // 发送完成,重置状态
|
|
|
+ // }, 0); // 立即执行,但确保在当前调用栈结束后执行
|
|
|
+
|
|
|
+ // // 清空用户输入
|
|
|
+ // this.userInput = '';
|
|
|
+ // });
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
|