tab2.page.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <ion-header>
  2. <ion-toolbar color="primary">
  3. <ion-title>农业知识库</ion-title>
  4. <ion-buttons slot="end">
  5. <ion-button (click)="toggleFontSize()">
  6. <ion-icon [name]="isLargeFont ? 'text' : 'text-outline'"></ion-icon>
  7. </ion-button>
  8. <ion-button (click)="refreshData()">
  9. <ion-icon name="refresh"></ion-icon>
  10. </ion-button>
  11. </ion-buttons>
  12. </ion-toolbar>
  13. <!-- 搜索栏 -->
  14. <ion-toolbar class="search-toolbar">
  15. <ion-searchbar
  16. [(ngModel)]="searchQuery"
  17. placeholder="搜索病虫害或种植技术..."
  18. (ionChange)="onSearch()"
  19. animated>
  20. </ion-searchbar>
  21. <ion-button fill="clear" slot="end" (click)="startVoiceSearch()">
  22. <ion-icon name="mic"></ion-icon>
  23. </ion-button>
  24. </ion-toolbar>
  25. </ion-header>
  26. <ion-content [class.large-font]="isLargeFont">
  27. <!-- 分类导航 -->
  28. <div class="category-container">
  29. <ion-segment [(ngModel)]="currentCategory" (ionChange)="filterByCategory()">
  30. <ion-segment-button *ngFor="let cat of categories" [value]="cat.id">
  31. <ion-icon [name]="cat.icon"></ion-icon>
  32. <ion-label>{{ cat.name }}</ion-label>
  33. </ion-segment-button>
  34. </ion-segment>
  35. </div>
  36. <!-- 专家在线 -->
  37. <ion-card class="expert-card">
  38. <ion-card-header>
  39. <ion-card-title>👨🌾 专家在线咨询</ion-card-title>
  40. <ion-card-subtitle>立即连线农业专家解答疑难</ion-card-subtitle>
  41. </ion-card-header>
  42. <ion-card-content>
  43. <div class="expert-list">
  44. <div class="expert-item" *ngFor="let expert of onlineExperts" (click)="connectExpert(expert)">
  45. <ion-avatar>
  46. <img [src]="expert.avatar">
  47. </ion-avatar>
  48. <div class="expert-info">
  49. <h3>{{ expert.name }}</h3>
  50. <p>{{ expert.specialty }}</p>
  51. <ion-badge [color]="expert.isOnline ? 'success' : 'medium'">
  52. {{ expert.isOnline ? '在线' : '离线' }}
  53. </ion-badge>
  54. </div>
  55. <ion-button fill="clear" size="small">
  56. <ion-icon name="chatbubble-ellipses"></ion-icon>
  57. </ion-button>
  58. </div>
  59. </div>
  60. </ion-card-content>
  61. </ion-card>
  62. <!-- 知识卡片列表 -->
  63. <div class="knowledge-grid">
  64. <ion-card *ngFor="let item of filteredKnowledge"
  65. [class.emergency]="item.isEmergency"
  66. (click)="navigateToDetail(item)">
  67. <ion-badge *ngIf="item.tag" [color]="getTagColor(item.tag)">
  68. {{ getTagLabel(item.tag) }}
  69. </ion-badge>
  70. <ion-img [src]="item.image"></ion-img>
  71. <ion-card-header>
  72. <ion-card-title>{{ item.title }}</ion-card-title>
  73. <ion-card-subtitle>
  74. <ion-icon name="time"></ion-icon>
  75. {{ item.duration || '2分钟阅读' }}
  76. </ion-card-subtitle>
  77. </ion-card-header>
  78. <ion-card-content>
  79. {{ item.summary }}
  80. </ion-card-content>
  81. <ion-footer *ngIf="item.type === 'video'">
  82. <ion-button fill="clear">
  83. <ion-icon name="play" slot="start"></ion-icon>
  84. 播放视频
  85. </ion-button>
  86. </ion-footer>
  87. </ion-card>
  88. </div>
  89. <!-- 空状态 -->
  90. <div class="empty-state" *ngIf="filteredKnowledge.length === 0">
  91. <ion-icon name="book"></ion-icon>
  92. <h3>未找到相关知识点</h3>
  93. <p>尝试更换筛选条件或搜索其他关键词</p>
  94. <ion-button fill="outline" (click)="resetFilters()">重置筛选</ion-button>
  95. </div>
  96. </ion-content>