|
@@ -1,18 +1,15 @@
|
|
|
-<ion-header [translucent]="true">
|
|
|
- <ion-toolbar color="primary">
|
|
|
+<ion-header [translucent]="true" class="recipe-header">
|
|
|
+ <ion-toolbar color="light">
|
|
|
<ion-buttons slot="start">
|
|
|
- <ion-back-button defaultHref="/" text="" color="light"></ion-back-button>
|
|
|
+ <ion-back-button defaultHref="/" text="" color="dark"></ion-back-button>
|
|
|
</ion-buttons>
|
|
|
<ion-title class="header-title">菜谱详情</ion-title>
|
|
|
<ion-buttons slot="end">
|
|
|
- <ion-button (click)="toggleBookmark()">
|
|
|
- <ion-icon
|
|
|
- [name]="isBookmarked ? 'bookmark' : 'bookmark-outline'"
|
|
|
- color="light">
|
|
|
- </ion-icon>
|
|
|
+ <ion-button fill="clear" color="dark">
|
|
|
+ <ion-icon slot="icon-only" name="bookmark-outline"></ion-icon>
|
|
|
</ion-button>
|
|
|
- <ion-button (click)="shareRecipe()">
|
|
|
- <ion-icon name="share-social-outline" color="light"></ion-icon>
|
|
|
+ <ion-button fill="clear" color="dark">
|
|
|
+ <ion-icon slot="icon-only" name="share-social-outline"></ion-icon>
|
|
|
</ion-button>
|
|
|
</ion-buttons>
|
|
|
</ion-toolbar>
|
|
@@ -21,51 +18,58 @@
|
|
|
<ion-content [fullscreen]="true" class="recipe-content">
|
|
|
<!-- 菜品图片 -->
|
|
|
<div class="recipe-image-container">
|
|
|
- <img
|
|
|
- [src]="recipe?.get('imageUrl') || 'assets/default-recipe.jpg'"
|
|
|
- [alt]="recipe?.get('title')"
|
|
|
- class="recipe-image">
|
|
|
+ <img [src]="recipe?.get('imageUrl') || 'assets/images/default-food.jpg'"
|
|
|
+ [alt]="recipe?.get('title')"
|
|
|
+ class="recipe-image">
|
|
|
<div class="image-overlay">
|
|
|
- <ion-chip color="light" class="category-chip">
|
|
|
- <ion-icon name="pricetag" slot="start" color="primary"></ion-icon>
|
|
|
- {{ recipe?.get('category') || '家常菜' }}
|
|
|
+ <ion-chip color="success" outline>
|
|
|
+ <ion-icon name="pricetag-outline" slot="start"></ion-icon>
|
|
|
+ {{ recipe?.get('category') || '未分类' }}
|
|
|
</ion-chip>
|
|
|
- <ion-chip color="light" class="time-chip">
|
|
|
- <ion-icon name="time" slot="start" color="warning"></ion-icon>
|
|
|
+ <ion-chip color="warning" outline>
|
|
|
+ <ion-icon name="time-outline" slot="start"></ion-icon>
|
|
|
{{ recipe?.get('cookTime') || '30分钟' }}
|
|
|
</ion-chip>
|
|
|
</div>
|
|
|
- <div class="rating-overlay" *ngIf="recipe?.get('rating')">
|
|
|
- <ion-badge color="warning" class="rating-badge">
|
|
|
- <ion-icon name="star" color="light"></ion-icon>
|
|
|
- {{ recipe?.get('rating') }}
|
|
|
- </ion-badge>
|
|
|
- </div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 菜品名称和基本信息 -->
|
|
|
- <ion-card class="recipe-header-card">
|
|
|
- <ion-card-header>
|
|
|
- <ion-card-title class="recipe-title">{{ recipe?.get('title') || '美味菜谱' }}</ion-card-title>
|
|
|
- </ion-card-header>
|
|
|
- <ion-card-content>
|
|
|
- <div class="recipe-meta">
|
|
|
- <ion-chip outline color="medium" class="meta-chip">
|
|
|
- <ion-icon name="time-outline" slot="start"></ion-icon>
|
|
|
- {{ recipe?.get('prepTime') || '15分钟' }} 准备
|
|
|
- </ion-chip>
|
|
|
- <ion-chip outline color="medium" class="meta-chip">
|
|
|
- <ion-icon name="flame-outline" slot="start"></ion-icon>
|
|
|
- {{ recipe?.get('difficulty') || '中等' }}
|
|
|
- </ion-chip>
|
|
|
- <ion-chip outline color="medium" class="meta-chip">
|
|
|
- <ion-icon name="people-outline" slot="start"></ion-icon>
|
|
|
- {{ recipe?.get('servings') || '4' }} 人份
|
|
|
- </ion-chip>
|
|
|
+ <!-- 菜品名称和评分 -->
|
|
|
+ <div class="recipe-info-section">
|
|
|
+ <div class="recipe-header">
|
|
|
+ <h1 class="recipe-title">{{ recipe?.get('title') }}</h1>
|
|
|
+ <div class="recipe-rating">
|
|
|
+ <ion-icon name="star" color="warning"></ion-icon>
|
|
|
+ <ion-icon name="star" color="warning"></ion-icon>
|
|
|
+ <ion-icon name="star" color="warning"></ion-icon>
|
|
|
+ <ion-icon name="star" color="warning"></ion-icon>
|
|
|
+ <ion-icon name="star-outline" color="warning"></ion-icon>
|
|
|
+ <span class="rating-text">4.5</span>
|
|
|
</div>
|
|
|
- <p class="recipe-description">{{ recipe?.get('description') || '一道美味的家常菜,简单易学,营养丰富' }}</p>
|
|
|
- </ion-card-content>
|
|
|
- </ion-card>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 菜品元信息 -->
|
|
|
+ <div class="recipe-meta">
|
|
|
+ <ion-item lines="none" class="meta-item">
|
|
|
+ <ion-icon slot="start" name="time-outline" color="medium"></ion-icon>
|
|
|
+ <ion-label>{{ recipe?.get('prepTime') || '10分钟' }} 准备</ion-label>
|
|
|
+ </ion-item>
|
|
|
+
|
|
|
+ <ion-item lines="none" class="meta-item">
|
|
|
+ <ion-icon slot="start" name="flame-outline" color="medium"></ion-icon>
|
|
|
+ <ion-label>{{ recipe?.get('difficulty') || '中等' }}难度</ion-label>
|
|
|
+ </ion-item>
|
|
|
+
|
|
|
+ <ion-item lines="none" class="meta-item">
|
|
|
+ <ion-icon slot="start" name="people-outline" color="medium"></ion-icon>
|
|
|
+ <ion-label>{{ recipe?.get('servings') || 2 }} 人份</ion-label>
|
|
|
+ </ion-item>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 菜品描述 -->
|
|
|
+ <p class="recipe-description" *ngIf="recipe?.get('description')">
|
|
|
+ {{ recipe?.get('description') }}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
|
|
|
<!-- 食材部分 -->
|
|
|
<ion-card class="section-card">
|
|
@@ -78,11 +82,9 @@
|
|
|
<ion-card-content>
|
|
|
<ion-list lines="none" class="ingredient-list">
|
|
|
<ion-item *ngFor="let ingredient of recipe?.get('ingredients')" class="ingredient-item">
|
|
|
- <ion-icon name="ellipse" slot="start" color="medium" class="ingredient-bullet"></ion-icon>
|
|
|
+ <ion-icon name="ellipse" slot="start" class="bullet-icon"></ion-icon>
|
|
|
<ion-label class="ingredient-name">{{ ingredient.name }}</ion-label>
|
|
|
- <ion-badge color="primary" mode="ios" class="ingredient-amount">
|
|
|
- {{ ingredient.amount }}
|
|
|
- </ion-badge>
|
|
|
+ <ion-note slot="end" color="primary" class="ingredient-amount">{{ ingredient.amount }}</ion-note>
|
|
|
</ion-item>
|
|
|
</ion-list>
|
|
|
</ion-card-content>
|
|
@@ -98,13 +100,10 @@
|
|
|
</ion-card-header>
|
|
|
<ion-card-content>
|
|
|
<ion-list lines="none" class="step-list">
|
|
|
- <ion-item
|
|
|
- *ngFor="let step of recipe?.get('steps'); let i = index"
|
|
|
- class="step-item"
|
|
|
- >
|
|
|
- <ion-badge color="primary" slot="start" class="step-number">
|
|
|
+ <ion-item *ngFor="let step of recipe?.get('steps'); let i = index" class="step-item">
|
|
|
+ <ion-avatar slot="start" class="step-number">
|
|
|
{{ i + 1 }}
|
|
|
- </ion-badge>
|
|
|
+ </ion-avatar>
|
|
|
<ion-label class="ion-text-wrap step-text">
|
|
|
<p>{{ step }}</p>
|
|
|
</ion-label>
|
|
@@ -113,10 +112,11 @@
|
|
|
</ion-card-content>
|
|
|
</ion-card>
|
|
|
|
|
|
- <!-- 底部操作栏 -->
|
|
|
- <ion-fab vertical="bottom" horizontal="end" slot="fixed">
|
|
|
- <ion-fab-button color="primary" (click)="rateRecipe()">
|
|
|
- <ion-icon name="star-outline"></ion-icon>
|
|
|
- </ion-fab-button>
|
|
|
- </ion-fab>
|
|
|
+ <!-- 底部操作按钮 -->
|
|
|
+ <div class="action-buttons">
|
|
|
+ <ion-button expand="block" color="success" shape="round" class="cook-button">
|
|
|
+ <ion-icon name="restaurant" slot="start"></ion-icon>
|
|
|
+ 开始烹饪
|
|
|
+ </ion-button>
|
|
|
+ </div>
|
|
|
</ion-content>
|