tab2.page.ts 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { Component } from '@angular/core';
  2. import { IonButton, IonContent, IonHeader, IonicModule, IonInput, IonTextarea } from '@ionic/angular'; // 引入 IonicModule
  3. import { ExploreContainerComponent } from '../explore-container/explore-container.component';
  4. import { FmodeChatCompletion } from 'fmode-ng'; // 用来生成AI消息
  5. import { IonCardHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';
  6. @Component({
  7. selector: 'app-tab2',
  8. templateUrl: 'tab2.page.html',
  9. styleUrls: ['tab2.page.scss'],
  10. standalone: true, // 保留 standalone 属性
  11. imports: [
  12. IonicModule, // 引入 IonicModule 来使用 Ionic 组件
  13. ExploreContainerComponent // 如果有其他自定义组件需要引入,也可以在这里加入
  14. ]
  15. })
  16. export class Tab2Page {
  17. promptInput(event: any): void {
  18. this.userPrompt = event.detail.value; // 获取输入框的值并更新 userPrompt
  19. console.log('Updated Prompt:', this.userPrompt);
  20. }
  21. constructor() {}
  22. // 用户输入提示词
  23. userPrompt: string = "为运动爱好者、健身教练、运动员提供AI助手,帮助他们制定个性化的运动计划、实时监测运动数据、分析训练效果,从而提升运动表现和健康水平。";
  24. // 模拟的运动数据
  25. exerciseData = {
  26. steps: 0, // 步数
  27. caloriesBurned: 0, // 消耗的卡路里
  28. distance: 0 // 运动距离
  29. };
  30. // 属性:组件内用于展示消息内容的变量
  31. responseMsg: any = "";
  32. exerciseFeedback: string = ""; // 用于存储AI反馈的训练效果分析
  33. // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
  34. sendMessage() {
  35. console.log("Creating personalized exercise plan...");
  36. let completion = new FmodeChatCompletion([
  37. { role: "system", content: "你是一个运动和健康专家,帮助用户制定个性化的运动计划,监控运动数据并提供反馈。" },
  38. { role: "user", content: this.userPrompt }
  39. ]);
  40. completion.sendCompletion().subscribe((message: any) => {
  41. // 打印消息体
  42. console.log("AI Response:", message.content);
  43. // 赋值消息内容给组件内属性
  44. this.responseMsg = message.content;
  45. // 在此,我们可以通过AI返回的数据或分析来生成反馈
  46. this.analyzeExerciseData();
  47. });
  48. }
  49. // 分析运动数据,并生成反馈
  50. analyzeExerciseData() {
  51. // 假设我们有某些标准目标,比如10000步,消耗500卡路里等
  52. const targetSteps = 10000;
  53. const targetCalories = 500;
  54. const targetDistance = 5; // 5公里
  55. // 进行简单的训练效果分析
  56. if (this.exerciseData.steps < targetSteps) {
  57. this.exerciseFeedback = `你的步数还差${targetSteps - this.exerciseData.steps}步,继续加油!`;
  58. } else {
  59. this.exerciseFeedback = `步数目标已完成!保持良好的状态!`;
  60. }
  61. if (this.exerciseData.caloriesBurned < targetCalories) {
  62. this.exerciseFeedback += ` 你还差${targetCalories - this.exerciseData.caloriesBurned}卡路里,加油燃烧!`;
  63. } else {
  64. this.exerciseFeedback += ` 卡路里目标已达成,做得很好!`;
  65. }
  66. if (this.exerciseData.distance < targetDistance) {
  67. this.exerciseFeedback += ` 距离目标还差${(targetDistance - this.exerciseData.distance).toFixed(2)}公里。`;
  68. } else {
  69. this.exerciseFeedback += ` 距离目标已达成,继续保持!`;
  70. }
  71. console.log("Exercise Feedback:", this.exerciseFeedback);
  72. }
  73. // 模拟更新运动数据
  74. updateExerciseData() {
  75. // 这个方法可以用来模拟运动数据的更新
  76. // 你可以通过外部设备集成来更新这些数据,或者使用硬编码的测试数据
  77. this.exerciseData = {
  78. steps: Math.floor(Math.random() * 15000), // 随机步数
  79. caloriesBurned: Math.floor(Math.random() * 700), // 随机卡路里消耗
  80. distance: Math.random() * 10 // 直接使用数字类型的距离
  81. };
  82. console.log("Updated Exercise Data:", this.exerciseData);
  83. }
  84. }