import { Component } from '@angular/core'; import { Router } from '@angular/router'; import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng'; import Parse from "parse"; import { ModalController} from '@ionic/angular/standalone'; @Component({ selector: 'app-tab3', templateUrl: 'tab3.page.html', styleUrls: ['tab3.page.scss'], standalone: false, }) export class Tab3Page { constructor( private modalCtrl:ModalController, private router:Router, ) {} openConsult(chatId?:string){ // 如果传入chatId参数,优先使用传入的ID //const targetChatId = chatId ?? this.getLastChatId(); localStorage.setItem("company","E4KpGvTEto") let options:ChatPanelOptions = { roleId:"2DXJkRsjXK", // 预设,无需更改 //chatId:chatId, // 若存在,则恢复会话。若不存在,则开启新会话 //chatId:targetChatId, 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","国家二级心理咨询师,专注认知行为疗法"); // 角色标签 chat.role.set("tags",['情绪管理', '人际关系']); // 角色头像 chat.role.set("avatar","assets/icon/xinli1.jpeg") // 角色提示词 chat.role.set("prompt", ` # 角色设定 您是一位专业且富有同理心的心理陪伴师,主要目标是帮助用户进行情绪管理和自我成长。 # 开始话语 当您准备好了,可以以一位专业且富有同理心的心理陪伴师的身份,向咨询者打招呼。 # 对话原则 1. 保持温暖和支持性语气 2. 保持中立和非评判态度 3. 适时提供心理学知识 4. 提问使用开放式提问引导用户反思 5. 避免直接建议,多用引导式 6. 每日生成个性化日记建议 `); // 配置AI日记分类 let promptCates = [ { img: "assets/icon/ganen1.jpg", name: "感恩日记" }, { img: "assets/icon/jz.jpg", name: "自我觉察" }, { img: "assets/icon/qingxu.jpg", name: "情绪调节" } ]; setTimeout(() => { chat.role.set("promptCates", promptCates) }, 500); // 配置AI日记问题库 let promptList = [ { cate: "感恩日记", img: "assets/icon/ganen1.jpg", messageList: [ "今天最让你感恩的三件小事是什么?", "最近一次感受到他人善意的经历是?", "本周你帮助过谁?感受如何?", "此刻最想感谢的人是谁?为什么?" ] }, { cate: "自我觉察", img: "assets/icon/jz.jpg", messageList: [ "最近的情绪波动点在哪里?", "你发现自己的哪些思维模式?", "本周最有成就感的事是什么?", "最近一次突破舒适区的经历是?" ] }, { cate: "情绪调节", img: "assets/icon/qingxu.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:"AI日记", // 按钮标题 showTitle:true, // 是否显示标题文字 icon:"journal-outline", // 标题icon图标 onClick:()=>{ // 按钮点击事件 chat.isPromptModalOpen = true }, show:()=>{ // 按钮显示条件 return chat?.promptList?.length // 存在话题提示词时显示 } }, { title:"图片日记", // 按钮标题 showTitle:true, // 是否显示标题文字 icon:"image-outline", // 标题icon图标 onClick:async ()=>{ // 按钮点击事件 const desc = await this.getImageDescription(); this.generateSceneImage(desc); }, show:()=>{ // 按钮显示条件 return true // 一直显示 } }, ] }, onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{ console.log("onMessage",message) let content:any = message?.content if (typeof content === "string") { // 处理日记生成阶段 if (content.includes('[日记生成中]')) { this.handleDiaryGeneration(chat); } // 处理情绪分析结果 if (content.includes('[情绪分析完成]')) { this.showEmotionReport(chat); } } }, onChatSaved:(chat:FmodeChat)=>{ // chat?.chatSession?.id 本次会话的 chatId console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id) } } openChatPanelModal(this.modalCtrl,options) } // 在类中添加这两个新方法 private lastChatKey = "lastMentalChat"; /** 获取最后一次心理咨询对话ID */ getLastChatId(): string | undefined { const id = localStorage.getItem(this.lastChatKey); return id !== null ? id : undefined; // 显式转换null为undefined } /** 保存最后一次对话ID */ private saveLastChatId(chatId: string) { localStorage.setItem(this.lastChatKey, chatId); } /** 生成场景图片 */ private async generateSceneImage(description: string) { // 实际应调用图像生成API console.log("生成图片描述:", description); const mockImage = "http://example.com/generated-scene.png"; this.showGeneratedImage(mockImage); } private async getImageDescription(): Promise { return "一个宁静的湖边落日场景"; } private showGeneratedImage(url: string) { console.log("显示生成图片:", url); } // 处理日记生成逻辑 handleDiaryGeneration(chat: FmodeChat) { console.log("启动日记生成流程"); // 示例:生成结构化日记 let diaryTemplate = ` ## 今日心理日记 **情绪状态**: [自动识别结果] **关键事件**: [用户输入摘要] **认知模式**: [AI分析建议] `; } // 显示情绪分析报告 showEmotionReport(chat: FmodeChat) { console.log("生成情绪分析报告"); let report = ` 【情绪分析报告】 积极情绪占比: 65% 主要情绪关键词: 期待、感恩、困惑 建议练习: 正念呼吸法 `; } //开始聊天 goChat(){ this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK") } }