Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

home.component.html 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <div class="home-container">
  2. <!-- 顶部工具栏 -->
  3. <div class="toolbar">
  4. <h1>项目列表</h1>
  5. </div>
  6. <!-- 项目卡片网格 -->
  7. @if (isLoading) {
  8. <div class="loading-state">
  9. <mat-spinner diameter="40"></mat-spinner>
  10. <p>加载项目中...</p>
  11. </div>
  12. } @else if (projects.length === 0) {
  13. <div class="empty-state">
  14. <mat-icon class="empty-icon">inbox</mat-icon>
  15. <h3>暂无项目</h3>
  16. <p>点击"新建项目"按钮创建第一个项目</p>
  17. </div>
  18. } @else {
  19. <div class="projects-grid">
  20. @for (project of projects; track project.project_id) {
  21. <mat-card class="project-card">
  22. <mat-card-header>
  23. <mat-card-title>{{ project.title }}</mat-card-title>
  24. <mat-card-subtitle>
  25. <span class="agent-badge">{{ getAgentDisplayName(project.agent_name) }}</span>
  26. <span class="status-badge" [class]="getStatusClass(project.status)">
  27. {{ getStatusDisplayName(project.status) }}
  28. </span>
  29. </mat-card-subtitle>
  30. </mat-card-header>
  31. <mat-card-content>
  32. @if (project.description) {
  33. <p class="project-description">{{ project.description }}</p>
  34. }
  35. <div class="project-meta">
  36. <div class="meta-item">
  37. <mat-icon>calendar_today</mat-icon>
  38. <span>{{ formatDate(project.created_at) }}</span>
  39. </div>
  40. <div class="meta-item">
  41. <mat-icon>update</mat-icon>
  42. <span>{{ formatDate(project.updated_at) }}</span>
  43. </div>
  44. </div>
  45. <!-- 最新AI对话预览 -->
  46. <div class="log-preview">
  47. <mat-icon>chat</mat-icon>
  48. <span class="log-text">最新对话:{{ getProjectLatestMessage(project.project_id || project.id) }}</span>
  49. </div>
  50. </mat-card-content>
  51. <mat-card-actions>
  52. <button mat-button color="primary" (click)="runProject(project)">
  53. <mat-icon>play_arrow</mat-icon>
  54. 运行
  55. </button>
  56. <button mat-button (click)="editProject(project)" [disabled]="isProjectLoading(project.project_id || project.id)">
  57. @if (isProjectLoading(project.project_id || project.id)) {
  58. <mat-spinner diameter="20" class="inline-spinner"></mat-spinner>
  59. } @else {
  60. <mat-icon>edit</mat-icon>
  61. }
  62. 编辑
  63. </button>
  64. <button mat-button color="warn" (click)="deleteProject(project)">
  65. <mat-icon>delete</mat-icon>
  66. 删除
  67. </button>
  68. </mat-card-actions>
  69. </mat-card>
  70. }
  71. </div>
  72. }
  73. </div>