tab1.page.html 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <ion-header [translucent]="true" class="dynamic-header">
  2. <ion-toolbar>
  3. <!-- 状态概览栏 -->
  4. <ion-buttons slot="start">
  5. <ion-avatar>
  6. <img [src]="userData.avatar" (click)="openProfile()">
  7. <ion-badge *ngIf="unreadNotifications" color="danger" class="notification-badge"></ion-badge>
  8. </ion-avatar>
  9. </ion-buttons>
  10. <ion-title class="greeting-title">
  11. <h1>{{ timeBasedGreeting }}, {{ userData.name }}!</h1>
  12. <ion-note>今日目标完成 {{ dailyProgress }}%</ion-note>
  13. </ion-title>
  14. <ion-buttons slot="end">
  15. <ion-button (click)="openNotifications()">
  16. <ion-icon slot="icon-only" name="notifications"></ion-icon>
  17. </ion-button>
  18. </ion-buttons>
  19. </ion-toolbar>
  20. <!-- 天气状态栏 -->
  21. <ion-toolbar class="weather-bar">
  22. <ion-segment scrollable value="recommend" (ionChange)="segmentChanged($event)">
  23. <ion-segment-button value="recommend">
  24. <ion-icon name="flash"></ion-icon>
  25. <ion-label>推荐</ion-label>
  26. </ion-segment-button>
  27. <ion-segment-button value="training">
  28. <ion-icon name="barbell"></ion-icon>
  29. <ion-label>训练</ion-label>
  30. </ion-segment-button>
  31. <ion-segment-button value="nutrition">
  32. <ion-icon name="nutrition"></ion-icon>
  33. <ion-label>营养</ion-label>
  34. </ion-segment-button>
  35. </ion-segment>
  36. </ion-toolbar>
  37. </ion-header>
  38. <ion-content [fullscreen]="true" class="ion-padding-horizontal">
  39. <!-- 智能推荐主卡 -->
  40. <div class="recommendation-slider">
  41. <!-- <swiper-container [slidesPerView]="1.1" [spaceBetween]="16" [centeredSlides]="true">
  42. <swiper-slide *ngFor="let program of recommendedPrograms" [class.highlight]="program.isTodayRecommended">
  43. <ion-card class="program-card" (click)="startWorkout(program)">
  44. <div class="program-badge" *ngIf="program.isTodayRecommended">今日推荐</div>
  45. <img [src]="program.coverImage" alt="训练封面">
  46. <ion-card-header>
  47. <ion-card-title>{{ program.name }}</ion-card-title>
  48. <ion-card-subtitle>
  49. <ion-chip outline color="primary">
  50. <ion-icon name="time"></ion-icon>
  51. <ion-label>{{ program.duration }}分钟</ion-label>
  52. </ion-chip>
  53. <ion-chip outline color="secondary">
  54. <ion-icon name="flame"></ion-icon>
  55. <ion-label>{{ program.calories }}千卡</ion-label>
  56. </ion-chip>
  57. </ion-card-subtitle>
  58. </ion-card-header>
  59. <ion-card-content>
  60. <ion-progress-bar
  61. [value]="program.completionRate"
  62. [color]="program.completionRate > 0.7 ? 'success' : 'warning'">
  63. </ion-progress-bar>
  64. <p>{{ program.description }}</p>
  65. </ion-card-content>
  66. </ion-card>
  67. </swiper-slide>
  68. </swiper-container> -->
  69. </div>
  70. <!-- 健康数据仪表盘 -->
  71. <ion-card class="dashboard-card">
  72. <ion-card-header>
  73. <ion-card-title>健康数据看板</ion-card-title>
  74. <ion-card-subtitle>最近7天趋势</ion-card-subtitle>
  75. </ion-card-header>
  76. <ion-card-content>
  77. <!-- <app-health-metrics
  78. [metrics]="healthMetrics"
  79. (metricSelected)="onMetricSelect($event)">
  80. </app-health-metrics> -->
  81. </ion-card-content>
  82. </ion-card>
  83. <!-- 快捷功能入口 -->
  84. <ion-grid class="quick-actions">
  85. <ion-row>
  86. <ion-col size="6" *ngFor="let action of quickActions">
  87. <ion-button
  88. expand="block"
  89. fill="outline"
  90. shape="round"
  91. [color]="action.color"
  92. (click)="handleQuickAction(action)">
  93. <ion-icon [name]="action.icon" slot="start"></ion-icon>
  94. {{ action.label }}
  95. </ion-button>
  96. </ion-col>
  97. </ion-row>
  98. </ion-grid>
  99. <!-- 社区动态 -->
  100. <ion-list lines="none" class="community-feed">
  101. <ion-list-header>
  102. <ion-label>社区动态</ion-label>
  103. <ion-button fill="clear" size="small">查看全部</ion-button>
  104. </ion-list-header>
  105. <ion-item-sliding *ngFor="let post of communityPosts">
  106. <ion-item (click)="openPostDetail(post)">
  107. <ion-avatar slot="start">
  108. <img [src]="post.user.avatar">
  109. </ion-avatar>
  110. <ion-label>
  111. <h3>{{ post.user.name }}</h3>
  112. <p>{{ post.content }}</p>
  113. <ion-note color="medium">
  114. {{ post.timestamp }} ·
  115. <ion-icon name="heart" color="danger"></ion-icon> {{ post.likes }}
  116. </ion-note>
  117. </ion-label>
  118. </ion-item>
  119. <ion-item-options side="end">
  120. <ion-item-option color="primary" (click)="likePost(post)">
  121. <ion-icon slot="icon-only" name="heart"></ion-icon>
  122. </ion-item-option>
  123. </ion-item-options>
  124. </ion-item-sliding>
  125. </ion-list>
  126. </ion-content>
  127. <!-- 底部导航栏 -->
  128. <ion-footer>
  129. <ion-toolbar>
  130. <ion-buttons slot="start">
  131. <ion-button (click)="openCoach()">
  132. <div class="coach-avatar">
  133. <img src="assets/coach.png" alt="虚拟教练">
  134. <ion-badge *ngIf="hasNewMessage" color="danger" class="pulse"></ion-badge>
  135. </div>
  136. </ion-button>
  137. </ion-buttons>
  138. <ion-title>今日活动: {{ todaySteps | number }}步</ion-title>
  139. <ion-buttons slot="end">
  140. <ion-button (click)="startWorkout()" color="primary" shape="round">
  141. <ion-icon name="play" slot="start"></ion-icon>
  142. 开始训练
  143. </ion-button>
  144. </ion-buttons>
  145. </ion-toolbar>
  146. </ion-footer>