|
@@ -1,49 +1,8 @@
|
|
|
-// import { Component } from '@angular/core';
|
|
|
-// import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
|
|
|
-// import { ExploreContainerComponent } from '../explore-container/explore-container.component';
|
|
|
-// import { FmodeChatCompletion } from 'fmode-ng';
|
|
|
-// import { IonButton, IonInput, IonTextarea } from '@ionic/angular';
|
|
|
-
|
|
|
-// @Component({
|
|
|
-// selector: 'app-tab2',
|
|
|
-// templateUrl: 'tab2.page.html',
|
|
|
-// styleUrls: ['tab2.page.scss'],
|
|
|
-// standalone: true,
|
|
|
-// imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent, IonButton,
|
|
|
-// IonTextarea,IonInput]
|
|
|
-// })
|
|
|
-// export class Tab2Page {
|
|
|
-
|
|
|
-// constructor() {}
|
|
|
-// // 用户输入提示词
|
|
|
-// userPrompt:string = "飞码产品LOGO,独角兽头部形象,极简风格,棱角分明,线条勾勒,蓝色紫色搭配。"
|
|
|
-// promptInput(ev:any){
|
|
|
-// this.userPrompt = ev.detail.value;
|
|
|
-// }
|
|
|
-// // 属性:组件内用于展示消息内容的变量
|
|
|
-// responseMsg:any = ""
|
|
|
-// // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
|
|
|
-// sendMessage(){
|
|
|
-// console.log("create")
|
|
|
-// let completion = new FmodeChatCompletion([
|
|
|
-// {role:"system",content:""},
|
|
|
-// {role:"user",content:this.userPrompt}
|
|
|
-// ])
|
|
|
-// completion.sendCompletion().subscribe((message:any)=>{
|
|
|
-// // 打印消息体
|
|
|
-// console.log(message.content)
|
|
|
-// // 赋值消息内容给组件内属性
|
|
|
-// this.responseMsg = message.content
|
|
|
-// })
|
|
|
-// }
|
|
|
-
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
import { Component } from '@angular/core';
|
|
|
-import { IonicModule } from '@ionic/angular'; // 导入 IonicModule
|
|
|
+import { IonButton, IonContent, IonHeader, IonicModule, IonInput, IonTextarea } from '@ionic/angular'; // 引入 IonicModule
|
|
|
import { ExploreContainerComponent } from '../explore-container/explore-container.component';
|
|
|
-import { FmodeChatCompletion } from 'fmode-ng';
|
|
|
+import { FmodeChatCompletion } from 'fmode-ng'; // 用来生成AI消息
|
|
|
+import { IonCardHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';
|
|
|
|
|
|
@Component({
|
|
|
selector: 'app-tab2',
|
|
@@ -56,31 +15,84 @@ import { FmodeChatCompletion } from 'fmode-ng';
|
|
|
]
|
|
|
})
|
|
|
export class Tab2Page {
|
|
|
-
|
|
|
+ promptInput(event: any): void {
|
|
|
+ this.userPrompt = event.detail.value; // 获取输入框的值并更新 userPrompt
|
|
|
+ console.log('Updated Prompt:', this.userPrompt);
|
|
|
+ }
|
|
|
constructor() {}
|
|
|
-
|
|
|
+
|
|
|
// 用户输入提示词
|
|
|
- userPrompt: string = "为运动爱好者、健身教练、运动员提供AI助手,帮助他们制定个性化的运动计划、实时监测运动数据、分析训练效果,从而提升运动表现和健康水平。"
|
|
|
+ userPrompt: string = "为运动爱好者、健身教练、运动员提供AI助手,帮助他们制定个性化的运动计划、实时监测运动数据、分析训练效果,从而提升运动表现和健康水平。";
|
|
|
|
|
|
- promptInput(ev: any) {
|
|
|
- this.userPrompt = ev.detail.value;
|
|
|
- }
|
|
|
+ // 模拟的运动数据
|
|
|
+ exerciseData = {
|
|
|
+ steps: 0, // 步数
|
|
|
+ caloriesBurned: 0, // 消耗的卡路里
|
|
|
+ distance: 0 // 运动距离
|
|
|
+ };
|
|
|
|
|
|
// 属性:组件内用于展示消息内容的变量
|
|
|
- responseMsg: any = ""
|
|
|
+ responseMsg: any = "";
|
|
|
+ exerciseFeedback: string = ""; // 用于存储AI反馈的训练效果分析
|
|
|
|
|
|
// 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
|
|
|
sendMessage() {
|
|
|
- console.log("create")
|
|
|
+ console.log("Creating personalized exercise plan...");
|
|
|
+
|
|
|
let completion = new FmodeChatCompletion([
|
|
|
- { role: "system", content: "" },
|
|
|
+ { role: "system", content: "你是一个运动和健康专家,帮助用户制定个性化的运动计划,监控运动数据并提供反馈。" },
|
|
|
{ role: "user", content: this.userPrompt }
|
|
|
- ])
|
|
|
+ ]);
|
|
|
+
|
|
|
completion.sendCompletion().subscribe((message: any) => {
|
|
|
// 打印消息体
|
|
|
- console.log(message.content)
|
|
|
+ console.log("AI Response:", message.content);
|
|
|
// 赋值消息内容给组件内属性
|
|
|
- this.responseMsg = message.content
|
|
|
- })
|
|
|
+ this.responseMsg = message.content;
|
|
|
+
|
|
|
+ // 在此,我们可以通过AI返回的数据或分析来生成反馈
|
|
|
+ this.analyzeExerciseData();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分析运动数据,并生成反馈
|
|
|
+ analyzeExerciseData() {
|
|
|
+ // 假设我们有某些标准目标,比如10000步,消耗500卡路里等
|
|
|
+ const targetSteps = 10000;
|
|
|
+ const targetCalories = 500;
|
|
|
+ const targetDistance = 5; // 5公里
|
|
|
+
|
|
|
+ // 进行简单的训练效果分析
|
|
|
+ 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 += ` 卡路里目标已达成,做得很好!`;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.exerciseData.distance < targetDistance) {
|
|
|
+ this.exerciseFeedback += ` 距离目标还差${(targetDistance - this.exerciseData.distance).toFixed(2)}公里。`;
|
|
|
+ } else {
|
|
|
+ this.exerciseFeedback += ` 距离目标已达成,继续保持!`;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|