|  | @@ -1,4 +1,8 @@
 | 
	
		
			
				|  |  |  import { Component } from '@angular/core';
 | 
	
		
			
				|  |  | +import { ModalController } from '@ionic/angular/standalone';
 | 
	
		
			
				|  |  | +// 引用fmode-ng智能体组件
 | 
	
		
			
				|  |  | +import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
 | 
	
		
			
				|  |  | +import Parse from "parse";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Component({
 | 
	
		
			
				|  |  |    selector: 'app-tab2',
 | 
	
	
		
			
				|  | @@ -8,6 +12,158 @@ import { Component } from '@angular/core';
 | 
	
		
			
				|  |  |  })
 | 
	
		
			
				|  |  |  export class Tab2Page {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  constructor() {}
 | 
	
		
			
				|  |  | +  constructor(
 | 
	
		
			
				|  |  | +    private modalCtrl:ModalController
 | 
	
		
			
				|  |  | +  ) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  openConsult(chatId?:string){
 | 
	
		
			
				|  |  | +    localStorage.setItem("company","E4KpGvTEto")
 | 
	
		
			
				|  |  | +    let options:ChatPanelOptions = {
 | 
	
		
			
				|  |  | +      roleId:"2DXJkRsjXK", // 预设,无需更改
 | 
	
		
			
				|  |  | +      // chatId:chatId, // 若存在,则恢复会话。若不存在,则开启新会话
 | 
	
		
			
				|  |  | +      onChatInit:(chat:FmodeChat)=>{
 | 
	
		
			
				|  |  | +        console.log("onChatInit");
 | 
	
		
			
				|  |  | +        console.log("Chat类",chat);
 | 
	
		
			
				|  |  | +        console.log("预设角色",chat.role);
 | 
	
		
			
				|  |  | +        // 角色名称
 | 
	
		
			
				|  |  | +        chat.role.set("name","林舒窈");
 | 
	
		
			
				|  |  | +        // 角色称号
 | 
	
		
			
				|  |  | +        chat.role.set("title","东方食养家");
 | 
	
		
			
				|  |  | +        // 角色描述
 | 
	
		
			
				|  |  | +        chat.role.set("desc","谈吐带有中医师的沉稳,擅长用生活化比喻解释复杂理论,林舒窈,年龄26岁");
 | 
	
		
			
				|  |  | +        // 角色标签
 | 
	
		
			
				|  |  | +        chat.role.set("tags",['跑步', '动感单车']);
 | 
	
		
			
				|  |  | +        // 角色头像
 | 
	
		
			
				|  |  | +        chat.role.set("avatar","/assets/lin.jpg")
 | 
	
		
			
				|  |  | +        // 角色提示词
 | 
	
		
			
				|  |  | +        chat.role.set("prompt",`
 | 
	
		
			
				|  |  | +# 角色设定
 | 
	
		
			
				|  |  | +姓名:林舒窈(Shuyao Lin)
 | 
	
		
			
				|  |  | +称号:「东方食养家」
 | 
	
		
			
				|  |  | +年龄:26岁
 | 
	
		
			
				|  |  | +背景:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +教育:北京中医药大学中医学+营养学双学位,后赴日本进修「药膳料理」,融合传统中医理论与现代营养学。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +职业经历:曾任北京某三甲医院临床营养科主任,后创立个人品牌「四季食养」,为明星、企业家定制高端养生膳食。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +社会身份:央视《健康中国》栏目常驻嘉宾,著有《本草厨房》《节气餐桌》等畅销书。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +形象侧写
 | 
	
		
			
				|  |  | +外貌:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +发型:乌黑及肩中长发,工作时用木簪盘起,干练优雅;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +五官:典型的东方温润长相,柳叶眉,眼神柔和但透着专业性的锐利;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +着装:工作时穿改良中式立领白袍(袖口绣二十四节气纹样),日常偏爱真丝旗袍+针织开衫。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +气质:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +谈吐带有中医师的沉稳,擅长用生活化比喻解释复杂理论(如“脾胃就像锅炉,火候不对再好的食材也浪费”);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +手部特写:指甲修剪圆润,无名指戴一枚翡翠戒指(家传药膳秘方的信物)。
 | 
	
		
			
				|  |  | +`);
 | 
	
		
			
				|  |  | +        // 对话灵感分类
 | 
	
		
			
				|  |  | +        let promptCates = [
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            "img": "/assets/icon/yy.jpg",
 | 
	
		
			
				|  |  | +            "name": "营养"
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            "img": "/assets/icon/rl.jpg",
 | 
	
		
			
				|  |  | +            "name": "热量"
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            "img": "/assets/icon/aq.jpg",
 | 
	
		
			
				|  |  | +            "name": "安全"
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        ]
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          chat.role.set("promptCates",promptCates)
 | 
	
		
			
				|  |  | +        }, 500);
 | 
	
		
			
				|  |  | +        // 对话灵感列表
 | 
	
		
			
				|  |  | +        let promptList = [
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            cate:"营养",img:"/assets/icon/yy.jpg",
 | 
	
		
			
				|  |  | +            messageList:[
 | 
	
		
			
				|  |  | +              "如何在不减少食物种类的情况下保证营养均衡?",
 | 
	
		
			
				|  |  | +              "有哪些高蛋白但低脂肪的美食推荐?",
 | 
	
		
			
				|  |  | +              "素食者如何确保摄入足够的蛋白质和铁?",
 | 
	
		
			
				|  |  | +              "怎样搭配碳水化合物、蛋白质和脂肪的比例更健康?"
 | 
	
		
			
				|  |  | +            ]
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            cate:"热量",img:"/assets/icon/rl.jpg",
 | 
	
		
			
				|  |  | +            messageList:[
 | 
	
		
			
				|  |  | +              "有哪些低卡路里但依然美味的零食选择?",
 | 
	
		
			
				|  |  | +              "如何在享受甜点的同时减少糖分摄入?",
 | 
	
		
			
				|  |  | +              "外出就餐时如何选择既健康又美味的菜品?",
 | 
	
		
			
				|  |  | +              "有哪些烹饪方式可以降低食物的热量但保留风味?"
 | 
	
		
			
				|  |  | +            ]
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            cate:"安全",img:"/assets/icon/aq.jpg",
 | 
	
		
			
				|  |  | +            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);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 功能按钮区域预设
 | 
	
		
			
				|  |  | +        chat.leftButtons = [
 | 
	
		
			
				|  |  | +          { // 提示 当角色配置预设提示词时 显示
 | 
	
		
			
				|  |  | +           title:"话题灵感", // 按钮标题
 | 
	
		
			
				|  |  | +           showTitle:true, // 是否显示标题文字
 | 
	
		
			
				|  |  | +           icon:"color-wand-outline", // 标题icon图标
 | 
	
		
			
				|  |  | +           onClick:()=>{ // 按钮点击事件
 | 
	
		
			
				|  |  | +               chat.isPromptModalOpen = true
 | 
	
		
			
				|  |  | +           },
 | 
	
		
			
				|  |  | +           show:()=>{ // 按钮显示条件
 | 
	
		
			
				|  |  | +             return chat?.promptList?.length // 存在话题提示词时显示
 | 
	
		
			
				|  |  | +           }
 | 
	
		
			
				|  |  | +         },
 | 
	
		
			
				|  |  | +      ]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
 | 
	
		
			
				|  |  | +        console.log("onMessage",message)
 | 
	
		
			
				|  |  | +        let content:any = message?.content
 | 
	
		
			
				|  |  | +        if(typeof content == "string"){
 | 
	
		
			
				|  |  | +          // 根据阶段标记判断下一步处理过程
 | 
	
		
			
				|  |  | +          if (content.includes('[导诊完成]')) {
 | 
	
		
			
				|  |  | +            // 进入问诊环节
 | 
	
		
			
				|  |  | +            console.log('进入问诊环节');
 | 
	
		
			
				|  |  | +          } else if (content.includes('[问诊完成]')) {
 | 
	
		
			
				|  |  | +            // 进入检查环节
 | 
	
		
			
				|  |  | +            console.log('进入检查环节');
 | 
	
		
			
				|  |  | +          } else if (content.includes('[检查完成]')) {
 | 
	
		
			
				|  |  | +            // 进入诊断与处方环节
 | 
	
		
			
				|  |  | +            console.log('进入诊断与处方环节');
 | 
	
		
			
				|  |  | +          } else if (content.includes('[处方完成]')) {
 | 
	
		
			
				|  |  | +            // 结束会话或其他逻辑
 | 
	
		
			
				|  |  | +            console.log('结束会话');
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      onChatSaved:(chat:FmodeChat)=>{
 | 
	
		
			
				|  |  | +        // chat?.chatSession?.id 本次会话的 chatId
 | 
	
		
			
				|  |  | +        console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    openChatPanelModal(this.modalCtrl,options)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 |