tab1.page.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import { CloudUser } from './../lib/ncloud';
  2. import { FmodeChat, FmodeChatMessage, openChatPanelModal, ChatPanelOptions } from 'fmode-ng';
  3. import { Component } from '@angular/core';
  4. import { IonCardHeader, IonHeader, IonToolbar, IonTitle, IonContent, IonTabButton, IonSearchbar, IonLabel, IonItem, IonList, NavController, IonCard, IonCardTitle, IonCardSubtitle, IonCardContent, IonThumbnail, IonFab, IonFabButton } from '@ionic/angular/standalone';
  5. import { ExploreContainerComponent } from '../explore-container/explore-container.component';
  6. import { IonButton } from '@ionic/angular/standalone';
  7. import { IonIcon } from '@ionic/angular/standalone';
  8. import { Router } from '@angular/router';
  9. import { CommonModule } from '@angular/common';
  10. import { ModalController } from '@ionic/angular/standalone';
  11. import { HttpClient } from '@angular/common/http';
  12. import { addIcons } from 'ionicons';
  13. import { add } from 'ionicons/icons';
  14. import { documentText, chatbubbles, person, calendar, newspaper,
  15. medkit,clipboard, podium, videocam, people } from 'ionicons/icons';
  16. import { CloudObject, CloudQuery } from '../lib/ncloud';
  17. import { IonRefresher, IonRefresherContent } from '@ionic/angular/standalone';
  18. addIcons({ documentText, chatbubbles, person, calendar, newspaper,
  19. medkit,clipboard, podium, videocam, people
  20. });
  21. @Component({
  22. selector: 'app-tab1',
  23. templateUrl: 'tab1.page.html',
  24. styleUrls: ['tab1.page.scss'],
  25. standalone: true,
  26. imports: [
  27. IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent, IonTabButton, IonButton,
  28. IonIcon,IonSearchbar,IonLabel,IonItem,IonList,CommonModule,IonCard,IonCardHeader,IonCardTitle,IonCardSubtitle,
  29. IonCardContent, IonThumbnail, IonFab,IonFabButton,IonIcon,IonRefresher,IonRefresherContent
  30. ],
  31. })
  32. export class Tab1Page {
  33. handleRefresh(event:any) {
  34. setTimeout(() => {
  35. // Any calls to load data go here
  36. this.loadDoctorList()
  37. event.target.complete();
  38. }, 2000);
  39. }
  40. admin:string = 'nRDdxdEn2k'
  41. user : CloudUser
  42. doctorList1: Array<CloudObject> = []
  43. async loadAllagent(){
  44. let query = new CloudQuery("NovelCharacter")
  45. query.include("user")
  46. this.doctorList1=await query.find()
  47. console.log("doctor.get('user').username",this.doctorList1[0].get("username"))
  48. }
  49. constructor(
  50. private router: Router,
  51. private modalCtrl: ModalController,
  52. // private navCtrl: NavController,
  53. private http: HttpClient// 注入 HttpClient,
  54. ) {
  55. this.user = new CloudUser();
  56. this.loadAllagent();
  57. addIcons({ add });
  58. }
  59. navigateToPage() {
  60. this.router.navigate(['../agent-create']); // 替换为目标页面的路由
  61. }
  62. /**
  63. * Go to the ai page
  64. */
  65. // 导航到指定路由
  66. navigateTo(route: string) {
  67. this.router.navigate([route]);
  68. console.log("route: ",route)
  69. }
  70. ngOnInit() {
  71. this.loadDoctorList()
  72. }
  73. doctorList:Array<CloudObject> = []
  74. async loadDoctorList(){
  75. let user = new CloudUser();
  76. let query = new CloudQuery("NovelCharacter");
  77. query.equalTo("user",user?.id)
  78. console.log("user",user.id)
  79. this.doctorList = await query.find()
  80. }
  81. /** 示例:问诊根据doctor拼接提示词 */
  82. openInquiry(doctor:CloudObject){
  83. console.log("doctor",doctor)
  84. localStorage.setItem("company","E4KpGvTEto")
  85. let consult = new CloudObject("NovelCharacter")
  86. let now = new Date();
  87. let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
  88. consult.set({
  89. title:`${doctor.get('depart')?.name || ""}门诊记录${dateStr}-${doctor?.get("name")}`,
  90. doctor:doctor.toPointer(),
  91. depart:doctor.get("depart")
  92. })
  93. let options:ChatPanelOptions = {
  94. roleId:"2DXJkRsjXK",
  95. onChatInit:(chat:FmodeChat)=>{
  96. console.log("onChatInit");
  97. console.log("预设角色",chat.role);
  98. chat.role.set("name",doctor?.get("name"));
  99. chat.role.set("title",doctor?.get("title"));
  100. chat.role.set("desc",doctor?.get("desc"));
  101. chat.role.set("tags",doctor?.get("qualifications"));
  102. chat.role.set("avatar",doctor?.get("avatar") || "../../assets/image/doctor5.png")
  103. chat.role.set("prompt",`
  104. # 角色设定
  105. 您是${doctor?.get("desc")},${doctor?.get("name")},年龄${doctor?.get("age")}岁,需要完成一次完整的门诊服务。
  106. # 对话环节
  107. 0.导诊(根据用户基本情况,引导挂号合适的科室)
  108. 1.预设的问询方式(根据不同症状来问询具体的情况)
  109. - 打招呼,以用户自述为主
  110. - 当信息充足时候,确认用户症状对应的科室,并进入下一个环节
  111. 2.拓展的问询细节
  112. 例如:用户反映呼吸不畅,拓展出:是否咳嗽;是否感觉痛或者痒等其他需要的问题。
  113. - 当问询细节补充完成后进入下一个环节
  114. 3.初步的诊断结果,并且同时列出检查检验项目
  115. 初步诊断:确定需要有哪些进一步检查
  116. 检查检验:获取医学客观数据
  117. - 等待用户提交客观数据,进入下一阶段
  118. 4.给出诊断方案并给出处方
  119. - 完成处方时,请在消息结尾附带: [处方完成]
  120. # 开始话语
  121. 当您准备好了,可以以一个医生的身份,向来访的用户打招呼。`);
  122. },
  123. onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
  124. console.log("onMessage",message)
  125. let content:any = message?.content
  126. if(typeof content == "string"){
  127. if(content?.indexOf("[处方完成]")>-1){
  128. console.log("门诊已完成")
  129. consult.set({
  130. content:content // 处方内容
  131. })
  132. consult.save();
  133. }
  134. }
  135. },
  136. onChatSaved:(chat:FmodeChat)=>{
  137. // chat?.chatSession?.id 本次会话的 chatId
  138. console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
  139. }
  140. }
  141. openChatPanelModal(this.modalCtrl,options)
  142. }
  143. deleteAgent(agent:CloudObject){
  144. console.log("删除了",agent);
  145. agent.destroy();
  146. this.loadDoctorList()
  147. }
  148. }