|
@@ -2,13 +2,14 @@ import { Component,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
|
import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
|
|
|
import { ExploreContainerComponent } from '../explore-container/explore-container.component';
|
|
|
import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCardTitle, IonItem, IonLabel,
|
|
|
- IonList,IonSelect, IonSelectOption } from '@ionic/angular/standalone';
|
|
|
+ IonList,IonSelect, IonSelectOption,IonIcon } from '@ionic/angular/standalone';
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
import { Router } from '@angular/router';
|
|
|
import { ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
|
|
|
import { ModalController } from '@ionic/angular/standalone';
|
|
|
import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
|
|
|
import { openUserLoginModal } from 'src/lib/user/modal-user-login/modal-user-login.component';
|
|
|
+import { CustomerServiceComponent } from '../customer-service/customer-service.component';
|
|
|
|
|
|
@Component({
|
|
|
selector: 'app-tab2',
|
|
@@ -19,17 +20,40 @@ import { openUserLoginModal } from 'src/lib/user/modal-user-login/modal-user-log
|
|
|
IonCard,IonCardHeader,IonCardTitle,IonCardContent,
|
|
|
IonItem,IonLabel,
|
|
|
IonSelect,IonSelectOption,
|
|
|
- IonButton,IonList,
|
|
|
+ IonButton,IonList,IonIcon,
|
|
|
CommonModule
|
|
|
],
|
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
|
})
|
|
|
export class Tab2Page {
|
|
|
|
|
|
+
|
|
|
+ isModalOpen: boolean = false; // 定义 isModalOpen 属性
|
|
|
+ placeholderText: string = '';
|
|
|
+ placeholderIndex: number = 0;
|
|
|
+ placeholders: string[] = ['智能陪聊', '普通聊天', '小贴心建议'];
|
|
|
+ cyclePlaceholder() {
|
|
|
+ setInterval(() => {
|
|
|
+ this.placeholderText = this.placeholders[this.placeholderIndex];
|
|
|
+ this.placeholderIndex = (this.placeholderIndex + 1) % this.placeholders.length;
|
|
|
+ }, 2000); // 每2秒切换一次
|
|
|
+ }
|
|
|
+ async openCustomerService() {
|
|
|
+ const modal = await this.modalCtrl.create({
|
|
|
+ component: CustomerServiceComponent,
|
|
|
+ breakpoints: [0.3, 0.4],
|
|
|
+ initialBreakpoint: 0.3,
|
|
|
+ });
|
|
|
+ return await modal.present();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private modalCtrl: ModalController;
|
|
|
constructor(private router: Router,modalCtrl: ModalController) {
|
|
|
this.modalCtrl = modalCtrl;
|
|
|
// 其他构造函数代码
|
|
|
+ this.cyclePlaceholder();
|
|
|
}
|
|
|
async clickToConsult(chatpartner:CloudObject) {
|
|
|
// 验证用户登录
|
|
@@ -51,9 +75,7 @@ export class Tab2Page {
|
|
|
if(currentUser?.get("age")){
|
|
|
userPrompt += `,年龄:${currentUser?.get("age")}`
|
|
|
}
|
|
|
- //if (currentUser?.get("avatar")) {
|
|
|
- //userPrompt += `,头像:${currentUser?.get("avatar")}`;
|
|
|
- //}
|
|
|
+
|
|
|
// 弹窗形式聊天:开始聊天
|
|
|
localStorage.setItem("company","E4KpGvTEto")
|
|
|
let consult = new CloudObject("ChatRecord")
|
|
@@ -82,7 +104,7 @@ export class Tab2Page {
|
|
|
chat.role.set("bio",chatpartner.get("bio"));
|
|
|
chat.role.set("expertise", chatpartner.get("expertise"));
|
|
|
chat.role.set("avatar", chatpartner.get("avatar") || "/assets/img/2.png")//设置陪聊师头像
|
|
|
- //chat.role.set("avatar", currentUser.get("avatar") || "/assets/img/2.png"); // 设置用户头像
|
|
|
+
|
|
|
chat.role.set("prompt", `
|
|
|
# 角色设定
|
|
|
您是${chatpartner.get("name")},一位${chatpartner.get("bio")},${chatpartner.get("expertise")},需要为用户提供陪伴和支持等积极情绪。
|
|
@@ -98,8 +120,6 @@ export class Tab2Page {
|
|
|
let content:any = message?.content
|
|
|
if(typeof content == "string"){
|
|
|
messages.push(content); // 将新消息添加到 messages 数组中
|
|
|
- //if(content?.indexOf("[祝你有愉快的一天]")>-1){
|
|
|
- //console.log("对话结束")
|
|
|
consult.set({
|
|
|
content: messages.join("\n"), // 将所有消息合并为一个字符串
|
|
|
});
|
|
@@ -119,10 +139,94 @@ export class Tab2Page {
|
|
|
}
|
|
|
openChatPanelModal(this.modalCtrl,options)
|
|
|
}
|
|
|
- //selectedIssue:string='';
|
|
|
-
|
|
|
matchedCounselor: { name: string; specialty: string } | null = null;
|
|
|
|
|
|
+ async goChat(chatcompanion:CloudObject) {
|
|
|
+ // 验证用户登录
|
|
|
+ let currentUser = new CloudUser();
|
|
|
+ let userPrompt = ``
|
|
|
+ if(!currentUser?.id){
|
|
|
+ console.log("用户未登录,请登录后重试")
|
|
|
+ let user = await openUserLoginModal(this.modalCtrl)
|
|
|
+ if(!user?.id){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(currentUser?.get("username")){
|
|
|
+ userPrompt += `当前来访的用户,姓名:${currentUser?.get("username")}`
|
|
|
+ }
|
|
|
+ if(currentUser?.get("gender")){
|
|
|
+ userPrompt += `,性别:${currentUser?.get("gender")}`
|
|
|
+ }
|
|
|
+ if(currentUser?.get("age")){
|
|
|
+ userPrompt += `,年龄:${currentUser?.get("age")}`
|
|
|
+ }
|
|
|
+
|
|
|
+ // 弹窗形式聊天:开始聊天
|
|
|
+ localStorage.setItem("company","E4KpGvTEto")
|
|
|
+ let consult = new CloudObject("ChatRecord")
|
|
|
+ let messages: string[] = [];
|
|
|
+ let now = new Date();
|
|
|
+ let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
|
|
|
+ //对象权限的精确制定
|
|
|
+ let ACL:any = {//公开访客 不可读 不可写
|
|
|
+ "*":{read:false,write:false}
|
|
|
+ }
|
|
|
+ if(currentUser?.id){//当前用户 可读 可写
|
|
|
+ ACL[currentUser?.id] = {read:true,write:true}
|
|
|
+ }
|
|
|
+ consult.set({
|
|
|
+ title:`${chatcompanion.get('expertise') || ""}领域聊天记录${dateStr}-${chatcompanion.get('name')}`,
|
|
|
+ chatcompanion:chatcompanion.toPointer(),
|
|
|
+ user:currentUser.toPointer(),
|
|
|
+ ACL:ACL
|
|
|
+ })
|
|
|
+ let options:ChatPanelOptions = {
|
|
|
+ roleId:"2DXJkRsjXK",
|
|
|
+ onChatInit: (chat: FmodeChat) => {
|
|
|
+ console.log("onChatInit");
|
|
|
+ console.log("预设角色", chat.role);
|
|
|
+ chat.role.set("name", chatcompanion.get("name"));
|
|
|
+ chat.role.set("bio",chatcompanion.get("bio"));
|
|
|
+ chat.role.set("expertise", chatcompanion.get("expertise"));
|
|
|
+ chat.role.set("avatar", chatcompanion.get("avatar") || "/assets/img/2.png")//设置聊天伙伴头像
|
|
|
+
|
|
|
+ chat.role.set("prompt", `
|
|
|
+ # 角色设定
|
|
|
+ 您是${chatcompanion.get("name")},一位${chatcompanion.get("bio")}的聊天伙伴,需要为用户提供陪伴和支持等积极情绪。
|
|
|
+ # 开始话语
|
|
|
+ 当您准备好了,可以以一个关心用户的朋友的身份,向来访的用户打招呼。
|
|
|
+ # 对话环节
|
|
|
+ 耐心与用户聊天,给人一种暖心陪伴的感觉
|
|
|
+ ${userPrompt}
|
|
|
+ `);
|
|
|
+ },
|
|
|
+ onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
|
|
|
+ console.log("onMessage",message)
|
|
|
+ let content:any = message?.content
|
|
|
+ if(typeof content == "string"){
|
|
|
+ messages.push(content); // 将新消息添加到 messages 数组中
|
|
|
+ consult.set({
|
|
|
+ content: messages.join("\n"), // 将所有消息合并为一个字符串
|
|
|
+ });
|
|
|
+ //consult.save();
|
|
|
+ consult.save().then(() => {
|
|
|
+ console.log("聊天记录已保存");
|
|
|
+ }).catch((error) => {
|
|
|
+ console.error("保存聊天记录时出错:", error);
|
|
|
+ });
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // chat?.chatSession?.id 本次会话的 chatId
|
|
|
+ onChatSaved:(chat:FmodeChat)=>{
|
|
|
+ console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ openChatPanelModal(this.modalCtrl,options)
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
questions = [
|
|
|
{
|
|
|
title: '如何应对焦虑?',
|
|
@@ -141,13 +245,10 @@ export class Tab2Page {
|
|
|
},
|
|
|
];
|
|
|
|
|
|
- matchCounselor() {
|
|
|
- }
|
|
|
- goChat(){
|
|
|
- this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
|
|
|
- }
|
|
|
+ //matchCounselor() {
|
|
|
ngOnInit() {
|
|
|
- this.loadChatPartnerList()
|
|
|
+ this.loadChatPartnerList(),
|
|
|
+ this.loadChatCompanionList()
|
|
|
}
|
|
|
|
|
|
chatpartnerList:Array<CloudObject>=[]
|
|
@@ -155,4 +256,9 @@ export class Tab2Page {
|
|
|
let query = new CloudQuery("ChatPartner");
|
|
|
this.chatpartnerList = await query.find()
|
|
|
}
|
|
|
+ chatcompanionList:Array<CloudObject>=[]
|
|
|
+ async loadChatCompanionList(){
|
|
|
+ let query = new CloudQuery("ChatCompanion");
|
|
|
+ this.chatcompanionList = await query.find()
|
|
|
+ }
|
|
|
}
|