cpy 5 місяців тому
батько
коміт
5f95a929bd

+ 4 - 1
sport-app/src/app/tab2/tab2.page.html

@@ -30,7 +30,10 @@
   </ion-item>
 
   <!-- 用户输入兴趣爱好 -->
-  
+  <ion-item>
+    <ion-label position="floating">兴趣爱好</ion-label>
+    <ion-textarea [(ngModel)]="userInterest" placeholder="请输入你的兴趣爱好" rows="3" autoGrow="true" required></ion-textarea>
+  </ion-item>
 
   <!-- 执行生成运动计划的按钮 -->
   <ion-button (click)="generateWorkoutPlan()" expand="block">生成运动计划</ion-button>

+ 59 - 12
sport-app/src/app/tab2/tab2.page.ts

@@ -1,8 +1,7 @@
 import { Component } from '@angular/core';
 import { IonicModule } from '@ionic/angular';
 import { FormsModule } from '@angular/forms';
-import { FmodeChatCompletion } from 'fmode-ng';
-import { CommonModule } from '@angular/common';
+
 @Component({
   selector: 'app-tab2',
   templateUrl: 'tab2.page.html',
@@ -10,7 +9,7 @@ import { CommonModule } from '@angular/common';
   standalone: true,
   imports: [
     IonicModule,
-    FormsModule,CommonModule // 导入 FormsModule 来支持 ngModel 双向绑定
+    FormsModule  // 导入 FormsModule 来支持 ngModel 双向绑定
   ]
 })
 export class Tab2Page {
@@ -18,7 +17,7 @@ export class Tab2Page {
   userHeight: number = 170;   // 默认身高
   userWeight: number = 65;    // 默认体重
   userGoal: string = '';      // 健身目标
-
+  userInterest: string = '';  // 兴趣爱好
 
   // 生成的运动计划
   workoutPlan: string = '';
@@ -33,27 +32,75 @@ export class Tab2Page {
     this.errorMessage = '';
 
     // 检查用户输入是否完整
-   
+    if (!this.userHeight || !this.userWeight || !this.userGoal || !this.userInterest) {
+      this.errorMessage = '请确保所有字段都已填写。';
+      return;
+    }
 
-    // 生成模拟运动计划
-    this.workoutPlan = this.generateMockWorkoutPlan(this.userGoal);
+    // 基于目标、身高、体重和兴趣生成运动计划
+    this.workoutPlan = this.createPersonalizedWorkoutPlan(
+      this.userGoal, 
+      this.userHeight, 
+      this.userWeight, 
+      this.userInterest
+    );
 
+    // 如果没有生成运动计划,显示错误消息
     if (!this.workoutPlan) {
       this.errorMessage = '无法生成运动计划,请稍后再试。';
     }
   }
 
-  // 模拟根据健身目标生成运动计划
-  generateMockWorkoutPlan(goal: string): string {
+  // 生成个性化运动计划的函数
+  createPersonalizedWorkoutPlan(goal: string, height: number, weight: number, interest: string): string {
+    // 基于目标生成基础计划
+    let basePlan = this.getGoalBasedPlan(goal);
+
+    // 根据兴趣爱好调整运动计划
+    let adjustedPlan = this.adjustPlanBasedOnInterests(basePlan, interest);
+
+    // 结合身高和体重调整计划(例如,体重较重可能需要更多有氧训练等)
+    let finalPlan = this.adjustPlanBasedOnBodyMetrics(adjustedPlan, height, weight);
+
+    return finalPlan;
+  }
+
+  // 基于健身目标生成运动计划
+  getGoalBasedPlan(goal: string): string {
     switch (goal) {
       case '增肌':
-        return '增肌计划:每周进行3次重量训练,结合有氧运动。包括卧推、深蹲、硬拉等基础动作。';
+        return '每周3次重量训练,重点训练大肌群,包括卧推、深蹲和硬拉。配合低强度有氧运动,如快走或慢跑。';
       case '减脂':
-        return '减脂计划:每周进行4次高强度间歇训练(HIIT),结合适量的有氧运动,如跑步、游泳等。';
+        return '每周4次有氧运动,如跑步、游泳或骑行,每次持续30-45分钟。配合2-3次力量训练,增强新陈代谢。';
       case '保持体形':
-        return '保持体形计划:每周进行3次中等强度的力量训练和2次有氧运动,保持体型的同时增强肌肉耐力。';
+        return '每周3次中等强度的力量训练,结合2-3次低强度有氧运动,如快走或瑜伽。';
       default:
         return '';
     }
   }
+
+  // 根据兴趣爱好调整运动计划
+  adjustPlanBasedOnInterests(plan: string, interests: string): string {
+    if (interests.includes('跑步')) {
+      plan += ' 如果你喜欢跑步,可以增加每周的跑步频率至3次,每次20-30分钟。';
+    }
+    if (interests.includes('游泳')) {
+      plan += ' 如果你喜欢游泳,可以用游泳替代有氧训练,保持每周至少2次,每次30分钟。';
+    }
+    if (interests.includes('瑜伽')) {
+      plan += ' 如果你喜欢瑜伽,可以增加每周1-2次瑜伽训练,有助于柔韧性和恢复。';
+    }
+    return plan;
+  }
+
+  // 根据身高和体重调整运动计划
+  adjustPlanBasedOnBodyMetrics(plan: string, height: number, weight: number): string {
+    if (weight > 80) {
+      plan += ' 由于体重大于80kg,建议增加每周有氧训练的频率,如慢跑或游泳,帮助减脂。';
+    }
+    if (height < 160) {
+      plan += ' 如果你的身高较矮,可能需要更多的核心训练来增强力量和稳定性。';
+    }
+    return plan;
+  }
 }