cpy преди 5 месеца
родител
ревизия
cc8ad45fa1
променени са 2 файла, в които са добавени 74 реда и са изтрити 96 реда
  1. 35 18
      sport-app/src/app/tab2/tab2.page.html
  2. 39 78
      sport-app/src/app/tab2/tab2.page.ts

+ 35 - 18
sport-app/src/app/tab2/tab2.page.html

@@ -1,31 +1,48 @@
 <ion-header [translucent]="true">
   <ion-toolbar>
     <ion-title>
-      运动中心
+      生成个性化运动计划
     </ion-title>
   </ion-toolbar>
 </ion-header>
-<h1>兴趣爱好</h1>
 
 <ion-content>
-<!-- 文本域:生成提示词 -->
-<ion-textarea [value]="userPrompt" (ionInput)="promptInput($event)" placeholder="文本提示词" autoGrow="true"></ion-textarea>
+  <!-- 用户输入身高 -->
+  <ion-item>
+    <ion-label position="floating">身高 (cm)</ion-label>
+    <ion-input [(ngModel)]="userHeight" type="number" placeholder="请输入身高" required></ion-input>
+  </ion-item>
 
-<!-- 按钮:执行消息生成函数 -->
-<ion-button (click)="sendMessage()" expand="block">消息生成</ion-button>
-  
-<!-- 展示:返回消息内容 -->
-<div>{{responseMsg}}</div>
-</ion-content>
+  <!-- 用户输入体重 -->
+  <ion-item>
+    <ion-label position="floating">体重 (kg)</ion-label>
+    <ion-input [(ngModel)]="userWeight" type="number" placeholder="请输入体重" required></ion-input>
+  </ion-item>
 
+  <!-- 用户选择健身目标 -->
+  <ion-item>
+    <ion-label position="floating">健身目标</ion-label>
+    <ion-select [(ngModel)]="userGoal" placeholder="请选择健身目标" required>
+      <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-content [fullscreen]="true">
-  <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">Tab 2</ion-title>
-    </ion-toolbar>
-  </ion-header>
+  <!-- 执行生成运动计划的按钮 -->
+  <ion-button (click)="generateWorkoutPlan()" expand="block">生成运动计划</ion-button>
+  
+  <!-- 展示生成的运动计划 -->
+  <div *ngIf="workoutPlan">
+    <h2>个性化运动计划</h2>
+    <p>{{ workoutPlan }}</p>
+  </div>
 
-  <app-explore-container name="Tab 2 page"></app-explore-container>
-</ion-content> -->
+  <!-- 错误消息展示 -->
+  <div *ngIf="errorMessage" style="color: red;">
+    <p>{{ errorMessage }}</p>
+  </div>
+</ion-content>

+ 39 - 78
sport-app/src/app/tab2/tab2.page.ts

@@ -1,98 +1,59 @@
 import { Component } from '@angular/core';
