Browse Source

add come pages

xukang 4 months ago
parent
commit
1dfc65cc50

+ 1 - 1
TFPower-app/src/app/tab2/agent/tasks/poem/inquiry/3.inquiry-user-answer.ts

@@ -35,7 +35,7 @@ export function TaskInqueryUserAnswer(options: {
 
             // 文本生成
             let qaContent = options.shareData.userStory.questionList.map((item: any) => `医生问:${item.title},${item.desc}\n患者答:${item.answer || "没回答"}`).join("\n")
-            let PromptTemplate = `您是一名专业的健身医疗主任医生,根据具体的询问,给出初步诊断。
+            let PromptTemplate = `您是一名专业的健身领域的医疗主治医生,根据具体的询问,给出初步诊断。
                 症状口述:${options.shareData.userStory['症状口述']}
                 具体询问:${qaContent}
                 结果以JSON格式表示:

+ 2 - 2
TFPower-app/src/app/tab2/agent/tasks/poem/poem-desc.ts

@@ -25,7 +25,7 @@ export function TaskPoemPictureDesc(options: {
             }
 
             // 文本生成
-            let PromptTemplate = `您是一名专业的健身教练,请根据以下需求生成一个详细的健身动作画面,包括用箭头标记动作细节并描述(用中文描述)等。
+            let PromptTemplate = `您是一名专业的健身教练,请根据以下描述生成一个简单易懂的健身动作教学画面,包括用箭头语言标记动作细节等。
                 描述如下:
                 ${userInput['目标部位']}${userInput['设备限制']},请确保动作正确。
                 `
@@ -35,7 +35,7 @@ export function TaskPoemPictureDesc(options: {
             ])
             completion.sendCompletion().subscribe((message: any) => {
                 if (task1.progress < 0.5) {
-                    task1.progress = Math.min(task1.progress + 0.02, 1); // 保证不超过1
+                    task1.progress = Math.min(task1.progress + 0.004, 1); // 保证不超过1
                 } else if (task1.progress < 1) {
                     task1.progress = Math.min(task1.progress + 0.004, 1); // 保证不超过1
                 }

+ 4 - 3
TFPower-app/src/app/tab2/tab2.page.html

@@ -173,11 +173,11 @@
         <!-- 图片展示 -->
         <ion-card *ngIf="shareData.images">
           <ion-card-header>
-            <ion-card-title>相关图片</ion-card-title>
+            <ion-card-title>动作展示</ion-card-title>
           </ion-card-header>
           <ion-card-content>
             <div *ngFor="let imageUrl of shareData.images">
-              <img [src]="imageUrl" alt="诊断图片" style="width: 100%; height: 200px; object-fit: cover;" />
+              <img [src]="imageUrl" alt="诊断图片" style="width: 100%; height: 400px; object-fit: cover;" />
             </div>
           </ion-card-content>
         </ion-card>
@@ -189,7 +189,8 @@
           </ion-card-header>
           <ion-card-content>
             <h2>{{ shareData.diagResult.desc }}</h2>
-            <p>{{ shareData.diagResult.content }}</p>
+            <fm-markdown-preview class="content-style" [content]=shareData.diagResult.content>
+            </fm-markdown-preview>
           </ion-card-content>
         </ion-card>
 

+ 16 - 7
TFPower-app/src/app/tab2/tab2.page.ts

@@ -5,7 +5,7 @@ import { checkmarkCircle, trash, calendar, helpCircle, create } from 'ionicons/i
 import { CommonModule } from '@angular/common';
 import { FormsModule } from '@angular/forms';
 import { IonSelect, IonThumbnail, IonCardSubtitle, IonImg, IonCard, IonButtons, IonItem, IonList, IonHeader, IonIcon, IonToolbar, IonContent, IonSegment, IonSegmentButton, IonGrid, IonRow, IonCol, IonButton, IonLabel, IonBadge, IonInput, ModalController, IonCardTitle, IonCardContent, IonCardHeader, IonSelectOption } from '@ionic/angular/standalone';
-import { FmodeChatCompletion, ImagineWork, DalleOptions, ChatPanelOptions, FmodeChat, FmodeChatMessage, openChatPanelModal } from "fmode-ng";
+import { FmodeChatCompletion, ImagineWork, DalleOptions, ChatPanelOptions, FmodeChat, FmodeChatMessage, MarkdownPreviewModule, openChatPanelModal } from "fmode-ng";
 import { AgentTaskStep } from './agent/agent.task';
 import { TaskPoemPictureDesc } from './agent/tasks/poem/poem-desc';
 import { TaskPoemPictureCreate } from './agent/tasks/poem/poem-picture';
@@ -24,6 +24,7 @@ import { openUserLoginModal } from 'src/lib/user/modal-user-login/modal-user-log
   styleUrls: ['tab2.page.scss'],
   standalone: true,
   imports: [
+    MarkdownPreviewModule,
     IonSelectOption,
     IonSelect,
     IonThumbnail,
@@ -65,22 +66,30 @@ export class Tab2Page implements OnInit {
     this.currentUser = new CloudUser();
   }
   async loadPlanList() {
-    let query = new CloudQuery("fitPlan");
-    this.planList = await query.find();
+    let currentUser = new CloudUser();
+    const cloudQuery = new CloudQuery("fitPlan");
+    cloudQuery.equalTo("user", currentUser.toPointer());
+    this.planList = await cloudQuery.find();
+    this.cdr.detectChanges();
   }
   async loadCoachList() {
     let query = new CloudQuery("Coach");
     this.coachList = await query.find();
-
+    this.cdr.detectChanges();
   }
   ngOnInit() {
-    // 初始时不需要强制触发视图更新
     this.loadPlanList()
     this.loadCoachList()
   }
-  //打卡页面
+  ngOnChanges() {
+    this.loadPlanList();
+    this.loadCoachList()
+  }
+  ngAfterViewChecked() {
+    this.loadPlanList();
+    this.loadCoachList()
+  }
   async login() {
-    // 弹出登录窗口
     let user = await openUserLoginModal(this.modalCtrl);
     if (user?.id) {
       this.currentUser = user

+ 3 - 1
TFPower-app/src/app/tab2/test-page/test-page.component.html

@@ -2,15 +2,17 @@
 
   <ion-toolbar>
     <ion-title>制定个人健身计划</ion-title>
+    <ion-back-button></ion-back-button>
   </ion-toolbar>
 </ion-header>
 
 <ion-content [fullscreen]="true">
   <div class="content">
+
     <ion-button (click)="goBack()">
       <ion-icon slot="icon-only" name="arrow-back"></ion-icon>
     </ion-button>
-    <!-- 健身目标选择 -->
+    健身目标选择
     <div class="module">
       <h2>请输入您的健身目标</h2>
       <app-tag-input (tagsChanged)="onTagsChanged($event)"></app-tag-input>

+ 54 - 13
TFPower-app/src/app/tab2/test-page/test-page.component.ts

@@ -7,18 +7,52 @@ import { addIcons } from 'ionicons';
 import { barbellOutline, personOutline, square, alarmOutline, arrowBack } from 'ionicons/icons';
 import { DalleOptions, FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng';
 import { LoadingController } from '@ionic/angular';
-import { AlertController } from '@ionic/angular/standalone';
+import { AlertController, IonThumbnail, IonBadge, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonImg, IonInput, IonItem, IonLabel, IonList, IonRow, IonSegment, IonSegmentButton, IonSelect, IonSelectOption, IonToolbar, IonTitle, IonSpinner, IonTextarea } from '@ionic/angular/standalone';
 import { NavController } from '@ionic/angular';
+import { Router } from '@angular/router';
 import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
 import { extractAllJsonFromString } from '../agent/agent.json';
+import { IonBackButton } from '@ionic/angular/standalone';
 @Component({
   selector: 'app-test-page',
   templateUrl: './test-page.component.html',
   styleUrls: ['./test-page.component.scss'],
   standalone: true,
-  imports: [IonicModule, FormsModule, CommonModule, TagInputComponent,
-    // 引入fm-markdown-preview组件模块
-    MarkdownPreviewModule]  // 添加 CommonModule
+  imports: [
+    IonTextarea,
+    IonSpinner,
+    IonTitle,
+    IonBackButton,
+    MarkdownPreviewModule,
+    IonSelectOption,
+    IonSelect,
+    IonThumbnail,
+    IonCardSubtitle,
+    IonImg,
+    IonCard,
+    IonCardTitle,
+    IonCardHeader,
+    IonCardContent,
+    IonButtons,
+    IonItem,
+    IonList,
+    IonIcon,
+    FormsModule,
+    CommonModule,
+    IonHeader,
+    IonToolbar,
+    IonContent,
+    IonSegment,
+    IonSegmentButton,
+    IonGrid,
+    IonRow,
+    IonCol,
+    IonButton,
+    IonLabel,
+    IonBadge,
+    IonInput,
+    TagInputComponent
+  ]  // 添加 CommonModule
 })
 export class TestPageComponent implements OnInit {
   selectedTags: string[] = [];
@@ -34,7 +68,10 @@ export class TestPageComponent implements OnInit {
   constructor(private toastController: ToastController,
     private loadingController: LoadingController,
     private alertController: AlertController,
-    private navController: NavController) {
+    private navController: NavController,
+    private router: Router,
+    private navCtrl: NavController
+  ) {
     addIcons({ personOutline, barbellOutline, alarmOutline, square, arrowBack });
   }
   ngOnInit() { }
@@ -234,14 +271,15 @@ export class TestPageComponent implements OnInit {
     await alert.present();
   }
   async savePlanToDatabase(plan: string) {
-    console.log('计划保存到数据库', plan);
 
-    let currentUser = new CloudUser();  // 获取当前用户实例
+    let currentUser = new CloudUser().toPointer();  // 获取当前用户实例
+    console.log(currentUser)
+    console.log('计划保存到数据库', plan);
 
     // 查询当前用户的所有计划
     const cloudQuery = new CloudQuery("fitPlan");
-    cloudQuery.equalTo("user", currentUser.toPointer());  // 过滤出与当前用户关联的所有计划
-
+    // 过滤出与当前用户关联的所有计划
+    cloudQuery.equalTo("user", currentUser)
     try {
       const userPlans = await cloudQuery.find();  // 获取当前用户的所有计划
       console.log("找到的计划数量:", userPlans.length);
@@ -251,8 +289,6 @@ export class TestPageComponent implements OnInit {
         await planObj.destroy();  // 删除每个计划
         console.log("已删除计划:", planObj);
       }
-
-      // 保存新的计划
       this.planArray.forEach((plan: any) => {
         plan.detail = this.generatedPlan; // 添加额外的计划内容
         console.log(plan);
@@ -263,7 +299,7 @@ export class TestPageComponent implements OnInit {
           "srcId": plan['srcId'],
           "trainingPart": plan['trainingPart'],
           "trainingItems": plan['trainingItems'],
-          "user": currentUser.toPointer(),  // 将当前用户指针关联到计划
+          "user": currentUser,  // 将当前用户指针关联到计划
         };
         // 创建新的 CloudObject 实例
         let newObject = new CloudObject("fitPlan");
@@ -280,9 +316,14 @@ export class TestPageComponent implements OnInit {
     } catch (error) {
       console.error("查询或删除计划时发生错误", error);
     }
+    this.goToPage("tab2")
   }
 
   goBack() {
-    this.navController.back();
+    this.navCtrl.back();
+  }
+  goToPage(page: string) {
+    // 更新选中的tab
+    this.router.navigate([`/tabs/${page}`]);  // 然后再进行路由跳转
   }
 }

+ 4 - 0
TFPower-app/src/lib/ncloud.ts

@@ -112,6 +112,10 @@ export class CloudQuery {
     }
 
     equalTo(key: string, value: any) {
+        // 确保 this.queryParams["where"] 已经初始化为对象
+        if (!this.queryParams["where"]) {
+            this.queryParams["where"] = {};  // 防止未初始化的情况
+        }
         this.queryParams["where"][key] = value;
     }