tab2.page.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import { Component,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
  2. import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
  3. import { ExploreContainerComponent } from '../explore-container/explore-container.component';
  4. import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCardTitle, IonItem, IonLabel,
  5. IonList,IonSelect, IonSelectOption } from '@ionic/angular/standalone';
  6. import { CommonModule } from '@angular/common';
  7. import { Router } from '@angular/router';
  8. import { ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
  9. import { ModalController } from '@ionic/angular/standalone';
  10. import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
  11. import { openUserLoginModal } from 'src/lib/user/modal-user-login/modal-user-login.component';
  12. @Component({
  13. selector: 'app-tab2',
  14. templateUrl: 'tab2.page.html',
  15. styleUrls: ['tab2.page.scss'],
  16. standalone: true,
  17. imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
  18. IonCard,IonCardHeader,IonCardTitle,IonCardContent,
  19. IonItem,IonLabel,
  20. IonSelect,IonSelectOption,
  21. IonButton,IonList,
  22. CommonModule
  23. ],
  24. schemas: [CUSTOM_ELEMENTS_SCHEMA],
  25. })
  26. export class Tab2Page {
  27. private modalCtrl: ModalController;
  28. constructor(private router: Router,modalCtrl: ModalController) {
  29. this.modalCtrl = modalCtrl;
  30. // 其他构造函数代码
  31. }
  32. async clickToConsult(chatpartner:CloudObject) {
  33. // 验证用户登录
  34. let currentUser = new CloudUser();
  35. let userPrompt = ``
  36. if(!currentUser?.id){
  37. console.log("用户未登录,请登录后重试")
  38. let user = await openUserLoginModal(this.modalCtrl)
  39. if(!user?.id){
  40. return
  41. }
  42. }
  43. if(currentUser?.get("username")){
  44. userPrompt += `当前来访的用户,姓名:${currentUser?.get("username")}`
  45. }
  46. if(currentUser?.get("gender")){
  47. userPrompt += `,性别:${currentUser?.get("gender")}`
  48. }
  49. if(currentUser?.get("age")){
  50. userPrompt += `,年龄:${currentUser?.get("age")}`
  51. }
  52. // 弹窗形式聊天:开始咨询
  53. localStorage.setItem("company","E4KpGvTEto")
  54. let consult = new CloudObject("ChatRecord")
  55. let now = new Date();
  56. let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
  57. //对象权限的精确制定
  58. let ACL:any = {//公开访客 不可读 不可写
  59. "*":{read:false,write:false}
  60. }
  61. if(currentUser?.id){//当前用户 可读 可写
  62. ACL[currentUser?.id] = {read:true,write:true}
  63. }
  64. consult.set({
  65. title:`${chatpartner.get('expertise') || ""}领域聊天记录${dateStr}-${chatpartner.get('name')}`,
  66. chatpartner:chatpartner.toPointer(),
  67. user:currentUser.toPointer(),
  68. ACL:ACL
  69. })
  70. let options:ChatPanelOptions = {
  71. roleId:"2DXJkRsjXK",
  72. onChatInit: (chat: FmodeChat) => {
  73. console.log("onChatInit");
  74. console.log("预设角色", chat.role);
  75. chat.role.set("name", chatpartner.get("name"));
  76. chat.role.set("bio",chatpartner.get("bio"));
  77. chat.role.set("expertise", chatpartner.get("expertise"));
  78. chat.role.set("avatar", chatpartner.get("avatar") || "/assets/img/2.png")
  79. chat.role.set("prompt", `
  80. # 角色设定
  81. 您是${chatpartner.get("name")},一位${chatpartner.get("bio")},${chatpartner.get("expertise")},需要为用户提供陪伴和支持等积极情绪。
  82. # 开始话语
  83. 当您准备好了,可以以一个关心用户的朋友的身份,向来访的用户打招呼。
  84. # 对话环节
  85. 每次回复用户消息都在消息结尾附带[祝你有愉快的一天]
  86. ${userPrompt}
  87. `);
  88. },
  89. onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
  90. console.log("onMessage",message)
  91. let content:any = message?.content
  92. if(typeof content == "string"){
  93. if(content?.indexOf("[祝你有愉快的一天]")>-1){
  94. console.log("对话结束")
  95. consult.set({
  96. content:content
  97. })
  98. consult.save();
  99. }
  100. }
  101. },
  102. // chat?.chatSession?.id 本次会话的 chatId
  103. onChatSaved:(chat:FmodeChat)=>{
  104. console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
  105. }
  106. }
  107. openChatPanelModal(this.modalCtrl,options)
  108. }
  109. //selectedIssue:string='';
  110. matchedCounselor: { name: string; specialty: string } | null = null;
  111. questions = [
  112. {
  113. title: '如何应对焦虑?',
  114. advice: '尝试深呼吸和正念冥想,保持规律的作息,健康饮食,设定小目标,培养兴趣爱好,适当锻炼。',
  115. expanded: false,
  116. },
  117. {
  118. title: '如何提高自信心?',
  119. advice: '设定小目标并逐步实现,进行积极自我对话,培养技能,保持健康的生活方式,多与他人社交。',
  120. expanded: false,
  121. },
  122. {
  123. title: '如何改善人际关系?',
  124. advice: '积极多与他人沟通,倾听对方的感受,理解他人的感受,多参加社交活动,保持积极的态度,尊重他人。',
  125. expanded: false,
  126. },
  127. ];
  128. matchCounselor() {
  129. }
  130. goChat(){
  131. this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
  132. }
  133. ngOnInit() {
  134. this.loadChatPartnerList()
  135. }
  136. chatpartnerList:Array<CloudObject>=[]
  137. async loadChatPartnerList(){
  138. let query = new CloudQuery("ChatPartner");
  139. this.chatpartnerList = await query.find()
  140. }
  141. }