|
@@ -1,4 +1,53 @@
|
|
-import { Component } from '@angular/core';
|
|
|
|
|
|
+import { Component, OnInit } from '@angular/core';
|
|
|
|
+import { NavController } from '@ionic/angular/standalone';
|
|
|
|
+
|
|
|
|
+interface StatItem {
|
|
|
|
+ value: string;
|
|
|
|
+ label: string;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+interface SocialPost {
|
|
|
|
+ user: {
|
|
|
|
+ avatar: string;
|
|
|
|
+ nickname: string;
|
|
|
|
+ };
|
|
|
|
+ content: string;
|
|
|
|
+ likes: number;
|
|
|
|
+ comments: number;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 模拟AI服务
|
|
|
|
+class MockAIService {
|
|
|
|
+ async generatePlan(goal: string): Promise<string> {
|
|
|
|
+ // 模拟API调用延迟
|
|
|
|
+ await new Promise(resolve => setTimeout(resolve, 1500));
|
|
|
|
+
|
|
|
|
+ // 返回模拟的训练计划(Markdown格式)
|
|
|
|
+ return `
|
|
|
|
+# ${goal} 训练计划
|
|
|
|
+
|
|
|
|
+## 第一周: 基础适应期
|
|
|
|
+- **周一**: 全身基础训练 (45分钟)
|
|
|
|
+ - 深蹲 3×12
|
|
|
|
+ - 俯卧撑 3×10
|
|
|
|
+ - 平板支撑 3×30秒
|
|
|
|
+- **周三**: 有氧运动 (30分钟)
|
|
|
|
+ - 慢跑或快走
|
|
|
|
+- **周五**: 核心训练 (30分钟)
|
|
|
|
+
|
|
|
|
+## 第二周: 强度提升期
|
|
|
|
+- 增加训练强度和时长
|
|
|
|
+- 加入HIIT训练
|
|
|
|
+
|
|
|
|
+## 饮食建议
|
|
|
|
+- 蛋白质摄入: 每公斤体重1.5-2g
|
|
|
|
+- 多喝水,保持水分
|
|
|
|
+- 多吃蔬菜水果
|
|
|
|
+
|
|
|
|
+> 注意: 根据自身情况调整训练强度
|
|
|
|
+`;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
@Component({
|
|
@Component({
|
|
selector: 'app-tab1',
|
|
selector: 'app-tab1',
|
|
@@ -6,19 +55,25 @@ import { Component } from '@angular/core';
|
|
styleUrls: ['tab1.page.scss'],
|
|
styleUrls: ['tab1.page.scss'],
|
|
standalone: false,
|
|
standalone: false,
|
|
})
|
|
})
|
|
-export class Tab1Page {
|
|
|
|
|
|
+export class Tab1Page implements OnInit {
|
|
isDark = false;
|
|
isDark = false;
|
|
currentTime = this.formatTime(new Date());
|
|
currentTime = this.formatTime(new Date());
|
|
- dynamicStats = [
|
|
|
|
|
|
+ isLoading = false;
|
|
|
|
+ userGoal = '';
|
|
|
|
+ aiPlan = '';
|
|
|
|
+
|
|
|
|
+ dynamicStats: StatItem[] = [
|
|
{ value: '12h', label: '活跃时长' },
|
|
{ value: '12h', label: '活跃时长' },
|
|
{ value: '7.5h', label: '深睡时长' },
|
|
{ value: '7.5h', label: '深睡时长' },
|
|
{ value: '12.5km', label: '周跑量' }
|
|
{ value: '12.5km', label: '周跑量' }
|
|
];
|
|
];
|
|
|
|
+
|
|
smartRecommendation = '根据您的运动习惯,推荐进行HIIT训练';
|
|
smartRecommendation = '根据您的运动习惯,推荐进行HIIT训练';
|
|
- socialFeed = [
|
|
|
|
|
|
+
|
|
|
|
+ socialFeed: SocialPost[] = [
|
|
{
|
|
{
|
|
user: {
|
|
user: {
|
|
- avatar: 'assets/avatars/avatar1.png',
|
|
|
|
|
|
+ avatar: 'assets/icon/p1.png',
|
|
nickname: '健身达人'
|
|
nickname: '健身达人'
|
|
},
|
|
},
|
|
content: '完成今日挑战!#FitLife',
|
|
content: '完成今日挑战!#FitLife',
|
|
@@ -27,7 +82,7 @@ export class Tab1Page {
|
|
},
|
|
},
|
|
{
|
|
{
|
|
user: {
|
|
user: {
|
|
- avatar: 'assets/avatars/avatar2.png',
|
|
|
|
|
|
+ avatar: 'assets/icon/p2.png',
|
|
nickname: '运动小白'
|
|
nickname: '运动小白'
|
|
},
|
|
},
|
|
content: '第一次完成5公里!',
|
|
content: '第一次完成5公里!',
|
|
@@ -36,12 +91,21 @@ export class Tab1Page {
|
|
}
|
|
}
|
|
];
|
|
];
|
|
|
|
|
|
- constructor() {
|
|
|
|
|
|
+ private aiService = new MockAIService();
|
|
|
|
+
|
|
|
|
+ constructor(private navCtrl: NavController) {
|
|
setInterval(() => {
|
|
setInterval(() => {
|
|
this.currentTime = this.formatTime(new Date());
|
|
this.currentTime = this.formatTime(new Date());
|
|
}, 1000);
|
|
}, 1000);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ngOnInit() {
|
|
|
|
+ // 检查本地存储的主题偏好
|
|
|
|
+ const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
|
|
+ this.isDark = prefersDark.matches;
|
|
|
|
+ document.body.classList.toggle('dark', this.isDark);
|
|
|
|
+ }
|
|
|
|
+
|
|
private formatTime(date: Date): string {
|
|
private formatTime(date: Date): string {
|
|
return `${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}`;
|
|
return `${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}`;
|
|
}
|
|
}
|
|
@@ -54,4 +118,27 @@ export class Tab1Page {
|
|
startSmartPlan() {
|
|
startSmartPlan() {
|
|
alert(`开始${this.smartRecommendation}`);
|
|
alert(`开始${this.smartRecommendation}`);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ async generatePlan() {
|
|
|
|
+ if (!this.userGoal.trim()) {
|
|
|
|
+ alert('请输入您的训练目标');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this.isLoading = true;
|
|
|
|
+ this.aiPlan = '正在生成训练计划...';
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ this.aiPlan = await this.aiService.generatePlan(this.userGoal);
|
|
|
|
+ } catch (err: any) {
|
|
|
|
+ this.aiPlan = "生成计划时出错,请稍后再试";
|
|
|
|
+ console.error(err);
|
|
|
|
+ } finally {
|
|
|
|
+ this.isLoading = false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ goToTrainingPlan() {
|
|
|
|
+ this.navCtrl.navigateForward('/tabs/demo/training');
|
|
|
|
+ }
|
|
}
|
|
}
|