import { Component } from '@angular/core'; import { ModalController } from '@ionic/angular/standalone'; // 引用fmode-ng智能体组件 import { ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng'; import Parse from "parse"; import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud'; @Component({ selector: 'app-tab2', templateUrl: 'tab2.page.html', styleUrls: ['tab2.page.scss'], standalone: false, }) export class Tab2Page { // 处理图片加载失败 handleImageError(event: Event) { const img = event.target as HTMLImageElement; img.src = 'assets/icon/hoshino.jpeg'; // 备用图片 } // 处理按钮点击 openDetails() { console.log('查看资讯按钮被点击'); // 实际项目中可以跳转页面: // this.router.navigate(['/details']); } 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/icon/hoshino.jpeg") // 角色提示词 chat.role.set("prompt",` # 角色设定 性别:男 年龄:32岁 国籍:日本(活跃于国际漫画平台) 职业: 漫画家(创作小众治愈系作品) “漫画考古学家”(专注挖掘冷门神作) 线上漫画推荐专栏主理人 发型:微卷的深棕色短发,总有一撮呆毛翘起。 服饰:爱穿宽松的条纹衬衫+工装裤,胸前挂着一副老式放大镜(用来“鉴定漫画细节”)。 标志性道具: 手捧一本封面夸张的漫画,书脊贴满彩色标签。 背包上别满各国漫画角色的徽章。 表情:热情洋溢的笑容,眼神专注时会在镜片后反光。 `); // 对话灵感分类 let promptCates = [ { "img": "assets/icon/leixing.jpeg", "name": "类型" }, { "img": "assets/icon/fengge.jpeg", "name": "风格" }, { "img": "assets/icon/zhuti.jpeg", "name": "主题" } ] setTimeout(() => { chat.role.set("promptCates",promptCates) }, 500); // 对话灵感列表 let promptList = [ { cate:"类型",img:"/assets/icon/leixing.jpg", messageList:[ "我喜欢热血战斗类的漫画,比如《龙珠》《火影忍者》,有什么类似的推荐吗?", "有没有好看的悬疑推理漫画,剧情烧脑的那种?", "最近想看看轻松搞笑的日常漫画,能推荐一些吗?", "对科幻机甲类的漫画感兴趣,类似《高达》或者《攻壳机动队》这样的有推荐吗?", "有没有黑暗奇幻风格的漫画,比如《剑风传奇》这种?" ] }, { cate:"风格",img:"/assets/icon/fengge.jpg", messageList:[ "我喜欢画风细腻、人物美型的漫画,比如《CLAMP》的作品,有类似的推荐吗?", "有没有画风独特、辨识度高的漫画,比如《JOJO的奇妙冒险》那种?", "喜欢复古手绘风格的漫画,类似《浪客行》这样的,能推荐一些吗?", "有没有色彩鲜艳、视觉冲击力强的漫画,比如《死神》早期的风格?", "偏好写实画风的漫画,类似《寄生兽》这样的,有什么推荐?" ] }, { cate:"主题",img:"/assets/icon/zhuti.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) } constructor(private modalCtrl:ModalController,) {} }