123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- 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,) {}
- }
|