page-detail.page.html 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <ion-header [translucent]="true">
  2. <ion-toolbar color="primary">
  3. <ion-buttons slot="start">
  4. <ion-back-button defaultHref="/"></ion-back-button>
  5. </ion-buttons>
  6. <ion-title>{{ recipe?.title }}</ion-title>
  7. <ion-buttons slot="end">
  8. <ion-button (click)="toggleFavorite()">
  9. <ion-icon [name]="isFavorite ? 'heart' : 'heart-outline'"></ion-icon>
  10. </ion-button>
  11. <ion-button>
  12. <ion-icon name="share-social-outline"></ion-icon>
  13. </ion-button>
  14. </ion-buttons>
  15. </ion-toolbar>
  16. </ion-header>
  17. <ion-content [fullscreen]="true">
  18. <div class="recipe-container">
  19. <!-- 食谱图片 -->
  20. <div class="recipe-image-container">
  21. <img [src]="recipe?.imageUrl" [alt]="recipe?.title" class="recipe-image">
  22. <div class="image-overlay">
  23. <ion-chip color="danger">{{ recipe?.category }}</ion-chip>
  24. <ion-chip color="dark">{{ recipe?.difficulty }}</ion-chip>
  25. </div>
  26. </div>
  27. <!-- 食谱元信息 -->
  28. <ion-grid class="recipe-meta">
  29. <ion-row>
  30. <ion-col size="4" class="meta-item">
  31. <ion-icon name="time-outline"></ion-icon>
  32. <span>{{ recipe?.prepTime }} 准备</span>
  33. </ion-col>
  34. <ion-col size="4" class="meta-item">
  35. <ion-icon name="flame-outline"></ion-icon>
  36. <span>{{ recipe?.cookTime }} 烹饪</span>
  37. </ion-col>
  38. <ion-col size="4" class="meta-item">
  39. <ion-icon name="people-outline"></ion-icon>
  40. <span>{{ recipe?.servings }} 人份</span>
  41. </ion-col>
  42. </ion-row>
  43. </ion-grid>
  44. <!-- 食材部分 -->
  45. <ion-card>
  46. <ion-card-header>
  47. <ion-card-title>
  48. <ion-icon name="basket-outline" slot="start"></ion-icon>
  49. 食材
  50. </ion-card-title>
  51. </ion-card-header>
  52. <ion-card-content>
  53. <ion-list lines="none">
  54. <ion-item *ngFor="let ingredient of recipe?.ingredients">
  55. <ion-label>
  56. <h3>{{ ingredient.name }}</h3>
  57. </ion-label>
  58. <ion-note slot="end" color="primary">{{ ingredient.amount }}</ion-note>
  59. </ion-item>
  60. </ion-list>
  61. </ion-card-content>
  62. </ion-card>
  63. <!-- 制作步骤 -->
  64. <ion-card>
  65. <ion-card-header>
  66. <ion-card-title>
  67. <ion-icon name="restaurant-outline" slot="start"></ion-icon>
  68. 制作步骤
  69. </ion-card-title>
  70. </ion-card-header>
  71. <ion-card-content>
  72. <ion-list lines="none">
  73. <ion-item *ngFor="let step of recipe?.instructions; let i = index">
  74. <ion-avatar slot="start" class="step-number">
  75. {{ i + 1 }}
  76. </ion-avatar>
  77. <ion-label class="ion-text-wrap">
  78. <p>{{ step }}</p>
  79. </ion-label>
  80. </ion-item>
  81. </ion-list>
  82. </ion-card-content>
  83. </ion-card>
  84. <!-- 营养信息 -->
  85. <ion-card *ngIf="recipe?.nutrition">
  86. <ion-card-header>
  87. <ion-card-title>
  88. <ion-icon name="nutrition-outline" slot="start"></ion-icon>
  89. 营养信息 (每份)
  90. </ion-card-title>
  91. </ion-card-header>
  92. <ion-card-content>
  93. <ion-grid>
  94. <ion-row>
  95. <ion-col size="6" size-md="3" class="nutrition-item">
  96. <div class="nutrition-value">{{ recipe.nutrition.calories }}</div>
  97. <div class="nutrition-label">卡路里</div>
  98. </ion-col>
  99. <ion-col size="6" size-md="3" class="nutrition-item">
  100. <div class="nutrition-value">{{ recipe.nutrition.carbs }}g</div>
  101. <div class="nutrition-label">碳水化合物</div>
  102. </ion-col>
  103. <ion-col size="6" size-md="3" class="nutrition-item">
  104. <div class="nutrition-value">{{ recipe.nutrition.protein }}g</div>
  105. <div class="nutrition-label">蛋白质</div>
  106. </ion-col>
  107. <ion-col size="6" size-md="3" class="nutrition-item">
  108. <div class="nutrition-value">{{ recipe.nutrition.fat }}g</div>
  109. <div class="nutrition-label">脂肪</div>
  110. </ion-col>
  111. </ion-row>
  112. </ion-grid>
  113. </ion-card-content>
  114. </ion-card>
  115. </div>
  116. </ion-content>