|
@@ -19,7 +19,6 @@
|
|
|
|
|
|
<ion-content [fullscreen]="true">
|
|
<ion-content [fullscreen]="true">
|
|
<div style="height: 56px;"></div>
|
|
<div style="height: 56px;"></div>
|
|
-
|
|
|
|
<!-- 打卡 -->
|
|
<!-- 打卡 -->
|
|
<div *ngIf="selectedTab === 'checkin'" class="checkin-container">
|
|
<div *ngIf="selectedTab === 'checkin'" class="checkin-container">
|
|
<ion-card>
|
|
<ion-card>
|
|
@@ -61,161 +60,152 @@
|
|
|
|
|
|
<!-- 计划 -->
|
|
<!-- 计划 -->
|
|
<div *ngIf="selectedTab === 'plan'" class="plan-container">
|
|
<div *ngIf="selectedTab === 'plan'" class="plan-container">
|
|
- <ion-card>
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>我的本周计划</ion-card-title>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <ion-card>
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>我的本周计划</ion-card-title>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+
|
|
<div class="plan-table">
|
|
<div class="plan-table">
|
|
<ion-grid class="table">
|
|
<ion-grid class="table">
|
|
<ion-row>
|
|
<ion-row>
|
|
<ion-col size="1" class="grid-header">日期</ion-col>
|
|
<ion-col size="1" class="grid-header">日期</ion-col>
|
|
<ion-col size="1" class="grid-header">部位</ion-col>
|
|
<ion-col size="1" class="grid-header">部位</ion-col>
|
|
- <ion-col size="1.5" class="grid-header">项目1</ion-col>
|
|
|
|
- <ion-col size="1.5" class="grid-header">项目2</ion-col>
|
|
|
|
- <ion-col size="1.5" class="grid-header">项目3</ion-col>
|
|
|
|
- <ion-col size="1.5" class="grid-header">项目4</ion-col>
|
|
|
|
- <ion-col size="1.5" class="grid-header">状态</ion-col>
|
|
|
|
- <ion-col size="2" class="grid-header">操作</ion-col> <!-- 操作列 -->
|
|
|
|
|
|
+ <ion-col size="2.5" class="grid-header">项目1</ion-col>
|
|
|
|
+ <ion-col size="2.5" class="grid-header">项目2</ion-col>
|
|
|
|
+ <ion-col size="2.5" class="grid-header">项目3</ion-col>
|
|
|
|
+ <ion-col size="2.5" class="grid-header">项目4</ion-col>
|
|
</ion-row>
|
|
</ion-row>
|
|
|
|
|
|
<!-- 绑定计划数据 -->
|
|
<!-- 绑定计划数据 -->
|
|
- <ion-row *ngFor="let day of planList">
|
|
|
|
|
|
+ <ion-row *ngFor="let day of planList" (click)="editPlan(day)">
|
|
<ion-col size="1" class="plan-column">{{ day.get('date') }}</ion-col>
|
|
<ion-col size="1" class="plan-column">{{ day.get('date') }}</ion-col>
|
|
<ion-col size="1" class="plan-column">{{ day.get('trainingPart') }}</ion-col>
|
|
<ion-col size="1" class="plan-column">{{ day.get('trainingPart') }}</ion-col>
|
|
|
|
|
|
<!-- 显示每个训练项目,确保即使为空也占位 -->
|
|
<!-- 显示每个训练项目,确保即使为空也占位 -->
|
|
- <ion-col size="1.5" *ngFor="let task of day.get('trainingItems'); let i = index" class="plan-column">
|
|
|
|
- {{ task.item || '' }}: {{task.sets}} x {{task.reps}}
|
|
|
|
- </ion-col>
|
|
|
|
-
|
|
|
|
- <ion-col size="1.5" class="plan-column">
|
|
|
|
- <ion-list>
|
|
|
|
- <ion-item>
|
|
|
|
- <ion-select aria-label="fruit" value="未完成">
|
|
|
|
- <ion-select-option value="未完成">未完成</ion-select-option>
|
|
|
|
- <ion-select-option value="已完成">已完成</ion-select-option>
|
|
|
|
- <ion-select-option value="修改中">修改中</ion-select-option>
|
|
|
|
- </ion-select>
|
|
|
|
- </ion-item>
|
|
|
|
- </ion-list>
|
|
|
|
- </ion-col>
|
|
|
|
-
|
|
|
|
- <!-- 修改和删除按钮 -->
|
|
|
|
- <ion-col size="2" class="ion-text-center">
|
|
|
|
- <ion-buttons>
|
|
|
|
- <ion-button color="success" (click)="editPlan(day)">
|
|
|
|
- <ion-icon slot="start" name="create"></ion-icon> 修改
|
|
|
|
- </ion-button>
|
|
|
|
- <ion-button color="danger" (click)="deletePlan(day)">
|
|
|
|
- <ion-icon slot="start" name="trash"></ion-icon> 删除
|
|
|
|
- </ion-button>
|
|
|
|
- </ion-buttons>
|
|
|
|
|
|
+ <ion-col size="2.5" *ngFor="let task of day.get('trainingItems'); let i = index" class="plan-column">
|
|
|
|
+ <!-- 使用 div 或 span 来分隔 item 和 sets, reps -->
|
|
|
|
+ <div class="task-container">
|
|
|
|
+ <span class="task-item">{{ task.item || '' }}</span>
|
|
|
|
+ <span class="sets-reps">{{ task.sets }} x {{ task.reps }}</span>
|
|
|
|
+ </div>
|
|
</ion-col>
|
|
</ion-col>
|
|
</ion-row>
|
|
</ion-row>
|
|
</ion-grid>
|
|
</ion-grid>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <ion-button expand="full" color="primary" (click)="goToPage('test-page')">重新生成计划</ion-button>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
|
|
+ </ion-card>
|
|
|
|
+ <ion-card-subtitle>
|
|
|
|
+ <ion-icon name="alert-circle-outline" style="margin-right: 5px;"></ion-icon>点击行内数据可对计划进行修改哦!
|
|
|
|
+ </ion-card-subtitle>
|
|
|
|
+ <ion-button expand="full" shape="round" class="reverse" (click)="goToPage('test-page')">
|
|
|
|
+ <ion-icon name="infinite-outline" style="margin-right:5px ;"></ion-icon>重新生成计划
|
|
|
|
+ </ion-button>
|
|
|
|
+ </ion-card-content>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- 问诊 -->
|
|
<!-- 问诊 -->
|
|
<div *ngIf="selectedTab === 'consultation'" class="consult">
|
|
<div *ngIf="selectedTab === 'consultation'" class="consult">
|
|
- <!-- 健康问诊卡片 -->
|
|
|
|
- <ion-card>
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>健康问诊</ion-card-title>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
- <p>有任何不适,可以随时询问!</p>
|
|
|
|
|
|
|
|
- <!-- 健身建议和疼痛咨询左右分布 -->
|
|
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <ion-card>
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>健康问诊</ion-card-title>
|
|
|
|
+ <ion-card-subtitle>让健身更聪明,让健康更持久!</ion-card-subtitle>
|
|
|
|
+ </ion-card-header>
|
|
<ion-row>
|
|
<ion-row>
|
|
<!-- 健身建议 -->
|
|
<!-- 健身建议 -->
|
|
- <ion-col size="6" class="ion-text-center">
|
|
|
|
|
|
+ <ion-col class="ion-text-center">
|
|
<ion-img src="../../assets/images/action.png" alt="健身建议"></ion-img>
|
|
<ion-img src="../../assets/images/action.png" alt="健身建议"></ion-img>
|
|
- <ion-button expand="full" color="secondary" (click)="doPoemTask()">生成健身动作</ion-button>
|
|
|
|
|
|
+ <ion-button shape="round" color="secondary" (click)="doPoemTask()">
|
|
|
|
+ <ion-icon name="bicycle-outline" style="margin-right:5px;"></ion-icon>生成健身动作
|
|
|
|
+ </ion-button>
|
|
</ion-col>
|
|
</ion-col>
|
|
|
|
|
|
<!-- 疼痛咨询 -->
|
|
<!-- 疼痛咨询 -->
|
|
- <ion-col size="6" class="ion-text-center">
|
|
|
|
|
|
+ <ion-col class="ion-text-center">
|
|
<ion-img src="../../assets/images/ache.jpg" alt="疼痛咨询"></ion-img>
|
|
<ion-img src="../../assets/images/ache.jpg" alt="疼痛咨询"></ion-img>
|
|
- <ion-button expand="full" color="tertiary" (click)="doInqueryTask()">疼?点这里!</ion-button>
|
|
|
|
|
|
+ <ion-button shape="round" color="tertiary" (click)="doInqueryTask()">
|
|
|
|
+ <ion-icon name="alert-circle-outline" style="margin-right:5px;"></ion-icon>疼?点这里!
|
|
|
|
+ </ion-button>
|
|
</ion-col>
|
|
</ion-col>
|
|
</ion-row>
|
|
</ion-row>
|
|
|
|
+ </ion-card>
|
|
|
|
+
|
|
|
|
+ <!-- 任务区域 -->
|
|
|
|
+ <ion-card>
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>健康任务</ion-card-title>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <div *ngFor="let step of taskList">
|
|
|
|
+ <ion-item>
|
|
|
|
+ <ion-icon *ngIf="step.progress === 0 && !step.error" name="radio-button-off-outline"></ion-icon>
|
|
|
|
+ <ion-icon *ngIf="step.progress !== 0 && step.progress !== 1" name="reload-outline"></ion-icon>
|
|
|
|
+ <ion-icon *ngIf="step.progress === 1" name="checkmark-circle-outline"></ion-icon>
|
|
|
|
+ <ion-icon *ngIf="step.error" name="close-circle-outline"></ion-icon>
|
|
|
|
+ {{ step.title }}
|
|
|
|
+ <span *ngIf="step.progress">{{ step.progress * 100 | number:'2.0-0' }}%</span>
|
|
|
|
+ <span *ngIf="step.error" style="color:red;">{{ step.error }}</span>
|
|
|
|
+ </ion-item>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+
|
|
|
|
+ <!-- 图片展示 -->
|
|
|
|
+ <ion-card *ngIf="shareData.images">
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>动作展示</ion-card-title>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <div *ngFor="let imageUrl of shareData.images">
|
|
|
|
+ <img [src]="imageUrl" alt="诊断图片" style="width: 100%; height: 400px; object-fit: cover;" />
|
|
|
|
+ </div>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+
|
|
|
|
+ <!-- 诊断结果 -->
|
|
|
|
+ <ion-card *ngIf="shareData.diagResult">
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>{{ shareData.diagResult.title }}</ion-card-title>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-card-content>
|
|
|
|
+ <h2>{{ shareData.diagResult.desc }}</h2>
|
|
|
|
+ <fm-markdown-preview class="content-style" [content]=shareData.diagResult.content>
|
|
|
|
+ </fm-markdown-preview>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+
|
|
|
|
+ <!-- AI教练互动 -->
|
|
|
|
+ <ion-card id="coaches">
|
|
|
|
+ <ion-card-header>
|
|
|
|
+ <ion-card-title>教练简介</ion-card-title>
|
|
|
|
+ <ion-card-subtitle>顶级教练</ion-card-subtitle>
|
|
|
|
+ </ion-card-header>
|
|
|
|
+ <ion-card-content style="padding: 5px;">
|
|
|
|
+ <ion-list>
|
|
|
|
+ <ion-item *ngFor="let coach of coachList" lines="none">
|
|
|
|
+ <ion-thumbnail slot="start">
|
|
|
|
+ <img [src]="coach.get('avater') || '../../assets/images/coach1.jpg'" [alt]="coach.get('name')" />
|
|
|
|
+ </ion-thumbnail>
|
|
|
|
+ <div class="coach-info" style="width: 100px;">
|
|
|
|
+ <h3>{{ coach.get('name') }}({{ coach.get('age') }}岁)</h3>
|
|
|
|
+ <p>擅长领域:{{ coach.get('specialize')}}</p>
|
|
|
|
+ <p>WiseFitness俱乐部</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="margin-left: 10px;">
|
|
|
|
+ <ion-button shape="round" size="small" (click)="openInquiry(coach)">
|
|
|
|
+ <ion-icon name="logo-gitlab" style="margin-right: 5px;"></ion-icon>
|
|
|
|
+ 立即咨询
|
|
|
|
+ </ion-button>
|
|
|
|
+ </div>
|
|
|
|
+ </ion-item>
|
|
|
|
+ </ion-list>
|
|
|
|
+ </ion-card-content>
|
|
|
|
+ </ion-card>
|
|
|
|
+ </ion-card-content>
|
|
|
|
|
|
- <!-- 任务区域 -->
|
|
|
|
- <ion-card>
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>健康任务</ion-card-title>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
- <div *ngFor="let step of taskList">
|
|
|
|
- <ion-item>
|
|
|
|
- <!-- 待开始 -->
|
|
|
|
- <ion-icon *ngIf="step.progress === 0 && !step.error" name="radio-button-off-outline"></ion-icon>
|
|
|
|
- <!-- 进行中 -->
|
|
|
|
- <ion-icon *ngIf="step.progress !== 0 && step.progress !== 1" name="reload-outline"></ion-icon>
|
|
|
|
- <!-- 已完成 -->
|
|
|
|
- <ion-icon *ngIf="step.progress === 1" name="checkmark-circle-outline"></ion-icon>
|
|
|
|
- <!-- 已出错 -->
|
|
|
|
- <ion-icon *ngIf="step.error" name="close-circle-outline"></ion-icon>
|
|
|
|
- {{ step.title }}
|
|
|
|
- <span *ngIf="step.progress">{{ step.progress * 100 | number:'2.0-0' }}%</span>
|
|
|
|
- <span *ngIf="step.error" style="color:red;">{{ step.error }}</span>
|
|
|
|
- </ion-item>
|
|
|
|
- </div>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
-
|
|
|
|
- <!-- 图片展示 -->
|
|
|
|
- <ion-card *ngIf="shareData.images">
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>动作展示</ion-card-title>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
- <div *ngFor="let imageUrl of shareData.images">
|
|
|
|
- <img [src]="imageUrl" alt="诊断图片" style="width: 100%; height: 400px; object-fit: cover;" />
|
|
|
|
- </div>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
-
|
|
|
|
- <!-- 诊断结果 -->
|
|
|
|
- <ion-card *ngIf="shareData.diagResult">
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>{{ shareData.diagResult.title }}</ion-card-title>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
- <h2>{{ shareData.diagResult.desc }}</h2>
|
|
|
|
- <fm-markdown-preview class="content-style" [content]=shareData.diagResult.content>
|
|
|
|
- </fm-markdown-preview>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
-
|
|
|
|
- <!-- AI教练互动 -->
|
|
|
|
- <ion-card>
|
|
|
|
- <ion-card-header>
|
|
|
|
- <ion-card-title>顶级教练专区</ion-card-title>
|
|
|
|
- <ion-card-subtitle>教练简介</ion-card-subtitle>
|
|
|
|
- </ion-card-header>
|
|
|
|
- <ion-card-content>
|
|
|
|
- <ion-list>
|
|
|
|
- <ion-item (click)="openInquiry(coach)" *ngFor="let coach of coachList" lines="none">
|
|
|
|
- <ion-thumbnail slot="start">
|
|
|
|
- <img src="../../assets/images/coach1.jpg" alt="coach.get('name')">
|
|
|
|
- </ion-thumbnail>
|
|
|
|
- <div class="coach-info">
|
|
|
|
- <h3>{{ coach.get('name') }}({{ coach.get('age') }}岁)</h3>
|
|
|
|
- <p>擅长领域:{{ coach.get('specialize')}}</p>
|
|
|
|
- <p>WiseFitness俱乐部</p>
|
|
|
|
- </div>
|
|
|
|
- </ion-item>
|
|
|
|
- </ion-list>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
- </ion-card-content>
|
|
|
|
- </ion-card>
|
|
|
|
</div>
|
|
</div>
|
|
</ion-content>
|
|
</ion-content>
|