tab2.page.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
  2. import { Router } from '@angular/router';
  3. import { addIcons } from 'ionicons';
  4. import { checkmarkCircle, calendar, helpCircle } from 'ionicons/icons';
  5. import { CommonModule } from '@angular/common';
  6. import { FormsModule } from '@angular/forms';
  7. import { IonButtons, IonItem, IonList, IonHeader, IonIcon, IonToolbar, IonContent, IonSegment, IonSegmentButton, IonGrid, IonRow, IonCol, IonButton, IonLabel, IonBadge, IonInput, ModalController } from '@ionic/angular/standalone';
  8. import { FmodeChatCompletion, ImagineWork, DalleOptions, ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from "fmode-ng";
  9. import { AgentTaskStep } from './agent/agent.task';
  10. import { TaskPoemPictureDesc } from './agent/tasks/poem/poem-desc';
  11. import { TaskPoemPictureCreate } from './agent/tasks/poem/poem-picture';
  12. import { startTask } from './agent/agent.start';
  13. import { TaskInqueryUserStory } from './agent/tasks/poem/inquiry/1.inquiry-user-story';
  14. import { TaskInqueryDoctorQuestion } from './agent/tasks/poem/inquiry/2.inquiry-doctor-question';
  15. import { TaskInqueryUserAnswer } from './agent/tasks/poem/inquiry/3.inquiry-user-answer';
  16. @Component({
  17. selector: 'app-tab2',
  18. templateUrl: 'tab2.page.html',
  19. styleUrls: ['tab2.page.scss'],
  20. standalone: true,
  21. imports: [
  22. IonButtons,
  23. IonItem,
  24. IonList,
  25. IonIcon,
  26. FormsModule,
  27. CommonModule,
  28. IonHeader,
  29. IonToolbar,
  30. IonContent,
  31. IonSegment,
  32. IonSegmentButton,
  33. IonGrid,
  34. IonRow,
  35. IonCol,
  36. IonButton,
  37. IonLabel,
  38. IonBadge,
  39. IonInput
  40. ]
  41. })
  42. export class Tab2Page implements OnInit {
  43. selectedTab: string = 'checkin'; // 默认选中的tab
  44. weekPlan: any[] = [
  45. { date: '周一', bodyPart: '胸部', tasks: ['卧推', '哑铃飞鸟', '俯卧撑', '仰卧起坐'], completed: false },
  46. { date: '周二', bodyPart: '背部', tasks: ['引体向上', '划船', '拉力器背肌'], completed: false },
  47. { date: '周三', bodyPart: '腿部', tasks: ['深蹲', '腿推', '腿弯举'], completed: false },
  48. { date: '周四', bodyPart: '肩部', tasks: ['肩推', '侧平举', '前平举'], completed: false },
  49. { date: '周五', bodyPart: '腹部', tasks: ['仰卧起坐', '卷腹', 'Russian twist'], completed: false }
  50. ];
  51. constructor(private router: Router, private modalCtrl: ModalController, private cdr: ChangeDetectorRef) {
  52. addIcons({ checkmarkCircle, calendar, helpCircle });
  53. }
  54. ngOnInit() {
  55. // 初始时不需要强制触发视图更新
  56. }
  57. editPlan(day: any) {
  58. console.log('编辑计划:', day);
  59. // 这里可以打开一个编辑页面或者弹窗,修改该计划
  60. // 示例:打开编辑页面
  61. // this.navCtrl.navigateForward('/edit-plan', { queryParams: { plan: day } });
  62. }
  63. // 删除计划
  64. deletePlan(day: any) {
  65. console.log('删除计划:', day);
  66. const index = this.weekPlan.indexOf(day);
  67. if (index !== -1) {
  68. this.weekPlan.splice(index, 1);
  69. }
  70. }
  71. //问诊区域
  72. taskList: AgentTaskStep[] = []
  73. //一个等待一秒的函数 每经过一秒
  74. wait(duration: number = 1000) {
  75. return new Promise(resolve => {
  76. setTimeout(() => {
  77. resolve(true)
  78. }, duration);
  79. })
  80. }
  81. shareData: any = {}
  82. // 任务:完成故事意境描述及图像绘制
  83. doPoemTask() {
  84. let task1 = TaskPoemPictureDesc({ shareData: this.shareData, modalCtrl: this.modalCtrl });
  85. let task2 = TaskPoemPictureCreate({ shareData: this.shareData, modalCtrl: this.modalCtrl });
  86. let PoemTaskList = [task1, task2]
  87. this.taskList = PoemTaskList
  88. startTask(PoemTaskList)
  89. }
  90. doInqueryTask() {
  91. let task1 = TaskInqueryUserStory({ shareData: this.shareData, modalCtrl: this.modalCtrl });
  92. let task2 = TaskInqueryDoctorQuestion({ shareData: this.shareData, modalCtrl: this.modalCtrl });
  93. let task3 = TaskInqueryUserAnswer({ shareData: this.shareData, modalCtrl: this.modalCtrl });
  94. // 定义任务集
  95. let InquireServiceTaskList = [
  96. task1, task2, task3
  97. ]
  98. // 传递给显示组件
  99. this.taskList = InquireServiceTaskList
  100. // 开始执行任务
  101. startTask(InquireServiceTaskList)
  102. }
  103. // 聊天页面
  104. openInquiry() {
  105. localStorage.setItem("company", "E4KpGvTEto")
  106. let options: ChatPanelOptions = {
  107. roleId: "2DXJkRsjXK",
  108. onChatInit: (chat: FmodeChat) => {
  109. console.log("onChatInit");
  110. console.log("预设角色", chat.role);
  111. chat.role.set("name", "晓晓");
  112. chat.role.set("title", "全科医生");
  113. chat.role.set("desc", "一名亲切和蔼的门诊全科主任医生,晓晓,年龄36岁");
  114. chat.role.set("tags", ["全科", "门诊"]);
  115. chat.role.set("avatar", "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
  116. chat.role.set("prompt", `
  117. # 角色设定
  118. 您是一名亲切和蔼的专业的全科医生,晓晓,年龄36岁,需要完成一次完整的门诊服务。
  119. # 对话环节
  120. 0.导诊(根据用户基本情况,引导挂号合适的科室)
  121. 1.预设的问询方式(感冒问呼吸、肚子疼叩诊)
  122. - 打招呼,以用户自述为主
  123. - 当信息充足时候,确认用户症状对应的科室,并进入下一个环节
  124. 2.拓展的问询细节
  125. 例如:用户反映呼吸不畅,拓展出:是否咳嗽;是否感觉痛或者痒等其他需要的问题。
  126. - 当问询细节补充完成后进入下一个环节
  127. 3.初步的诊断结果,并且同时列出检查检验项目
  128. 初步诊断:确定需要有哪些进一步检查
  129. 检查检验:获取医学客观数据
  130. - 等待用户提交客观数据,进入下一阶段
  131. 4.给出诊断方案并给出处方
  132. - 完成处方时,请在消息结尾附带: [完成]
  133. # 开始话语
  134. 当您准备好了,可以以一个医生的身份,向来访的用户打招呼。`);
  135. },
  136. onMessage: (chat: FmodeChat, message: FmodeChatMessage) => {
  137. console.log("onMessage", message)
  138. let content: any = message?.content
  139. if (typeof content == "string") {
  140. if (content?.indexOf("[完成]") > -1) {
  141. console.log("门诊已完成")
  142. }
  143. }
  144. },
  145. onChatSaved: (chat: FmodeChat) => {
  146. // chat?.chatSession?.id 本次会话的 chatId
  147. console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id)
  148. }
  149. }
  150. openChatPanelModal(this.modalCtrl, options)
  151. }
  152. openChat() {
  153. let options: ChatPanelOptions = {
  154. roleId: "2DXJkRsjXK",
  155. onChatSaved: (chat: FmodeChat) => {
  156. // chat?.chatSession?.id 本次会话的 chatId
  157. console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id)
  158. },
  159. }
  160. openChatPanelModal(this.modalCtrl, options)
  161. }
  162. restoreChat(chatId: string) {
  163. let options: ChatPanelOptions = {
  164. roleId: "2DXJkRsjXK",
  165. chatId: chatId
  166. }
  167. openChatPanelModal(this.modalCtrl, options)
  168. }
  169. goChat() {
  170. this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
  171. }
  172. // audioModalHeightPoint:number = 0.35;
  173. // async startTalk(){
  174. // // 根据手机兼容性,适配组件弹出高度
  175. // let height = document.body.clientHeight || 960;
  176. // this.audioModalHeightPoint = Number((165/height).toFixed(2));
  177. // // 弹出组件
  178. // let modal:any
  179. // let chat:any
  180. // modal = await this.modalCtrl.create({
  181. // component:ModalAudioMessageComponent,
  182. // componentProps:{
  183. // chat:chat,
  184. // modal:modal,
  185. // onBreakPointSet:()=>{
  186. // modal?.setCurrentBreakpoint(this.audioModalHeightPoint)
  187. // }
  188. // }
  189. // })
  190. // modal.present();
  191. // }
  192. // 页面跳转功能
  193. goToPage(page: string) {
  194. // 更新选中的tab
  195. this.selectedTab = page;
  196. this.router.navigate([`/tabs/${page}`]); // 然后再进行路由跳转
  197. // 手动检测视图变化,确保数据绑定正确
  198. this.cdr.detectChanges();
  199. }
  200. }