name-generator.page.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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-name-generator',
  8. templateUrl: './name-generator.page.html',
  9. styleUrls: ['./name-generator.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 NameGeneratorPage implements OnInit {
  21. constructor() { }
  22. ngOnInit() { }
  23. selectedReaderGroup: string = '不限人群';
  24. selectReaderGroup(group: string) {
  25. this.selectedReaderGroup = group;
  26. }
  27. // 用户输入提示词
  28. type: string = "东方玄幻";
  29. typeInput(ev: any) {
  30. this.type = ev.detail.value;
  31. }
  32. // 用户输入提示词
  33. userPrompt: string = "年轻女子意外获时光之匙,穿梭古今阻止历史篡改,与时空守护者共斗邪恶势力,守护时间线安全。";
  34. promptInput(ev: any) {
  35. this.userPrompt = ev.detail.value;
  36. }
  37. // 属性:组件内用于展示消息内容的变量
  38. responseMsg: any = "";
  39. // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
  40. isComplete: boolean = false; // 定义完成状态属性,用来标记是否补全完成
  41. sendMessage() {
  42. console.log("create");
  43. let PromptTemplate = `
  44. 您作为一名专业的${this.type}小说作者,请您根据用户提供的小说故事梗概和目标读者人群,给出多个小说书名。
  45. 主要读者人群为:${this.selectedReaderGroup}
  46. 以下是用户的口述:${this.userPrompt}
  47. 示例:
  48. - 读者人群:男频小说
  49. - 故事梗概:年轻男子意外获得神秘力量,成为守护世界的英雄。
  50. - 书名建议:《英雄崛起》、《神秘力量》、《守护者》
  51. - 读者人群:女频小说
  52. - 故事梗概:年轻女子意外获时光之匙,穿梭古今阻止历史篡改,与时空守护者共斗邪恶势力,守护时间线安全。
  53. - 书名建议:《时光守护者》、《穿越时空》、《历史篡改者》
  54. 请根据上述示例,为以下故事梗概和读者人群生成书名:
  55. `;
  56. let completion = new FmodeChatCompletion([
  57. { role: "system", content: "" },
  58. { role: "user", content: PromptTemplate }
  59. ]);
  60. completion.sendCompletion().subscribe((message: any) => {
  61. // 打印消息体
  62. console.log(message.content);
  63. // 赋值消息内容给组件内属性
  64. this.responseMsg = message.content;
  65. if (message?.complete) { // 判断message为完成状态,则设置isComplete为完成
  66. this.isComplete = true;
  67. }
  68. });
  69. }
  70. // 复制到剪贴板
  71. copyToClipboard() {
  72. const textarea = document.createElement('textarea');
  73. textarea.value = this.responseMsg;
  74. document.body.appendChild(textarea);
  75. textarea.select();
  76. document.execCommand('copy');
  77. document.body.removeChild(textarea);
  78. alert('内容已复制到剪贴板');
  79. }
  80. }