page-idea.component.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { Component, OnInit } from '@angular/core';
  2. import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput, IonButtons, IonIcon } from '@ionic/angular/standalone';
  3. /** 引用:从fmode-ng库引用FmodeChatCompletion类 */
  4. import { FmodeChatCompletion,MarkdownPreviewModule } from 'fmode-ng';
  5. import { ChangeDetectorRef } from '@angular/core'
  6. import { Router } from '@angular/router';
  7. import {chevronBack} from 'ionicons/icons';
  8. addIcons({chevronBack})
  9. import { addIcons } from 'ionicons';
  10. import { CloudObject, CloudUser } from 'src/lib/ncloud';
  11. @Component({
  12. selector: 'page-idea',
  13. templateUrl: './page-idea.component.html',
  14. styleUrls: ['./page-idea.component.scss'],
  15. standalone: true,
  16. imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonTextarea,IonInput,
  17. // 引入fm-markdown-preview组件模块
  18. MarkdownPreviewModule,
  19. IonButtons,IonIcon
  20. ],
  21. })
  22. export class PageIdeaComponent implements OnInit {
  23. constructor(private cdr: ChangeDetectorRef,
  24. private router: Router,
  25. ) {
  26. this.currentadivse = new CloudObject('padvise');
  27. } // 注入 ChangeDetectorRef
  28. ngOnInit() {}
  29. // 用户输入提示词,初始值为"素描"
  30. artStyle: string = "素描"; // 用户选择的绘画风格
  31. // 处理用户输入的绘画风格信息
  32. artStyleInput(ev: any) {
  33. this.artStyle = ev.detail.value; // 将用户输入的值赋给artStyle属性
  34. }
  35. // 用户输入提示词,初始值为"请描述您的绘画需求"
  36. userPrompt: string = "请描述您的绘画需求"; // 用户描述绘画需求的提示信息
  37. // 处理用户输入的绘画需求描述
  38. promptInput(ev: any) {
  39. this.userPrompt = ev.detail.value; // 将用户输入的值赋给userPrompt属性
  40. }
  41. // 属性:组件内用于展示绘画建议内容的变量
  42. responseMsg: any = "";
  43. // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
  44. isComplete: boolean = false; // 定义完成状态属性,用来标记是否补全完成
  45. // 发送消息并生成绘画建议
  46. sendMessage() {
  47. console.log("create"); // 打印创建消息的日志
  48. this.responseMsg = ""; // 在生成新的文本之前清空之前的文本
  49. // 创建提示模板,包含用户输入的绘画风格和需求描述
  50. let PromptTemplate = `
  51. 您作为一名专业的绘画老师,请您根据用户描述的绘画需求,给出一些绘画建议。
  52. 以下是用户的描述:${this.userPrompt}
  53. 用户选择的绘画风格是:${this.artStyle}
  54. `;
  55. // 实例化FmodeChatCompletion对象,传入系统和用户的消息
  56. let completion = new FmodeChatCompletion([
  57. { role: "system", content: "" }, // 系统角色消息,内容为空
  58. { role: "user", content: PromptTemplate } // 用户角色消息,内容为PromptTemplate
  59. ]);
  60. // 发送消息并订阅响应
  61. completion.sendCompletion().subscribe((message: any) => {
  62. // 打印返回的消息内容
  63. console.log(message.content);
  64. // 将返回的消息内容赋值给组件内的responseMsg属性
  65. this.responseMsg = message.content;
  66. this.cdr.detectChanges();
  67. // 判断消息是否完成,如果完成则设置isComplete为true
  68. if (message?.complete) {
  69. this.isComplete = true;
  70. this.addadvise(PromptTemplate);
  71. }
  72. });
  73. }
  74. overrideText() {
  75. this.responseMsg = "这是覆盖后的新文本"; // 设置为新的文本
  76. }
  77. gopage(){
  78. this.router.navigate(['/tabs/tab1'])
  79. }
  80. currentadivse: CloudObject | undefined; //
  81. advisedata: any = {};
  82. async addadvise(userresult:string) {
  83. let currentUser = new CloudUser();
  84. if (currentUser?.id) {
  85. this.currentadivse?.addPointer('user', '_User', currentUser.id);
  86. }
  87. if(this.isComplete){
  88. this.advisedata['content']=this.responseMsg;
  89. this.advisedata['type']='text';
  90. this.advisedata['idea']="主题:"+this.userPrompt+"风格:"+this.artStyle;
  91. }
  92. this.currentadivse?.set(this.advisedata);
  93. await this.currentadivse?.save();
  94. }
  95. }