|
@@ -4,8 +4,15 @@ import { addIcons } from 'ionicons';
|
|
|
import { checkmarkCircle, calendar, helpCircle } from 'ionicons/icons';
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
import { FormsModule } from '@angular/forms';
|
|
|
-import { IonButtons, IonItem, IonList, IonHeader, IonIcon, IonToolbar, IonContent, IonSegment, IonSegmentButton, IonGrid, IonRow, IonCol, IonButton, IonLabel, IonBadge, IonInput } from '@ionic/angular/standalone';
|
|
|
-
|
|
|
+import { IonButtons, IonItem, IonList, IonHeader, IonIcon, IonToolbar, IonContent, IonSegment, IonSegmentButton, IonGrid, IonRow, IonCol, IonButton, IonLabel, IonBadge, IonInput, ModalController } from '@ionic/angular/standalone';
|
|
|
+import { FmodeChatCompletion, ImagineWork, DalleOptions, ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from "fmode-ng";
|
|
|
+import { AgentTaskStep } from './agent/agent.task';
|
|
|
+import { TaskPoemPictureDesc } from './agent/tasks/poem/poem-desc';
|
|
|
+import { TaskPoemPictureCreate } from './agent/tasks/poem/poem-picture';
|
|
|
+import { startTask } from './agent/agent.start';
|
|
|
+import { TaskInqueryUserStory } from './agent/tasks/poem/inquiry/1.inquiry-user-story';
|
|
|
+import { TaskInqueryDoctorQuestion } from './agent/tasks/poem/inquiry/2.inquiry-doctor-question';
|
|
|
+import { TaskInqueryUserAnswer } from './agent/tasks/poem/inquiry/3.inquiry-user-answer';
|
|
|
@Component({
|
|
|
selector: 'app-tab2',
|
|
|
templateUrl: 'tab2.page.html',
|
|
@@ -42,7 +49,7 @@ export class Tab2Page implements OnInit {
|
|
|
{ date: '周五', bodyPart: '腹部', tasks: ['仰卧起坐', '卷腹', 'Russian twist'], completed: false }
|
|
|
];
|
|
|
|
|
|
- constructor(private router: Router, private cdr: ChangeDetectorRef) {
|
|
|
+ constructor(private router: Router, private modalCtrl: ModalController, private cdr: ChangeDetectorRef) {
|
|
|
addIcons({ checkmarkCircle, calendar, helpCircle });
|
|
|
}
|
|
|
|
|
@@ -64,6 +71,145 @@ export class Tab2Page implements OnInit {
|
|
|
this.weekPlan.splice(index, 1);
|
|
|
}
|
|
|
}
|
|
|
+ //问诊区域
|
|
|
+
|
|
|
+ taskList: AgentTaskStep[] = []
|
|
|
+ //一个等待一秒的函数 每经过一秒
|
|
|
+ wait(duration: number = 1000) {
|
|
|
+ return new Promise(resolve => {
|
|
|
+ setTimeout(() => {
|
|
|
+ resolve(true)
|
|
|
+ }, duration);
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ shareData: any = {}
|
|
|
+
|
|
|
+ // 任务:完成故事意境描述及图像绘制
|
|
|
+ doPoemTask() {
|
|
|
+ let task1 = TaskPoemPictureDesc({ shareData: this.shareData, modalCtrl: this.modalCtrl });
|
|
|
+ let task2 = TaskPoemPictureCreate({ shareData: this.shareData, modalCtrl: this.modalCtrl });
|
|
|
+ let PoemTaskList = [task1, task2]
|
|
|
+ this.taskList = PoemTaskList
|
|
|
+ startTask(PoemTaskList)
|
|
|
+ }
|
|
|
+
|
|
|
+ doInqueryTask() {
|
|
|
+ let task1 = TaskInqueryUserStory({ shareData: this.shareData, modalCtrl: this.modalCtrl });
|
|
|
+ let task2 = TaskInqueryDoctorQuestion({ shareData: this.shareData, modalCtrl: this.modalCtrl });
|
|
|
+ let task3 = TaskInqueryUserAnswer({ shareData: this.shareData, modalCtrl: this.modalCtrl });
|
|
|
+
|
|
|
+ // 定义任务集
|
|
|
+ let InquireServiceTaskList = [
|
|
|
+ task1, task2, task3
|
|
|
+ ]
|
|
|
+ // 传递给显示组件
|
|
|
+ this.taskList = InquireServiceTaskList
|
|
|
+ // 开始执行任务
|
|
|
+ startTask(InquireServiceTaskList)
|
|
|
+ }
|
|
|
+ // 聊天页面
|
|
|
+ openInquiry() {
|
|
|
+ localStorage.setItem("company", "E4KpGvTEto")
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ onChatInit: (chat: FmodeChat) => {
|
|
|
+ console.log("onChatInit");
|
|
|
+ console.log("预设角色", chat.role);
|
|
|
+ chat.role.set("name", "晓晓");
|
|
|
+ chat.role.set("title", "全科医生");
|
|
|
+ chat.role.set("desc", "一名亲切和蔼的门诊全科主任医生,晓晓,年龄36岁");
|
|
|
+ chat.role.set("tags", ["全科", "门诊"]);
|
|
|
+ chat.role.set("avatar", "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
|
|
|
+ chat.role.set("prompt", `
|
|
|
+# 角色设定
|
|
|
+您是一名亲切和蔼的专业的全科医生,晓晓,年龄36岁,需要完成一次完整的门诊服务。
|
|
|
+
|
|
|
+# 对话环节
|
|
|
+0.导诊(根据用户基本情况,引导挂号合适的科室)
|
|
|
+1.预设的问询方式(感冒问呼吸、肚子疼叩诊)
|
|
|
+- 打招呼,以用户自述为主
|
|
|
+- 当信息充足时候,确认用户症状对应的科室,并进入下一个环节
|
|
|
+2.拓展的问询细节
|
|
|
+例如:用户反映呼吸不畅,拓展出:是否咳嗽;是否感觉痛或者痒等其他需要的问题。
|
|
|
+- 当问询细节补充完成后进入下一个环节
|
|
|
+3.初步的诊断结果,并且同时列出检查检验项目
|
|
|
+初步诊断:确定需要有哪些进一步检查
|
|
|
+检查检验:获取医学客观数据
|
|
|
+- 等待用户提交客观数据,进入下一阶段
|
|
|
+4.给出诊断方案并给出处方
|
|
|
+- 完成处方时,请在消息结尾附带: [完成]
|
|
|
+
|
|
|
+# 开始话语
|
|
|
+当您准备好了,可以以一个医生的身份,向来访的用户打招呼。`);
|
|
|
+ },
|
|
|
+ onMessage: (chat: FmodeChat, message: FmodeChatMessage) => {
|
|
|
+ console.log("onMessage", message)
|
|
|
+ let content: any = message?.content
|
|
|
+ if (typeof content == "string") {
|
|
|
+ if (content?.indexOf("[完成]") > -1) {
|
|
|
+ console.log("门诊已完成")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onChatSaved: (chat: FmodeChat) => {
|
|
|
+ // chat?.chatSession?.id 本次会话的 chatId
|
|
|
+ console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ openChatPanelModal(this.modalCtrl, options)
|
|
|
+ }
|
|
|
+
|
|
|
+ openChat() {
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ onChatSaved: (chat: FmodeChat) => {
|
|
|
+ // chat?.chatSession?.id 本次会话的 chatId
|
|
|
+
|
|
|
+ console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id)
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ }
|
|
|
+ openChatPanelModal(this.modalCtrl, options)
|
|
|
+ }
|
|
|
+
|
|
|
+ restoreChat(chatId: string) {
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ chatId: chatId
|
|
|
+ }
|
|
|
+ openChatPanelModal(this.modalCtrl, options)
|
|
|
+ }
|
|
|
+
|
|
|
+ goChat() {
|
|
|
+ this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // audioModalHeightPoint:number = 0.35;
|
|
|
+ // async startTalk(){
|
|
|
+ // // 根据手机兼容性,适配组件弹出高度
|
|
|
+ // let height = document.body.clientHeight || 960;
|
|
|
+ // this.audioModalHeightPoint = Number((165/height).toFixed(2));
|
|
|
+
|
|
|
+ // // 弹出组件
|
|
|
+ // let modal:any
|
|
|
+ // let chat:any
|
|
|
+ // modal = await this.modalCtrl.create({
|
|
|
+ // component:ModalAudioMessageComponent,
|
|
|
+ // componentProps:{
|
|
|
+ // chat:chat,
|
|
|
+ // modal:modal,
|
|
|
+ // onBreakPointSet:()=>{
|
|
|
+ // modal?.setCurrentBreakpoint(this.audioModalHeightPoint)
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // modal.present();
|
|
|
+ // }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
// 页面跳转功能
|
|
|
goToPage(page: string) {
|