tab2.page.html 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <ion-header [translucent]="true">
  2. <ion-toolbar>
  3. <ion-title class="header-title">窑忆</ion-title>
  4. </ion-toolbar>
  5. </ion-header>
  6. <ion-content [fullscreen]="true" style="--background: url('/assets/images/background.jpg') no-repeat center/cover;">
  7. <!-- 左上角图标:控制左边栏 -->
  8. <div class="icon top_left" (click)="toggleSidebar()">
  9. <ion-icon [name]="isSidebarVisible ? 'chevron-back-outline' : 'menu-outline'"></ion-icon>
  10. </div>
  11. <!-- 左边栏 -->
  12. <div class="left_sidebar" [ngClass]="{ hidden: !isSidebarVisible }">
  13. <!-- 右上角图标:创建新对话 -->
  14. <div class="icon top_right" (click)="createNewChat()">
  15. <ion-icon name="add-circle-outline"></ion-icon>
  16. </div>
  17. <div class="sidebar_box">
  18. <!-- 动态显示对话列表 -->
  19. <div class="left_sidebar_content" *ngIf="isSidebarVisible">
  20. <ul>
  21. <li *ngFor="let conversation of conversations" (click)="switchConversation(conversation.id)" [ngClass]="{'active': conversation.id === currentConversationId}">
  22. <div class="conversation-item">
  23. <span>{{ conversation.title || '新对话' }}</span>
  24. </div>
  25. </li>
  26. </ul>
  27. </div>
  28. </div>
  29. <!-- 导出当前对话 -->
  30. <div class="transparent_box" (click)="exportConversation()">
  31. <!-- 左侧图标 -->
  32. <div class="export_icon">
  33. <ion-icon name="download-outline"></ion-icon>
  34. </div>
  35. <!-- 右侧文字 -->
  36. <div class="export_text">
  37. 导出对话
  38. </div>
  39. </div>
  40. </div>
  41. <!-- 右侧对话区域 -->
  42. <div class="chat_area" [ngStyle]="{'margin-left': isSidebarVisible ? '30%' : '0'}">
  43. <!-- 对话内容显示框 -->
  44. <div class="chat-container">
  45. <div *ngFor="let message of currentMessages" class="message-row" [ngClass]="{'user-message': message.role === 'user', 'ai-message': message.role === 'other'}">
  46. <!-- 用户消息内容 -->
  47. <div class="user-bubble" *ngIf="message.role === 'user'">
  48. {{ message.content}}
  49. </div>
  50. <!-- AI 消息内容 -->
  51. <div class="ai-message-row" *ngIf="message.role === 'other'">
  52. <div class="ai-bubble">
  53. <!-- 如果有图片,显示图片 -->
  54. <div *ngIf="message.image" class="ai-image">
  55. <img [src]="message.image" alt="生成图片" />
  56. </div>
  57. <!-- 如果是实时生成的内容,显示内容 -->
  58. <div *ngIf="message.content" class="ai-text">
  59. <div>{{ message.content }}</div>
  60. </div>
  61. </div>
  62. </div>
  63. <!-- 用户头像 -->
  64. <div *ngIf="message.role === 'user'" class="user-avatar">
  65. <img src="/assets/images/user.jpg" class="avatar" alt="用户头像">
  66. </div>
  67. </div>
  68. </div>
  69. <!-- 问题输入框 -->
  70. <div class="input_box">
  71. <!-- 语音输入图标 -->
  72. <ion-button (click)="startSpeechRecognition()" class="voice_button">
  73. <ion-icon name="mic-outline"></ion-icon>
  74. </ion-button>
  75. <!-- 输入框 -->
  76. <ion-input [(ngModel)]="userMessage" placeholder="输入问题..." clearInput></ion-input>
  77. <!-- 发送/终止按钮 -->
  78. <ion-button *ngIf="isGenerating; else sendButton" (click)="stopGeneration()" class="stop_button">
  79. <ion-icon name="pause-circle-outline"></ion-icon>
  80. </ion-button>
  81. <ng-template #sendButton>
  82. <ion-button (click)="sendMessage()" class="send_button">
  83. <ion-icon name="arrow-forward-circle-outline"></ion-icon>
  84. </ion-button>
  85. </ng-template>
  86. </div>
  87. </div>
  88. </ion-content>