tab1.page.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <ion-header [translucent]="true">
  2. <ion-toolbar color="primary">
  3. <ion-title>
  4. 健康助手
  5. </ion-title>
  6. <ion-buttons slot="start">
  7. <ion-menu-button></ion-menu-button>
  8. </ion-buttons>
  9. </ion-toolbar>
  10. </ion-header>
  11. <ion-content [fullscreen]="true" class="ion-padding">
  12. <!-- 下拉刷新 -->
  13. <ion-refresher slot="fixed" (ionRefresh)="doRefresh($event)">
  14. <ion-refresher-content></ion-refresher-content>
  15. </ion-refresher>
  16. <!-- 用户统计信息卡片 -->
  17. <ion-card class="user-card">
  18. <ion-grid>
  19. <ion-row class="ion-align-items-center">
  20. <!-- 用户信息 -->
  21. <ion-col size="4">
  22. <ion-avatar class="user-avatar">
  23. <img src="assets/images/avatar.png" />
  24. </ion-avatar>
  25. <ion-text class="ion-text-nowrap">
  26. <h2>王先生</h2>
  27. <ion-chip color="danger" outline>糖尿病</ion-chip>
  28. </ion-text>
  29. </ion-col>
  30. <!-- 健康指数 -->
  31. <ion-col size="5">
  32. <div class="health-index">
  33. <ion-text color="light">综合健康指数</ion-text>
  34. <div class="index-value">
  35. 85
  36. <ion-icon name="caret-up" color="success"></ion-icon>
  37. </div>
  38. </div>
  39. </ion-col>
  40. <!-- 健康动态 -->
  41. <ion-col size="3">
  42. <ion-text color="light" class="dynamic-text">
  43. 您的血糖控制良好,继续保持!
  44. <ion-button fill="clear" size="small">更多</ion-button>
  45. </ion-text>
  46. </ion-col>
  47. </ion-row>
  48. </ion-grid>
  49. </ion-card>
  50. <!-- 健康数据概览 -->
  51. <ion-card class="data-card">
  52. <ion-grid>
  53. <ion-row>
  54. <ion-col size="6" *ngFor="let metric of metrics">
  55. <div class="metric-item" [class.abnormal]="metric.abnormal">
  56. <div class="metric-header">
  57. <ion-text>{{metric.name}}</ion-text>
  58. <ion-icon [name]="metric.trend" [color]="metric.trendColor"></ion-icon>
  59. </div>
  60. <div class="metric-value">
  61. {{metric.value}}
  62. <ion-text class="unit">{{metric.unit}}</ion-text>
  63. </div>
  64. <ion-text color="medium" class="reference">参考: {{metric.reference}}</ion-text>
  65. </div>
  66. </ion-col>
  67. </ion-row>
  68. </ion-grid>
  69. <ion-fab vertical="bottom" horizontal="end" slot="fixed">
  70. <ion-fab-button (click)="addData()">
  71. <ion-icon name="add"></ion-icon>
  72. </ion-fab-button>
  73. </ion-fab>
  74. </ion-card>
  75. <!--今日任务-->
  76. <ion-card class="task-card">
  77. <ion-item lines="none">
  78. <ion-label (click)="importData()">今日任务 (3/5)</ion-label>
  79. <ion-progress-bar value="0.6" color="primary"></ion-progress-bar>
  80. </ion-item>
  81. <ion-list lines="none">
  82. <ion-item *ngFor="let task of tasks" [class.recommended]="task.recommended">
  83. <ion-icon :icon="task.icon" slot="start" color="primary"></ion-icon>
  84. <ion-label>
  85. <h3>{{task.title}}</h3>
  86. <p>{{task.description}}</p>
  87. <ion-text color="medium">{{task.time}}</ion-text>
  88. </ion-label>
  89. <ion-icon
  90. :name="task.completed ? 'checkmark-circle' : 'ellipse'"
  91. slot="end"
  92. [color]="task.completed ? 'success' : 'medium'">
  93. </ion-icon>
  94. </ion-item>
  95. </ion-list>
  96. </ion-card>
  97. <!-- 健康数据记录 -->
  98. <ion-card class="health-data-card">
  99. <ion-item lines="none">
  100. <ion-label>健康数据记录</ion-label>
  101. <ion-button fill="clear" size="small" (click)="loadHealthData()">
  102. <ion-icon name="refresh" slot="icon-only"></ion-icon>
  103. </ion-button>
  104. </ion-item>
  105. <!-- 加载状态 -->
  106. <div *ngIf="healthData.loading" class="loading-spinner">
  107. <ion-spinner name="crescent"></ion-spinner>
  108. </div>
  109. <!-- 血糖数据 -->
  110. <ion-card *ngIf="healthData.bloodGlucose.length > 0" class="data-section">
  111. <ion-card-header>
  112. <ion-card-title>
  113. <ion-icon name="water" color="primary"></ion-icon>
  114. 血糖记录
  115. </ion-card-title>
  116. </ion-card-header>
  117. <ion-list lines="none">
  118. <ion-item *ngFor="let item of healthData.bloodGlucose">
  119. <ion-label>
  120. <h3>{{item.get('glucoseValue')}} mmol/L</h3>
  121. <p>{{item.get('measurementType')}} · {{item.get('measurementTime') | date: 'MM/dd HH:mm'}}</p>
  122. <ion-text color="medium">{{item.get('notes')}}</ion-text>
  123. </ion-label>
  124. <ion-badge slot="end" color="success" *ngIf="item.get('glucoseValue') <= 6.1">正常</ion-badge>
  125. <ion-badge slot="end" color="warning" *ngIf="item.get('glucoseValue') > 6.1 && item.get('glucoseValue') <= 7.0">偏高</ion-badge>
  126. <ion-badge slot="end" color="danger" *ngIf="item.get('glucoseValue') > 7.0">过高</ion-badge>
  127. </ion-item>
  128. </ion-list>
  129. </ion-card>
  130. <!-- 血压数据 -->
  131. <ion-card *ngIf="healthData.bloodPressure.length > 0" class="data-section">
  132. <ion-card-header>
  133. <ion-card-title>
  134. <ion-icon name="speedometer" color="danger"></ion-icon>
  135. 血压记录
  136. </ion-card-title>
  137. </ion-card-header>
  138. <ion-list lines="none">
  139. <ion-item *ngFor="let item of healthData.bloodPressure">
  140. <ion-label>
  141. <h3>{{item.get('systolic')}}/{{item.get('diastolic')}} mmHg</h3>
  142. <p>脉搏: {{item.get('pulse')}} · {{item.get('measurementTime') | date: 'MM/dd HH:mm'}}</p>
  143. <ion-text color="medium">{{item.get('notes')}}</ion-text>
  144. </ion-label>
  145. <ion-badge slot="end" color="success" *ngIf="item.get('systolic') <= 120 && item.get('diastolic') <= 80">正常</ion-badge>
  146. <ion-badge slot="end" color="warning" *ngIf="(item.get('systolic') > 120 && item.get('systolic') <= 140) || (item.get('diastolic') > 80 && item.get('diastolic') <= 90)">偏高</ion-badge>
  147. <ion-badge slot="end" color="danger" *ngIf="item.get('systolic') > 140 || item.get('diastolic') > 90">过高</ion-badge>
  148. </ion-item>
  149. </ion-list>
  150. </ion-card>
  151. <!-- 心率数据 -->
  152. <ion-card *ngIf="healthData.heartRate.length > 0" class="data-section">
  153. <ion-card-header>
  154. <ion-card-title>
  155. <ion-icon name="heart" color="danger"></ion-icon>
  156. 心率记录
  157. </ion-card-title>
  158. </ion-card-header>
  159. <ion-list lines="none">
  160. <ion-item *ngFor="let item of healthData.heartRate">
  161. <ion-label>
  162. <h3>{{item.get('heartRate')}} 次/分</h3>
  163. <p>{{item.get('measurementMethod')}} · {{item.get('measurementTime') | date: 'MM/dd HH:mm'}}</p>
  164. <ion-text color="medium">{{item.get('notes')}}</ion-text>
  165. </ion-label>
  166. <ion-badge slot="end" color="success" *ngIf="item.get('heartRate') >= 60 && item.get('heartRate') <= 100">正常</ion-badge>
  167. <ion-badge slot="end" color="warning" *ngIf="item.get('heartRate') < 60 || item.get('heartRate') > 100">异常</ion-badge>
  168. </ion-item>
  169. </ion-list>
  170. </ion-card>
  171. </ion-card>
  172. <!--对话智能体-->
  173. <ion-card class="doctor-card">
  174. <div class="card-content">
  175. <div class="doctor-avatar">
  176. <img src="/assets/images/0.jpg" alt="慢性病医师头像" class="avatar-image">
  177. </div>
  178. <div class="doctor-info">
  179. <h2 class="doctor-name">丁医生</h2>
  180. <p class="doctor-title">慢性病管理主任医师</p>
  181. <div class="doctor-specialty">
  182. <ion-badge color="primary">糖尿病</ion-badge>
  183. <ion-badge color="primary">高血压</ion-badge>
  184. <ion-badge color="primary">冠心病</ion-badge>
  185. </div>
  186. <p class="doctor-desc">10年慢性病管理经验。擅长个性化治疗方案制定和长期健康管理。</p>
  187. </div>
  188. </div>
  189. <ion-button (click)="openConsult()" expand="block" color="success" class="consult-btn">
  190. <ion-icon name="medical" slot="start"></ion-icon>
  191. 立即咨询
  192. </ion-button>
  193. </ion-card>