|
@@ -17,7 +17,8 @@
|
|
<app-explore-container name="Tab 1 page"></app-explore-container>
|
|
<app-explore-container name="Tab 1 page"></app-explore-container>
|
|
</ion-content>
|
|
</ion-content>
|
|
-->
|
|
-->
|
|
-<!DOCTYPE html>
|
|
|
|
|
|
+
|
|
|
|
+<!-- <!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta charset="UTF-8">
|
|
@@ -28,9 +29,9 @@
|
|
</style>
|
|
</style>
|
|
</head>
|
|
</head>
|
|
<body>
|
|
<body>
|
|
- 1ssdwa
|
|
|
|
|
|
+ 1s
|
|
<div class="swim-container">
|
|
<div class="swim-container">
|
|
- <!-- 头部区域 -->
|
|
|
|
|
|
+
|
|
<div class="header">
|
|
<div class="header">
|
|
<div class="user-info">
|
|
<div class="user-info">
|
|
<div class="avatar">于</div>
|
|
<div class="avatar">于</div>
|
|
@@ -40,10 +41,9 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- <!-- 数据展示区 -->
|
|
|
|
|
|
+
|
|
<div class="data-section">
|
|
<div class="data-section">
|
|
- <!-- 主要数据 - 优化间距 -->
|
|
|
|
|
|
+
|
|
<div class="main-data">
|
|
<div class="main-data">
|
|
<div class="data-item">
|
|
<div class="data-item">
|
|
<div class="data-value">2.57</div>
|
|
<div class="data-value">2.57</div>
|
|
@@ -63,12 +63,12 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 地图区域 -->
|
|
|
|
|
|
+
|
|
<div class="map-area">
|
|
<div class="map-area">
|
|
游泳路线地图
|
|
游泳路线地图
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 详细数据 -->
|
|
|
|
|
|
+
|
|
<div class="detail-data">
|
|
<div class="detail-data">
|
|
<div class="detail-card">
|
|
<div class="detail-card">
|
|
<div class="data-value">1,850</div>
|
|
<div class="data-value">1,850</div>
|
|
@@ -89,11 +89,193 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- 底部区域 -->
|
|
|
|
|
|
+
|
|
<div class="footer">
|
|
<div class="footer">
|
|
<div class="source">数据来源: 高德地图 | 知乎@阿辞</div>
|
|
<div class="source">数据来源: 高德地图 | 知乎@阿辞</div>
|
|
<button class="action-btn">保存并分享</button>
|
|
<button class="action-btn">保存并分享</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</body>
|
|
-</html>
|
|
|
|
|
|
+</html> -->
|
|
|
|
+<ion-header [translucent]="true">
|
|
|
|
+ <ion-toolbar>
|
|
|
|
+ <!-- 顶部导航栏 -->
|
|
|
|
+ <ion-segment [(ngModel)]="selectedTab" scrollable>
|
|
|
|
+ <ion-segment-button value="recommend" class="active-tab">
|
|
|
|
+ <ion-label>推荐</ion-label>
|
|
|
|
+ </ion-segment-button>
|
|
|
|
+ <ion-segment-button value="vip">
|
|
|
|
+ <ion-icon name="crown-outline" slot="start"></ion-icon>
|
|
|
|
+ <ion-label>会员</ion-label>
|
|
|
|
+ <ion-badge *ngIf="!isVip" color="warning" slot="end">限免试用</ion-badge>
|
|
|
|
+ </ion-segment-button>
|
|
|
|
+ <ion-segment-button value="camp">
|
|
|
|
+ <ion-icon name="flame-outline" slot="start"></ion-icon>
|
|
|
|
+ <ion-label>减脂营</ion-label>
|
|
|
|
+ <ion-badge *ngIf="hasCampActivity" color="danger" slot="end"></ion-badge>
|
|
|
|
+ </ion-segment-button>
|
|
|
|
+ </ion-segment>
|
|
|
|
+
|
|
|
|
+ <ion-buttons slot="end">
|
|
|
|
+ <ion-button (click)="openNotifications()">
|
|
|
|
+ <ion-icon name="notifications-outline"></ion-icon>
|
|
|
|
+ <ion-badge *ngIf="unreadNotifications" color="danger" class="notification-badge"></ion-badge>
|
|
|
|
+ </ion-button>
|
|
|
|
+ </ion-buttons>
|
|
|
|
+ </ion-toolbar>
|
|
|
|
+
|
|
|
|
+ <!-- 搜索栏 -->
|
|
|
|
+ <ion-toolbar>
|
|
|
|
+ <ion-searchbar
|
|
|
|
+ [(ngModel)]="searchQuery"
|
|
|
|
+ [placeholder]="currentSearchHint"
|
|
|
|
+ animated
|
|
|
|
+ (click)="openSearchModal()">
|
|
|
|
+ </ion-searchbar>
|
|
|
|
+ </ion-toolbar>
|
|
|
|
+</ion-header>
|
|
|
|
+
|
|
|
|
+<ion-content [fullscreen]="true">
|
|
|
|
+ <!-- 快速入口分类(金刚区) -->
|
|
|
|
+ <div class="quick-access-section">
|
|
|
|
+ <h2 class="section-title">快速开始</h2>
|
|
|
|
+ <div class="quick-access-grid">
|
|
|
|
+ <!-- 第一行 -->
|
|
|
|
+ <ion-button fill="clear" class="quick-access-btn" *ngFor="let item of quickAccessItems.slice(0,4)">
|
|
|
|
+ <div class="btn-content">
|
|
|
|
+ <ion-icon [name]="item.icon"></ion-icon>
|
|
|
|
+ <span>{{item.name}}</span>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-button>
|
|
|
|
+
|
|
|
|
+ <!-- 第二行 -->
|
|
|
|
+ <ion-button fill="clear" class="quick-access-btn" *ngFor="let item of quickAccessItems.slice(4,8)">
|
|
|
|
+ <div class="btn-content">
|
|
|
|
+ <ion-icon [name]="item.icon"></ion-icon>
|
|
|
|
+ <span>{{item.name}}</span>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 运动数据模块 -->
|
|
|
|
+ <div class="data-section">
|
|
|
|
+ <h2 class="section-title">今日运动</h2>
|
|
|
|
+ <ion-card>
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <div class="calories-data">
|
|
|
|
+ <div class="data-main">
|
|
|
|
+ <span class="calories-value">479</span>
|
|
|
|
+ <span class="calories-unit">千卡</span>
|
|
|
|
+ <ion-icon name="trending-up-outline" class="trend-icon"></ion-icon>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="progress-container">
|
|
|
|
+ <ion-progress-bar [value]="0.95" color="primary"></ion-progress-bar>
|
|
|
|
+ <span class="progress-text">今日目标: 500千卡</span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <ion-button fill="clear" class="rank-btn">
|
|
|
|
+ <ion-icon name="podium-outline" slot="start"></ion-icon>
|
|
|
|
+ <span>好友排名: TOP 20%</span>
|
|
|
|
+ </ion-button>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 课程推荐模块 -->
|
|
|
|
+ <div class="course-section">
|
|
|
|
+ <h2 class="section-title">课程推荐</h2>
|
|
|
|
+
|
|
|
|
+ <!-- 最近练习 -->
|
|
|
|
+ <div class="course-row">
|
|
|
|
+ <div class="row-header">
|
|
|
|
+ <h3>最近练习</h3>
|
|
|
|
+ <ion-button fill="clear" size="small">更多</ion-button>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 替换原来的 ion-slides 部分 -->
|
|
|
|
+<swiper-container [init]="false" [config]="swiperConfig">
|
|
|
|
+ <swiper-slide *ngFor="let course of recentCourses">
|
|
|
|
+ <ion-card class="course-card">
|
|
|
|
+ <img [src]="course.image" alt="course image">
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>{{course.title}}</ion-card-title>
|
|
|
|
+ <ion-card-subtitle>
|
|
|
|
+ {{course.duration}} · {{course.level}}
|
|
|
|
+ <span class="calories-badge">🔥{{course.calories}}kcal</span>
|
|
|
|
+ </ion-card-subtitle>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-progress-bar *ngIf="course.progress" [value]="course.progress"></ion-progress-bar>
|
|
|
|
+ </ion-card>
|
|
|
|
+ </swiper-slide>
|
|
|
|
+</swiper-container>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 热门课程 -->
|
|
|
|
+ <div class="course-row">
|
|
|
|
+ <div class="row-header">
|
|
|
|
+ <h3>热门课程</h3>
|
|
|
|
+ <ion-button fill="clear" size="small">更多</ion-button>
|
|
|
|
+ </div>
|
|
|
|
+ <ion-slides [options]="slideOpts">
|
|
|
|
+ <ion-slide *ngFor="let course of popularCourses">
|
|
|
|
+ <ion-card class="course-card">
|
|
|
|
+ <img [src]="course.image" alt="course image">
|
|
|
|
+ <div class="card-badge" *ngIf="course.badge">
|
|
|
|
+ <ion-badge [color]="course.badge.color">{{course.badge.text}}</ion-badge>
|
|
|
|
+ </div>
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>{{course.title}}</ion-card-title>
|
|
|
|
+ <ion-card-subtitle>
|
|
|
|
+ {{course.duration}} · {{course.level}}
|
|
|
|
+ <span class="calories-badge">🔥{{course.calories}}kcal</span>
|
|
|
|
+ </ion-card-subtitle>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <div class="participants">
|
|
|
|
+ <ion-icon name="people-outline"></ion-icon>
|
|
|
|
+ <span>{{course.participants}}人训练</span>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-card>
|
|
|
|
+ </ion-slide>
|
|
|
|
+ </ion-slides>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 为你推荐 -->
|
|
|
|
+ <div class="recommend-section">
|
|
|
|
+ <div class="section-header">
|
|
|
|
+ <h2 class="section-title">为你推荐</h2>
|
|
|
|
+ <ion-button fill="clear" size="small">查看更多</ion-button>
|
|
|
|
+ </div>
|
|
|
|
+ <ion-list>
|
|
|
|
+ <ion-item *ngFor="let course of recommendedCourses" class="recommend-item">
|
|
|
|
+ <ion-thumbnail slot="start">
|
|
|
|
+ <img [src]="course.image">
|
|
|
|
+ <div class="match-badge">{{course.matchRate}}%匹配</div>
|
|
|
|
+ </ion-thumbnail>
|
|
|
|
+ <ion-label>
|
|
|
|
+ <h3>{{course.title}}</h3>
|
|
|
|
+ <p>{{course.duration}} · {{course.level}}</p>
|
|
|
|
+ <p class="course-description">{{course.description}}</p>
|
|
|
|
+ </ion-label>
|
|
|
|
+ </ion-item>
|
|
|
|
+ </ion-list>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 年度报告入口 -->
|
|
|
|
+ <div class="report-section">
|
|
|
|
+ <ion-card (click)="viewReport()">
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>我的2024运动报告</ion-card-title>
|
|
|
|
+ <ion-card-subtitle>已生成 · 解锁3枚新徽章</ion-card-subtitle>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <div class="badges-container">
|
|
|
|
+ <ion-badge *ngFor="let badge of unlockedBadges" color="light">
|
|
|
|
+ <ion-icon [name]="badge.icon"></ion-icon>
|
|
|
|
+ {{badge.name}}
|
|
|
|
+ </ion-badge>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+ </div>
|
|
|
|
+</ion-content>
|