説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

conversation.component.html 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <div class="conversation-container">
  2. <!-- 消息区域 -->
  3. <div class="messages-container" #messagesContainer>
  4. <div *ngFor="let message of messages" class="message-wrapper">
  5. <div class="message" [class.user]="message.role === 'user'" [class.assistant]="message.role === 'assistant'">
  6. <div class="message-header">
  7. <mat-icon class="message-icon">{{ message.role === 'user' ? 'person' : 'smart_toy' }}</mat-icon>
  8. <span class="message-role">{{ message.role === 'user' ? '用户' : 'AI助手' }}</span>
  9. <span class="message-time">{{ message.timestamp | date:'HH:mm' }}</span>
  10. </div>
  11. <div class="message-content">
  12. <div [innerHTML]="message.content | markdown"></div>
  13. <mat-spinner *ngIf="message.loading" diameter="20" class="loading-spinner"></mat-spinner>
  14. </div>
  15. </div>
  16. </div>
  17. <div *ngIf="messages.length === 0" class="empty-state">
  18. <mat-icon>forum</mat-icon>
  19. <h3>开始对话</h3>
  20. <p>选择或创建一个会话来开始对话</p>
  21. </div>
  22. </div>
  23. <!-- 输入区域 -->
  24. <div class="input-container" *ngIf="activeSession">
  25. <mat-form-field appearance="outline" class="input-field">
  26. <textarea
  27. matInput
  28. [(ngModel)]="userInput"
  29. (keydown.enter)="onSendMessage($event)"
  30. placeholder="输入消息,按Enter发送,Shift+Enter换行"
  31. rows="3"
  32. #messageInput
  33. ></textarea>
  34. </mat-form-field>
  35. <button
  36. mat-raised-button
  37. color="primary"
  38. class="send-button"
  39. (click)="sendMessage()"
  40. [disabled]="!userInput.trim()"
  41. >
  42. <mat-icon *ngIf="!isLoading">send</mat-icon>
  43. <mat-spinner *ngIf="isLoading" diameter="20"></mat-spinner>
  44. </button>
  45. </div>
  46. <div *ngIf="!activeSession" class="no-session">
  47. <p>请先选择或创建一个会话</p>
  48. </div>
  49. </div>