import { Component } from '@angular/core'; import { Router } from '@angular/router'; import { IonHeader, IonToolbar, IonTitle, IonContent, ModalController, IonButton } from '@ionic/angular/standalone'; import { ExploreContainerComponent } from '../explore-container/explore-container.component'; import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng'; // import { ModalAudioMessageComponent } from 'fmode-ng/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component'; import Parse from "parse"; import { IonCard, IonCardHeader, IonCardTitle, IonCardSubtitle, IonCardContent, IonGrid, IonRow, IonCol, IonIcon } from '@ionic/angular/standalone'; @Component({ selector: 'app-tab2', templateUrl: 'tab2.page.html', styleUrls: ['tab2.page.scss'], standalone: true, imports: [ IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent, IonButton, IonCard, IonCardHeader, IonCardTitle, IonCardSubtitle, IonCardContent, IonGrid, IonRow, IonCol, IonIcon, // ASR语音输入模块 FmChatModalInput, // ModalAudioMessageComponent ] }) export class Tab2Page { constructor( private modalCtrl:ModalController, private router:Router, ) { } title:string = "123" /** 示例:问诊ChatPanel面板 */ 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.给出诊断方案并给出处方 - 完成处方时,请在消息结尾附带: [完成] # 开始话语 当您准备好了,可以以一个医生的身份,向来访的用户打招呼。`); // 对话灵感分类 let promptCates = [ { "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/r1ltv1023812146.png", "name": "外科" }, { "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fo81fg034154259.png", "name": "内科" }, { "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fc1nqi034201098.png", "name": "心理" } ] setTimeout(() => { chat.role.set("promptCates",promptCates) }, 500); // 对话灵感列表 let promptList = [ { cate:"外科",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/r1ltv1023812146.png", messageList:["局部疼痛或肿胀","伤口出血或感染","关节活动受限","体表肿块或结节","外伤后活动障碍","皮肤溃疡不愈合","异物刺入或嵌顿","术后并发症复查","肢体麻木或无力","运动损伤疼痛"] }, { cate:"内科",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fo81fg034154259.png", messageList:["反复发热或低热","持续咳嗽咳痰","胸闷气短心悸","慢性腹痛腹泻","头晕头痛乏力","体重骤增或骤减","食欲异常或消化不良","尿频尿急尿痛","睡眠障碍易醒","异常出汗或怕冷"] }, { cate:"心理",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fc1nqi034201098.png", messageList:["持续情绪低落","焦虑紧张不安","失眠或睡眠过多","注意力难以集中","社交恐惧回避","强迫思维或行为","记忆减退疑虑","躯体无器质性疼痛","自杀倾向念头","现实感丧失体验"] }, ] let ChatPrompt = Parse.Object.extend("ChatPrompt"); setTimeout(() => { chat.promptList = promptList.map(item=>{ let prompt = new ChatPrompt(); prompt.set(item); prompt.img = item.img; return prompt; }) }, 500); }, 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) } /** * 恢复聊天 * @chatId 从onChatSaved生命周期中,获取chat?.chatSession?.id */ 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(); // } }