-import { IonButton, IonContent, IonHeader, IonicModule, IonInput, IonTextarea } from '@ionic/angular';  // 引入 IonicModule
-import { ExploreContainerComponent } from '../explore-container/explore-container.component';
-import { FmodeChatCompletion } from 'fmode-ng';  // 用来生成AI消息
-import { IonCardHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';
-
+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',
   styleUrls: ['tab2.page.scss'],
-  standalone: true,  // 保留 standalone 属性
+  standalone: true,
   imports: [
-    IonicModule,  // 引入 IonicModule 来使用 Ionic 组件
-    ExploreContainerComponent  // 如果有其他自定义组件需要引入,也可以在这里加入
+    IonicModule,
+    FormsModule,CommonModule // 导入 FormsModule 来支持 ngModel 双向绑定
   ]
 })
 export class Tab2Page {
-  promptInput(event: any): void {
-    this.userPrompt = event.detail.value;  // 获取输入框的值并更新 userPrompt
-    console.log('Updated Prompt:', this.userPrompt);
-  }
-  constructor() {}
+  // 用户输入数据
+  userHeight: number = 170;   // 默认身高
+  userWeight: number = 65;    // 默认体重
+  userGoal: string = '';      // 健身目标
 
-  // 用户输入提示词
-  userPrompt: string = "为运动爱好者、健身教练、运动员提供AI助手,帮助他们制定个性化的运动计划、实时监测运动数据、分析训练效果,从而提升运动表现和健康水平。";
-  
-  // 模拟的运动数据
-  exerciseData = {
-    steps: 0,            // 步数
-    caloriesBurned: 0,   // 消耗的卡路里
-    distance: 0          // 运动距离
-  };
-  
-  // 属性:组件内用于展示消息内容的变量
-  responseMsg: any = "";
-  exerciseFeedback: string = "";  // 用于存储AI反馈的训练效果分析
-  
-  // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
-  sendMessage() {
-    console.log("Creating personalized exercise plan...");
-    
-    let completion = new FmodeChatCompletion([
-      { role: "system", content: "你是一个运动和健康专家,帮助用户制定个性化的运动计划,监控运动数据并提供反馈。" },
-      { role: "user", content: this.userPrompt }
-    ]);
-    
-    completion.sendCompletion().subscribe((message: any) => {
-      // 打印消息体
-      console.log("AI Response:", message.content);
-      // 赋值消息内容给组件内属性
-      this.responseMsg = message.content;
 
-      // 在此,我们可以通过AI返回的数据或分析来生成反馈
-      this.analyzeExerciseData();
-    });
-  }
+  // 生成的运动计划
+  workoutPlan: string = '';
+  errorMessage: string = '';  // 错误消息
+
+  constructor() {}
 
-  // 分析运动数据,并生成反馈
-  analyzeExerciseData() {
-    // 假设我们有某些标准目标,比如10000步,消耗500卡路里等
-    const targetSteps = 10000;
-    const targetCalories = 500;
-    const targetDistance = 5;  // 5公里
+  // 处理用户输入并生成运动计划
+  generateWorkoutPlan() {
+    // 清空之前的错误消息和运动计划
+    this.workoutPlan = '';
+    this.errorMessage = '';
 
-    // 进行简单的训练效果分析
-    if (this.exerciseData.steps < targetSteps) {
-      this.exerciseFeedback = `你的步数还差${targetSteps - this.exerciseData.steps}步,继续加油!`;
-    } else {
-      this.exerciseFeedback = `步数目标已完成!保持良好的状态!`;
-    }
+    // 检查用户输入是否完整
+   
 
-    if (this.exerciseData.caloriesBurned < targetCalories) {
-      this.exerciseFeedback += ` 你还差${targetCalories - this.exerciseData.caloriesBurned}卡路里,加油燃烧!`;
-    } else {
-      this.exerciseFeedback += ` 卡路里目标已达成,做得很好!`;
-    }
+    // 生成模拟运动计划
+    this.workoutPlan = this.generateMockWorkoutPlan(this.userGoal);
 
-    if (this.exerciseData.distance < targetDistance) {
-      this.exerciseFeedback += ` 距离目标还差${(targetDistance - this.exerciseData.distance).toFixed(2)}公里。`;
-    } else {
-      this.exerciseFeedback += ` 距离目标已达成,继续保持!`;
+    if (!this.workoutPlan) {
+      this.errorMessage = '无法生成运动计划,请稍后再试。';
     }
-
-    console.log("Exercise Feedback:", this.exerciseFeedback);
   }
 
-  // 模拟更新运动数据
-  updateExerciseData() {
-    // 这个方法可以用来模拟运动数据的更新
-    // 你可以通过外部设备集成来更新这些数据,或者使用硬编码的测试数据
-    this.exerciseData = {
-      steps: Math.floor(Math.random() * 15000),  // 随机步数
-      caloriesBurned: Math.floor(Math.random() * 700),  // 随机卡路里消耗
-      distance: Math.random() * 10  // 直接使用数字类型的距离
-    };
-    console.log("Updated Exercise Data:", this.exerciseData);
+  // 模拟根据健身目标生成运动计划
+  generateMockWorkoutPlan(goal: string): string {
+    switch (goal) {
+      case '增肌':
+        return '增肌计划:每周进行3次重量训练,结合有氧运动。包括卧推、深蹲、硬拉等基础动作。';
+      case '减脂':
+        return '减脂计划:每周进行4次高强度间歇训练(HIIT),结合适量的有氧运动,如跑步、游泳等。';
+      case '保持体形':
+        return '保持体形计划:每周进行3次中等强度的力量训练和2次有氧运动,保持体型的同时增强肌肉耐力。';
+      default:
+        return '';
+    }
   }
 }