world-setup.page.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { Component, OnInit } from '@angular/core';
  2. import { CommonModule } from '@angular/common';
  3. import { FormsModule } from '@angular/forms';
  4. import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput, IonBackButton, IonButtons, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonCol, IonRow, IonLabel, IonGrid } from '@ionic/angular/standalone';
  5. import { FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng';
  6. @Component({
  7. selector: 'app-world-setup',
  8. templateUrl: './world-setup.page.html',
  9. styleUrls: ['./world-setup.page.scss'],
  10. standalone: true,
  11. imports: [
  12. CommonModule, // 确保 CommonModule 已经导入
  13. FormsModule,
  14. IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput, IonBackButton, IonButtons,
  15. IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonCol, IonRow, IonLabel, IonGrid,
  16. // 引入fm-markdown-preview组件模块
  17. MarkdownPreviewModule
  18. ],
  19. })
  20. export class WorldSetupPage implements OnInit {
  21. constructor() { }
  22. ngOnInit() { }
  23. novelBackground: string = '在一个神秘的星球上,有许多不同的种族,他们都有着自己独特的文化和历史。';
  24. responseMsg: string = '';
  25. backgroundInput(event: any) {
  26. this.novelBackground = event.target.value;
  27. }
  28. // 用户输入提示词
  29. userPrompt: string = "我希望这个世界有强大的魔法体系,主角从一个普通少年成长为一代宗师。";
  30. promptInput(ev: any) {
  31. this.userPrompt = ev.detail.value;
  32. }
  33. // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
  34. isComplete: boolean = false; // 定义完成状态属性,用来标记是否补全完成
  35. sendMessage() {
  36. console.log("create");
  37. let PromptTemplate = `
  38. 您作为一名专业的小说作者,请您根据以下信息生成一个详细的世界架构设定:
  39. 小说背景:${this.novelBackground}
  40. 用户期望:${this.userPrompt}
  41. 请确保生成的世界架构与上述信息紧密相关,并且符合小说的整体风格。
  42. `;
  43. let completion = new FmodeChatCompletion([
  44. { role: "system", content: "" },
  45. { role: "user", content: PromptTemplate }
  46. ]);
  47. completion.sendCompletion().subscribe((message: any) => {
  48. // 打印消息体
  49. console.log(message.content);
  50. // 赋值消息内容给组件内属性
  51. this.responseMsg = message.content;
  52. if (message?.complete) { // 判断message为完成状态,则设置isComplete为完成
  53. this.isComplete = true;
  54. }
  55. });
  56. }
  57. // 复制到剪贴板
  58. copyToClipboard() {
  59. const textarea = document.createElement('textarea');
  60. textarea.value = this.responseMsg;
  61. document.body.appendChild(textarea);
  62. textarea.select();
  63. document.execCommand('copy');
  64. document.body.removeChild(textarea);
  65. alert('内容已复制到剪贴板');
  66. }
  67. }