yuebuzu-creater 4 mesiacov pred
rodič
commit
dddf0f60b1
38 zmenil súbory, kde vykonal 450 pridanie a 703 odobranie
  1. 0 38
      wisdom-app/src/app/component/navigation-lan/navigation-lan.component.html
  2. 0 37
      wisdom-app/src/app/component/navigation-lan/navigation-lan.component.scss
  3. 0 22
      wisdom-app/src/app/component/navigation-lan/navigation-lan.component.spec.ts
  4. 0 27
      wisdom-app/src/app/component/navigation-lan/navigation-lan.component.ts
  5. 0 12
      wisdom-app/src/app/explore-container/explore-container.component.html
  6. 0 27
      wisdom-app/src/app/explore-container/explore-container.component.scss
  7. 0 18
      wisdom-app/src/app/explore-container/explore-container.component.spec.ts
  8. 0 11
      wisdom-app/src/app/explore-container/explore-container.component.ts
  9. 37 36
      wisdom-app/src/app/page/inquiry-human/inquiry-human.component.html
  10. 10 0
      wisdom-app/src/app/page/inquiry-human/inquiry-human.component.scss
  11. 83 64
      wisdom-app/src/app/page/inquiry-human/inquiry-human.component.ts
  12. 0 45
      wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.html
  13. 0 0
      wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.scss
  14. 0 22
      wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.spec.ts
  15. 0 111
      wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.ts
  16. 16 14
      wisdom-app/src/app/page/page-create-agent/page-create-agent.component.html
  17. 10 0
      wisdom-app/src/app/page/page-create-agent/page-create-agent.component.scss
  18. 47 47
      wisdom-app/src/app/page/page-create-agent/page-create-agent.component.ts
  19. 10 19
      wisdom-app/src/app/page/page-inquiry/page-inquiry.component.html
  20. 11 0
      wisdom-app/src/app/page/page-inquiry/page-inquiry.component.scss
  21. 5 1
      wisdom-app/src/app/page/page-inquiry/page-inquiry.component.ts
  22. 11 10
      wisdom-app/src/app/page/page-my-health/page-my-health.component.html
  23. 9 0
      wisdom-app/src/app/page/page-my-health/page-my-health.component.scss
  24. 3 2
      wisdom-app/src/app/page/page-my-health/page-my-health.component.ts
  25. 33 3
      wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.html
  26. 10 0
      wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.scss
  27. 30 2
      wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.ts
  28. 9 9
      wisdom-app/src/app/tab1/tab1.page.html
  29. 6 0
      wisdom-app/src/app/tab1/tab1.page.scss
  30. 26 77
      wisdom-app/src/app/tab1/tab1.page.ts
  31. 2 6
      wisdom-app/src/app/tab2/tab2.page.ts
  32. 2 4
      wisdom-app/src/app/tab3/tab3.page.ts
  33. 0 11
      wisdom-app/src/app/tab4/tab4.page.html
  34. 1 2
      wisdom-app/src/app/tab4/tab4.page.ts
  35. 7 7
      wisdom-app/src/app/tabs/tabs.page.ts
  36. 2 9
      wisdom-app/src/app/tabs/tabs.routes.ts
  37. 4 1
      wisdom-app/src/lib/user/modal-user-edit/modal-user-edit.component.html
  38. 66 9
      wisdom-app/src/lib/user/modal-user-edit/modal-user-edit.component.ts

+ 0 - 38
wisdom-app/src/app/component/navigation-lan/navigation-lan.component.html

@@ -1,38 +0,0 @@
-<ion-card>
-  <ion-card-header>
-    <ion-card-title>
-      <ion-segment [scrollable]="true" value="hotdot" [value]="type" (ionChange)="typeChange($event)">
-        <ion-segment-button value="hotdot" content-id="hotdot">
-          <ion-label>热点</ion-label>
-        </ion-segment-button>
-        <ion-segment-button value="export" content-id="export">
-          <ion-label>专家科普</ion-label>
-        </ion-segment-button>
-        <ion-segment-button value="sleep" content-id="sleep">
-          <ion-label>睡眠</ion-label>
-        </ion-segment-button>
-        <ion-segment-button value="life" content-id="life">
-          <ion-label>生活</ion-label>
-        </ion-segment-button>
-        <ion-segment-button value="male" content-id="male">
-          <ion-label>男性</ion-label>
-        </ion-segment-button>
-        <ion-segment-button value="female" content-id="female">
-          <ion-label>女性</ion-label>
-        </ion-segment-button>
-      </ion-segment>
-    </ion-card-title>
-    <!-- <ion-card-subtitle>请输入账号密码</ion-card-subtitle> -->
-  </ion-card-header>
-
-  <ion-card-content>
-    <ion-segment-view>
-      <ion-segment-content id="hotdot">First</ion-segment-content>
-      <ion-segment-content id="export">Second</ion-segment-content>
-      <ion-segment-content id="sleep">Third</ion-segment-content>
-      <ion-segment-content id="sleep">life</ion-segment-content>
-      <ion-segment-content id="sleep">male</ion-segment-content>
-      <ion-segment-content id="sleep">female</ion-segment-content>
-    </ion-segment-view>
-  </ion-card-content>
-</ion-card>

+ 0 - 37
wisdom-app/src/app/component/navigation-lan/navigation-lan.component.scss

@@ -1,37 +0,0 @@
-    ion-card {
-        width: 100%;
-        height: 100%;
-        margin: 0;
-        padding: 0;
-        border-radius: 0;
-        box-shadow: none;
-    }
-    ion-card-header {
-        font-size: 1.5em;
-        height: 200px;
-    }
-
-    ion-card-content {
-        font-size: 1.2em;
-        height: 100px;
-        width: 100%;
-    }
-    
-    ion-segment-view {
-        // height: 150px;
-        height: 100%;
-    }
-    ion-segment-content {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-    }
-    ion-segment-content:nth-of-type(1) {
-        background: lightpink;
-    }
-    ion-segment-content:nth-of-type(2) {
-        background: lightblue;
-    }
-    ion-segment-content:nth-of-type(3) {
-        background: lightgreen;
-    }

+ 0 - 22
wisdom-app/src/app/component/navigation-lan/navigation-lan.component.spec.ts

@@ -1,22 +0,0 @@
-import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
-
-import { NavigationLanComponent } from './navigation-lan.component';
-
-describe('NavigationLanComponent', () => {
-  let component: NavigationLanComponent;
-  let fixture: ComponentFixture<NavigationLanComponent>;
-
-  beforeEach(waitForAsync(() => {
-    TestBed.configureTestingModule({
-      imports: [NavigationLanComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(NavigationLanComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  }));
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});

+ 0 - 27
wisdom-app/src/app/component/navigation-lan/navigation-lan.component.ts

@@ -1,27 +0,0 @@
-import { Input, OnInit } from '@angular/core';
-import { Component } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent, IonCard, IonCardContent, IonButton, IonCardHeader, IonCardTitle, IonCardSubtitle, ModalController, IonInput, IonItem, IonSegment, IonSegmentButton, IonLabel, IonSegmentContent, IonSegmentView } from '@ionic/angular/standalone';
-import { CloudUser } from 'src/lib/ncloud';
-import { ArticleCardComponent } from '../article-card/article-card.component';
-
-@Component({
-  selector: 'app-navigation-lan',
-  templateUrl: './navigation-lan.component.html',
-  styleUrls: ['./navigation-lan.component.scss'],
-  standalone: true,
-    imports: [IonHeader, IonToolbar, IonTitle, IonContent, 
-      IonCard,IonCardContent,IonButton,IonCardHeader,IonCardTitle,IonCardSubtitle,
-      IonInput,IonItem,
-      IonSegment,IonSegmentButton,IonLabel,
-      ArticleCardComponent,IonSegmentContent,IonSegmentView
-    ],
-})
-export class NavigationLanComponent  implements OnInit {
-
-  type:"hotdot"|"export"|"sleep"|"lift"|"male"|"female" = "hotdot"
-  typeChange(ev:any){
-    this.type = ev?.detail?.value || ev?.value || 'hotdot'
-  }
-  constructor() { }
-  ngOnInit() {}
-}

+ 0 - 12
wisdom-app/src/app/explore-container/explore-container.component.html

@@ -1,12 +0,0 @@
-<div id="container">
-  <strong>{{ name }}</strong>
-  <p>
-    Explore
-    <a
-      target="_blank"
-      rel="noopener noreferrer"
-      href="https://ionicframework.com/docs/components"
-      >UI Components</a
-    >
-  </p>
-</div>

+ 0 - 27
wisdom-app/src/app/explore-container/explore-container.component.scss

@@ -1,27 +0,0 @@
-#container {
-  text-align: center;
-
-  position: absolute;
-  left: 0;
-  right: 0;
-  top: 50%;
-  transform: translateY(-50%);
-}
-
-#container strong {
-  font-size: 20px;
-  line-height: 26px;
-}
-
-#container p {
-  font-size: 16px;
-  line-height: 22px;
-
-  color: #8c8c8c;
-
-  margin: 0;
-}
-
-#container a {
-  text-decoration: none;
-}

+ 0 - 18
wisdom-app/src/app/explore-container/explore-container.component.spec.ts

@@ -1,18 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { ExploreContainerComponent } from './explore-container.component';
-
-describe('ExploreContainerComponent', () => {
-  let component: ExploreContainerComponent;
-  let fixture: ComponentFixture<ExploreContainerComponent>;
-
-  beforeEach(async () => {
-    fixture = TestBed.createComponent(ExploreContainerComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});

+ 0 - 11
wisdom-app/src/app/explore-container/explore-container.component.ts

@@ -1,11 +0,0 @@
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'app-explore-container',
-  templateUrl: './explore-container.component.html',
-  styleUrls: ['./explore-container.component.scss'],
-  standalone: true,
-})
-export class ExploreContainerComponent {
-  @Input() name?: string;
-}

+ 37 - 36
wisdom-app/src/app/page/inquiry-human/inquiry-human.component.html

@@ -1,62 +1,63 @@
 <ion-header [translucent]="true">
   <ion-toolbar class="searchbar">
-    <div>
-      <ion-button (click)="backhome()" color="primary" slot="start">{{back}}</ion-button>
-    </div>
-    <ion-segment [(ngModel)]="selectedSegment" (ionChange)="segmentChanged($event)">
-      <ion-segment-button *ngFor="let segment of segments" [value]="segment">
-        {{segment}}
-      </ion-segment-button>
-    </ion-segment>
+    <ion-button color="light" slot="start">
+      <ion-back-button  defaultHref="/" ></ion-back-button>
+    </ion-button>
+    <ion-title>找医生</ion-title>
   </ion-toolbar>
 </ion-header>
 
 <ion-content>
-  <div>
+  <ion-segment [(ngModel)]="selectedSegment" (ionChange)="segmentChanged($event)">
+    <ion-segment-button *ngFor="let segment of segments" [value]="segment">
+      {{segment}}
+    </ion-segment-button>
+  </ion-segment>
+  <div >
     <ion-card class="ioncard" *ngFor="let doctor of doctors" (click)="openDetailModal(doctor)">
       <ion-item lines="none">
         <ion-avatar slot="start">
-          <img [src]="doctor.avatar" alt="医生头像">
+          <img [src]="doctor.get('avatar')" alt="医生头像">
         </ion-avatar>
         
         <ion-label>
           <div class="doctor-header">
-            <h2>{{doctor.name}}</h2>
-            <span>{{doctor.title}}</span>
-            <span>{{doctor.department}}</span>
+            <h2>{{doctor.get('name')}}</h2>
+            <span>{{doctor.get('title')}}</span>
+            <span>{{doctor.data["specialty"]}}</span>
             <ion-badge color="primary">可开处方</ion-badge>
           </div>
           
           <div class="hospital-info">
-            <span>{{doctor.hospital}}</span>
-            <ion-badge color="success">{{doctor.hospitalLevel}}</ion-badge>
-            <ion-badge color="warning">{{doctor.hospitalType}}</ion-badge>
+            <span>{{doctor.get('hospital')}}</span>
+            <ion-badge color="success">{{doctor.get('hospitalLevel')}}</ion-badge>
+            <ion-badge color="warning">{{doctor.get('hospitalType')}}</ion-badge>
           </div>
         </ion-label>
       </ion-item>
     
       <ion-item lines="none">
         <ion-text color="medium" class="expertise">
-          {{doctor.expertise}}
+          {{doctor.get('expertise')}}
         </ion-text>
       </ion-item>
     
       <ion-item lines="none">
         <div class="stats">
           <div>
-            <ion-text color="warning">{{doctor.rating}}</ion-text>
+            <ion-text color="warning">{{doctor.get('rating')}}</ion-text>
             <ion-icon name="star" color="warning"></ion-icon>
           </div>
-          <div>接诊量 {{doctor.consultations}}</div>
-          <div>同行认可 {{doctor.recommendations}}</div>
+          <div>接诊量 {{doctor.get('consultations')}}</div>
+          <div>同行认可 {{doctor.get('recommendations')}}</div>
         </div>
       </ion-item>
     
       <ion-item lines="none">
         <div class="consultation-types">
-          <ion-button fill="outline">图文 ¥{{doctor.prices.text}}</ion-button>
-          <ion-button fill="outline">电话 ¥{{doctor.prices.voice}}</ion-button>
-          <ion-button fill="outline">视频 ¥{{doctor.prices.video}}</ion-button>
+          <ion-button fill="outline">图文 ¥{{doctor.data["prices"]?.text}}</ion-button>
+          <ion-button fill="outline">电话 ¥{{doctor.data["prices"]?.voice}}</ion-button>
+          <ion-button fill="outline">视频 ¥{{doctor.data["prices"]?.video}}</ion-button>
           <ion-button color="success">年度好医生</ion-button>
         </div>
       </ion-item>
@@ -81,7 +82,7 @@
         <div>
           <ion-card class="first">
             <div class="doctor-header1" style="display: flex; background-color: rgb(213, 205, 144); border-radius: 5px;">
-              <div class="verification-badge" *ngIf="doctor.isVerified">
+              <div class="verification-badge" *ngIf="doctor1.get('isVerified')">
                 <ion-icon name="checkmark-circle"></ion-icon>
                 已通过实名认证
               </div>
@@ -93,27 +94,27 @@
             <div class="doctor-info1">
               <div class="left-section">
                 <div class="name-title">
-                  <h2>{{doctor.name}}</h2>
-                  <ion-badge *ngIf="doctor.isExpert" color="warning">知名专家</ion-badge>
+                  <h2>{{doctor1.get('name')}}</h2>
+                  <ion-badge *ngIf="doctor1.get('isExpert')" color="warning">知名专家</ion-badge>
                 </div>
                 
                 <div class="position">
-                  <span>{{doctor.department}}</span>
-                  <span>{{doctor.title}}</span>
+                  <span>{{doctor1.data('depart')}}</span>
+                  <span>{{doctor1.get('title')}}</span>
                 </div>
                 
                 <div class="hospital">
-                  <span>{{doctor.hospital}}</span>
-                  <ion-badge color="success">{{doctor.hospitalLevel}}</ion-badge>
+                  <span>{{doctor1.get('hospital')}}</span>
+                  <ion-badge color="success">{{doctor1.get('hospitalLevel')}}</ion-badge>
                 </div>
           
                 <div class="stats">
                   <div class="rating">
-                    <span class="number">{{doctor.rating}}</span>
+                    <span class="number">{{doctor1.get('rating')}}</span>
                     <ion-icon name="star" color="warning"></ion-icon>
                   </div>
                   <div class="consult">
-                    <span>接诊量 {{doctor.consultations}}</span>
+                    <span>接诊量 {{doctor1.get('recommendation')}}</span>
                   </div>
                   <div class="service">
                     <span>服务态度好</span>
@@ -123,7 +124,7 @@
           
               <div class="right-section">
                 <ion-avatar>
-                  <img [src]="doctor.avatar" alt="医生头像">
+                  <img [src]="doctor1.get('avatar')" alt="医生头像">
                 </ion-avatar>
                 <ion-button style="color: rgb(0, 255, 0);" fill="outline" size="small">
                   + 关注
@@ -132,7 +133,7 @@
             </div>
             <div>
               <div class="tags">
-                <ion-chip style="color: blue; border-radius: 10px; background-color: rgba(230, 230, 243, 0.671);" *ngFor="let tag of doctor.tags" outline>
+                <ion-chip style="color: blue; border-radius: 10px; background-color: rgba(230, 230, 243, 0.671);" *ngFor="let tag of doctor1.data['tags']" outline>
                   {{tag}}
                 </ion-chip>
               </div>
@@ -179,12 +180,12 @@
             <h1>擅长与简介</h1>
           </div>
           <div style="margin: 5px 10px;">
-            <p style="color: grey;">{{doctor.expertise}}</p>
+            <p style="color: grey;">{{doctor1?.get('expertise')}}</p>
           </div>
         </div>
         <div>
           <ion-buttons>
-            <ion-button (click)="appoint(doctor.id)">立即预约</ion-button>
+            <ion-button color="primary" expand="block" (click)="appoint()">立即预约</ion-button>
           </ion-buttons>
         </div>
       </ion-content>

+ 10 - 0
wisdom-app/src/app/page/inquiry-human/inquiry-human.component.scss

@@ -1,3 +1,13 @@
+ion-header {
+  background-color: #5c97ff;
+  color: white;
+}
+
+ion-title {
+  font-size: 20px;
+  font-weight: bold;
+  text-align: center;
+}
 .ioncard {
   margin: 16px;
   box-shadow: none;

+ 83 - 64
wisdom-app/src/app/page/inquiry-human/inquiry-human.component.ts

@@ -1,12 +1,11 @@
 import { Component, OnInit } from '@angular/core';
-import { IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonList, IonItem, IonLabel, IonAvatar, IonButton, IonChip, IonIcon, IonBadge, IonText, IonCard, IonSegmentButton, IonSegment, IonCol, IonRow, IonGrid, IonButtons, IonFooter, ToastController } from '@ionic/angular/standalone';
-import { ExploreContainerComponent } from '../../explore-container/explore-container.component';
+import { IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonList, IonItem, IonLabel, IonAvatar, IonButton, IonChip, IonIcon, IonBadge, IonText, IonCard, IonSegmentButton, IonSegment, IonCol, IonRow, IonGrid, IonButtons, IonFooter, ToastController, IonBackButton, AlertController } from '@ionic/angular/standalone';
 import { addIcons } from 'ionicons';
 import { airplane, bluetooth, call, wifi, star, checkmarkCircle } from 'ionicons/icons';
 import { Router } from '@angular/router';
 import { CommonModule } from '@angular/common';
 import { FormsModule } from '@angular/forms';
-import { CloudObject, CloudUser } from 'src/lib/ncloud';
+import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
 
 addIcons({ airplane, bluetooth, call, wifi });
 
@@ -48,10 +47,10 @@ interface ConsultOption {
   styleUrls: ['./inquiry-human.component.scss'],
   standalone: true,
   imports: [
-    IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent, CommonModule,
+    IonHeader, IonToolbar, IonTitle, IonContent, CommonModule,
     IonLabel, IonItem, IonList, IonAvatar, IonButton, IonChip, IonIcon, IonBadge,
     IonText, IonCard, IonSegment, IonSegmentButton, FormsModule, IonCol, IonRow, IonGrid,
-    IonModal, IonButtons, IonFooter
+    IonModal, IonButtons, IonFooter,IonBackButton
   ]
 })
 export class InquiryHumanComponent implements OnInit {
@@ -107,14 +106,16 @@ export class InquiryHumanComponent implements OnInit {
 
   isModalOpen = false;
   isPaymentModalOpen = false; // 新增状态变量
-  doctor: any;
+
   currentUser: CloudUser 
   constructor(
+    private alertController: AlertController,
     private router: Router,
     private toastController: ToastController // 注入 ToastController
   ) {
       addIcons({star,checkmarkCircle});
       this.currentUser = new CloudUser();
+      this.loadDoctors();
      }
 
   ngOnInit() { }
@@ -123,55 +124,43 @@ export class InquiryHumanComponent implements OnInit {
   backhome(){
     this.router.navigate(['/tabs/tab1']);
   }
+  // 顶部导航栏
   selectedSegment = '全部';
-  segments = ['全部', '妇科', '儿科', '皮肤性病科', '内科'];
-
-  doctors: Doctor[] = [
-    {
-      avatar: 'https://app.fmode.cn/dev/jxnu/202226701019/doctor7.png',
-      name: '张伟',
-      title: '主任医师',
-      department: '消化内科',
-      hospital: '首都医科大学附属北京友谊..',
-      hospitalLevel: '三甲',
-      hospitalType: '百强医院',
-      expertise: '擅长:结肠息肉和息肉病、胃息肉、幽门螺杆菌感染、慢性胃炎、胃食管反流、慢性萎缩性胃炎、糜烂性胃炎...',
-      rating: 5.0,
-      consultations: '1.1万',
-      recommendations: 100,
-      prices: {
-        text: 100,
-        voice: 150,
-        video: 300
-      },
-      tags: ['百强医院', '可开处方', '从业24年', '擅长消化系统疾病', '可开处方'],
-      isVerified: true,
-      isExpert: true,
-    },
-    // ... 其他医生数据 ...
-  ];
-
-  openDetailModal(doctor?: any) {
-    this.isModalOpen = true;
-    this.doctor = doctor;
-  }
-  closeDetailModal() {
-    this.isModalOpen = false;
-    this.doctor = null;
+  segments = ['全部', '妇产科', '儿科', '皮肤性病科', '内科'];
+  // 选择科室
+  async segmentChanged(event: any) {
+    this.selectedSegment = event.detail.value;
+    await this.loadDoctors();
+    console.log(this.selectedSegment);
   }
 
-  goToDoctorDetail(doctor: Doctor) {
-    // this.router.navigate(['/doctor-detail'], { state: { doctor: doctor } });
+  // 医生列表
+  doctors: Array<CloudObject> = [];
+  async loadDoctors() {
+    let query = new CloudQuery('Doctor1')
+    // query.include("depart")
+    // query.include("user")
+    if (this.selectedSegment != '全部'){
+      query.equalTo('specialty', this.selectedSegment)
+    }
+    this.doctors = await query.find()
+    console.log(this.doctors)
   }
-
-  segmentChanged(event: any) {
-    this.selectedSegment = event.detail.value;
-    console.log(this.selectedSegment);
+  doctor1: any;
+  // 打开医生详情模态框
+  openDetailModal(doctor: any) {
+    this.isModalOpen = true; // 打开模态框
+    this.doctor1 = doctor; // 传递医生信息
+  }
+  closeDetailModal() {
+    this.isModalOpen = false; // 关闭模态框
+    this.doctor1 = null; // 清空医生信息
   }
 
+  selectedOption: ConsultOption | undefined;
   async openConsult(){
-    const selectedOption = this.options.find(option => option.isSelected);
-    if (!selectedOption) {
+   this.selectedOption = this.options.find(option => option.isSelected);
+    if (!this.selectedOption) {
       // 显示 Toast 提示用户选择咨询方式
       const toast = await this.toastController.create({
         message: '请先选择咨询方式',
@@ -182,7 +171,7 @@ export class InquiryHumanComponent implements OnInit {
       return;
     }
 
-    if (selectedOption.title === '图文咨询' || selectedOption.title === '电话咨询') {
+    if (this.selectedOption.title === '图文咨询' || this.selectedOption.title === '电话咨询') {
       this.isPaymentModalOpen = true;
     } else {
       // 处理其他选项(如需要)
@@ -192,21 +181,51 @@ export class InquiryHumanComponent implements OnInit {
   closePaymentModal() {
     this.isPaymentModalOpen = false;
   }
-  appoint(id:any){
-    let appointment = new CloudObject('appointment')
-    appointment.set({
-      doctor: {
-        __type:"Pointer",
-        className:"doctor",
-        objectId:id
-      },
-      user: {
-        __type:"Pointer",
-        className:"user",
-        objectId:this.currentUser.id
-      },
-      type: '图文咨询'
+  num:number = 1
+  // 立即预约 Appointment Doctor User 
+  async appoint(){
+    console.log("this.doctor1",this.doctor1)
+    let alert = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '预约成功,请等待医生回复',
+      buttons: ['好的'],
+    });
+    let alert1 = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '已预约,不要重复预约',
+      buttons: ['好的'],
+    });
+    if(this.num == 0){
+      await alert1.present()
+      return
+    }
+    if(this.num == 1){
+      console.log("立即预约我的医生")
+      let appointment = new CloudObject('appointment')
+      appointment.set({
+        doctor: {
+          __type:"Pointer",
+          className:"doctor",
+          objectId:this.doctor1?.data["user"]?.objectId
+        },
+        doctorName: this.doctor1.data["name"],
+        user: {
+          __type:"Pointer",
+          className:"user",
+          objectId:this.currentUser.id
+        },
+        type: this.selectedOption?.title, // 咨询类型
+        userPhone: this.currentUser?.data["phone"], // 获取当前用户的手机号
+        username : this.currentUser?.data["realname"], // 获取当前用户的姓名
       }
-    )
+      )
+      appointment.save()
+      this.num = 0
+      console.log(appointment)
+      await alert.present()
+    }
+    
   }
 }

+ 0 - 45
wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.html

@@ -1,45 +0,0 @@
-
-<ion-header [translucent]="true">
-  <ion-toolbar class="toolbar">
-    <div>
-      <ion-button (click)="backHome()" color="primary">{{back}}</ion-button>
-    </div>
-  </ion-toolbar>
-</ion-header>
-
-<ion-content [fullscreen]="true">
-  <div>
-    <ion-list>
-      <ion-item>
-        <!-- <ion-input label="输入你想了解的科普信息" placeholder="Enter text"></ion-input> -->
-        <ion-input  [value]="kepu" placeholder="请输入科普" (ionInput)="kepuInput($event)"></ion-input>
-      </ion-item>
-    </ion-list>
-  </div>
-  <ion-button (click)="doInqueryTask()">执行问诊任务集</ion-button>
-  <!-- 意境画面提示词 -->
-  <div class="desc">
-    {{PictureDescResult}}
-  </div>
-  <!-- 生成结果 -->
-  @if(images.length) {
-    @for(imageUrl of images;track imageUrl){
-      <img [src]="imageUrl" alt="图片" srcset="">
-    }
-
-    <h3>图片地址:
-      <span class="copyable">{{images.join(', ')}}</span>
-    </h3>
-
-  }
-  <!-- 生成状态 -->
-  @if(!images.length){
-    <!-- <h2 style="display: grid; place-items: center;">欢迎使用头像生成器</h2> -->
-    @if(imagineWork.progress!=0){
-      <h1 style="display: grid; place-items: center;">生成中:{{imagineWork.progress}}</h1>
-    }
-    <!-- <div style="display: grid; place-items: center;">
-      <img src="../../assets/image/头像生成器.png">
-    </div> -->
-  }
-</ion-content>

+ 0 - 0
wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.scss


+ 0 - 22
wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.spec.ts

@@ -1,22 +0,0 @@
-import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
-
-import { PageAiKnowledgeComponent } from './page-ai-knowledge.component';
-
-describe('PageAiKnowledgeComponent', () => {
-  let component: PageAiKnowledgeComponent;
-  let fixture: ComponentFixture<PageAiKnowledgeComponent>;
-
-  beforeEach(waitForAsync(() => {
-    TestBed.configureTestingModule({
-      imports: [PageAiKnowledgeComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(PageAiKnowledgeComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  }));
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});

+ 0 - 111
wisdom-app/src/app/page/page-ai-knowledge/page-ai-knowledge.component.ts

@@ -1,111 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { NgModel } from '@angular/forms';
-import { Router } from '@angular/router';
-import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCardTitle, IonContent, IonHeader, IonIcon, IonInput, IonItem, IonLabel, IonList, IonToolbar, ModalController } from '@ionic/angular/standalone';
-import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
-import { CommonModule } from '@angular/common';
-import { TaskInqueryUserStory } from 'src/agent/tasks/inquiry/1.inquiry-user-story';
-import { TaskInqueryDoctorQuestion } from 'src/agent/tasks/inquiry/2.inquiry-doctor-question';
-import { TaskInqueryUserAnswer } from 'src/agent/tasks/inquiry/3.inquiry-user-answer';
-import { TaskExecutor } from 'src/agent/agent.start';
-import { AgentTaskStep } from 'src/agent/agent.task';
-import { DalleOptions, FmodeChatCompletion, ImagineWork } from 'fmode-ng';
-
-@Component({
-  selector: 'page-ai-knowledge',
-  templateUrl: './page-ai-knowledge.component.html',
-  styleUrls: ['./page-ai-knowledge.component.scss'],
-  standalone: true,
-  imports:[
-    IonHeader,IonToolbar,IonButton,IonContent,IonCard,IonCardTitle, IonCardHeader,
-    IonCardContent,CommonModule, IonInput,IonList, IonItem, IonLabel, IonIcon
-  ]
-})
-export class PageAiKnowledgeComponent  implements OnInit {
-
-  back: string = 'back'; //返回
-  backHome(){
-    this.router.navigate(['/tabs/tab2']);
-  }
-  gotouser(){
-
-  }
-
-  avatar : string = "";
-  currentUser : CloudUser | undefined ;
-  objectId : string = "";
-
-  constructor(
-    private router: Router,
-    private modalCtrl: ModalController,
-  ) {
-    this.loadData();
-     // 示例任务,自己生成图片后请存储新的ID 
-    //  this.imagineWork = new ImagineWork("");
-     this.imagineWork.fetchTask().then(work=>{
-       if(work){
-         this.imagineWork.id = work.id
-       }
-       this.images = this.imagineWork?.images;
-     })
-  }
-  allMessage : Array<CloudObject> = [];
-  async loadData(){
-    this.currentUser = new CloudUser();
-    this.avatar = this.currentUser.data["avatar"];
-    this.objectId = this.currentUser.data['objectId'];
-  }
-   
-  ngOnInit() {
-  }
-  kepu:string = ""
-  kepuInput(ev:any){
-    this.kepu = ev.detail.value;
-    console.log(this.kepu);
-  }
-  imagineWork:ImagineWork = new ImagineWork; // 图片生成
-  images:Array<string> = [] // 图片数组
-  PictureDescResult:string = `` // 画面描述结果
-  doInqueryTask(){
-    this.imagineWork = new ImagineWork();
-        if (this.kepu.length > 0){
-        // 文本生成
-        let PromptTemplate = `您是一名专业的医学教育工作者,擅长将晦涩难懂的医学名词转化为一些通俗易懂的话语,请您根据下面提供的内容,将其描述的画面、场景、人物、物品等用故事的方式表达并将内容压缩在五个画面中,直接写出画面,并且描述的画风以漫画的风格为主
-        需求如下:
-        ${this.kepu}
-        `
-        let completion = new FmodeChatCompletion([
-          {role:"system",content:""},
-          {role:"user",content:PromptTemplate}
-        ])
-        completion.sendCompletion().subscribe((message:any)=>{
-          // 打印消息体
-          console.log("消息体",message.content)
-          // 赋值消息内容给组件内属性
-          this.PictureDescResult = message.content
-          if(message?.complete){ // 判断message为完成状态,则设置isComplete为完成
-            for(let i = 0; i < 5; i++){
-              // 图片生成
-              let PicturePrompt = `${this.PictureDescResult}\n根据画面${i+1}:进行绘画,如果图片中有谈话内容,请以普通话为主,风格:画面不带任何其他文字。其中以中国漫画人物为主体,人物诙谐幽默,符合中国现代人审美。图片展示的内容要和前面提供的内容保持一致`
-              console.log(PicturePrompt)
-              let options:DalleOptions = {prompt:PicturePrompt}
-              this.imagineWork?.draw(options).subscribe(work=>{
-                console.log("imagineWork",work?.toJSON())
-                console.log("images",work?.get("images"))
-                if (work?.get("images")?.length){
-                  // 将生成的每一张图片存储到数组中
-                  this.images.push(work?.get("images")[0]);
-                  console.log("work?.get('images')",work?.get("images"))
-                }
-                console.log("this.images",this.images)
-              })
-            }
-          }
-        })
-      }
-      else{
-        this.kepu = "请提供您合理的健康知识,我将根据其意境为您创作一幅画面的简短描述。"
-      }
-  }
-
-}

+ 16 - 14
wisdom-app/src/app/page/page-create-agent/page-create-agent.component.html

@@ -1,15 +1,16 @@
 <ion-header [translucent]="true">
   <ion-toolbar>
-    <ion-buttons slot="start">
+    <!-- <ion-buttons slot="start">
       <ion-button (click)="backhome()" color="primary" >{{back}}</ion-button>
-    </ion-buttons>
-    <ion-title slot="end">创建智能体</ion-title>
-    <!-- <ion-progress-bar type="indeterminate"></ion-progress-bar> -->
-     @if(this.progress > 0){
-      <!-- // buffer 是缓冲进度,可以理解为最大进度
-      // value 是当前进度 -->
-      <ion-progress-bar [buffer]="buffer" [value]="progress"></ion-progress-bar>
-     }
+    </ion-buttons> -->
+    <ion-button color="light" slot="start">
+      <ion-back-button  defaultHref="/" ></ion-back-button>
+    </ion-button>
+    <ion-title>创建智能体</ion-title>
+
+    @if(progress!=0 && progress!=1){
+      <ion-progress-bar  [value]="progress"></ion-progress-bar>
+    }
 
   </ion-toolbar>
 </ion-header>
@@ -54,9 +55,6 @@
       </ion-list>
     </ion-card>
   </div>
-  <ion-button (click)="presentToast('top')" (click)="createAgent()" expand="block" color="primary" >创建ai医生</ion-button>
-  <!-- <ion-button (click)="presentToast('middle')" expand="block">创建智能体</ion-button> -->
-
   <ion-card>
     <ion-card-header>
       <ion-card-title>我的智能体</ion-card-title>
@@ -81,5 +79,9 @@
       </ion-list>
     </ion-card-content>
   </ion-card>
-
-</ion-content>
+</ion-content>
+<ion-footer>
+  <ion-toolbar>
+    <ion-button  (click)="createAgent()" expand="block" color="primary" >创建ai医生</ion-button>
+  </ion-toolbar>
+</ion-footer>

+ 10 - 0
wisdom-app/src/app/page/page-create-agent/page-create-agent.component.scss

@@ -0,0 +1,10 @@
+ion-header {
+    background-color: #5c97ff;
+    color: white;
+}
+
+ion-title {
+    font-size: 20px;
+    font-weight: bold;
+    text-align: center;
+}

+ 47 - 47
wisdom-app/src/app/page/page-create-agent/page-create-agent.component.ts

@@ -1,7 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
 import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
-import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonIcon, ModalController, IonTextarea, IonInput, IonCard, IonCardHeader, IonCardTitle, IonThumbnail, IonCardContent, IonCardSubtitle, IonItem, IonList, IonLabel, IonAvatar, IonSelect, IonSelectOption, AlertController, IonButtons, IonProgressBar, IonText, IonRefresherContent, IonRefresher, ToastController, IonToast } from '@ionic/angular/standalone';
+import { LoadingController,IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonIcon, ModalController, IonTextarea, IonInput, IonCard, IonCardHeader, IonCardTitle, IonThumbnail, IonCardContent, IonCardSubtitle, IonItem, IonList, IonLabel, IonAvatar, IonSelect, IonSelectOption, AlertController, IonButtons, IonProgressBar, IonText, IonRefresherContent, IonRefresher, ToastController, IonToast, IonFooter, IonBackButton } from '@ionic/angular/standalone';
 import { CommonModule } from '@angular/common';
 import { AvatarModule, ChatPanelOptions, DalleOptions, FmodeChat, FmodeChatCompletion, FmodeChatMessage, ImagineWork, openChatPanelModal } from 'fmode-ng';
 
@@ -17,22 +17,20 @@ import { AvatarModule, ChatPanelOptions, DalleOptions, FmodeChat, FmodeChatCompl
     IonCardSubtitle,IonCardContent, IonThumbnail, IonItem,IonList,CommonModule,IonLabel,
     IonAvatar, IonSelect, IonSelectOption,IonButtons,IonProgressBar,
     IonText, IonCardHeader, IonCardSubtitle,IonRefresher,IonRefresherContent,
-    IonToast
+    IonToast,IonFooter,IonBackButton
   ],
 })
 export class PageCreateAgentComponent  implements OnInit {
   public buffer = 0.05;
   public progress = 0;
-  
-  
-  async presentToast(position: 'top' | 'middle' | 'bottom') {
-    const toast = await this.toastController.create({
-      message: '正在创建智能体,请耐心等待!',
-      duration: 1500,
-      position: position,
-    });
-    await toast.present();
-  }
+  // async presentToast(position: 'top' | 'middle' | 'bottom') {
+  //   const toast = await this.toastController.create({
+  //     message: '正在创建智能体,请耐心等待!',
+  //     duration: 1500,
+  //     position: position,
+  //   });
+  //   await toast.present();
+  // }
 
   handleRefresh(event:any) {
     setTimeout(() => {
@@ -46,7 +44,8 @@ export class PageCreateAgentComponent  implements OnInit {
     private toastController: ToastController,
     private modalCtrl:ModalController,
     private router:Router,
-    private alertController: AlertController
+    private alertController: AlertController,
+    private loadingController: LoadingController,
   ) {
 
    this.currentUser = new CloudUser();
@@ -61,11 +60,6 @@ export class PageCreateAgentComponent  implements OnInit {
   this.loadAgentData()
   }
  images:Array<string> = []
-  back:string = "返回";
-
-  backhome() {
-    this.router.navigate(['/tabs/tab1']);
-  }
   ngOnInit() {
 
   }
@@ -98,9 +92,10 @@ export class PageCreateAgentComponent  implements OnInit {
   }
   imagineWork:ImagineWork
   PictureDescResult:string = `` // 画面描述结果
-
+  loading: HTMLIonLoadingElement | null = null; 
   // 创建医生
   async createAgent() {
+
     let alert1 = await this.alertController.create({
       header: '温馨提示',
       subHeader: 'Tips',
@@ -113,12 +108,6 @@ export class PageCreateAgentComponent  implements OnInit {
       message: '智能体已经创建成功!',
       buttons: ['好的'],
     });
-    let alert3 = await this.alertController.create({
-      header: '温馨提示',
-      subHeader: 'Tips',
-      message: '智能体开始创建,请耐心等待!',
-      buttons: ['好的'],
-    });
     let alert4 = await this.alertController.create({
       header: '温馨提示',
       subHeader: 'Tips',
@@ -129,18 +118,10 @@ export class PageCreateAgentComponent  implements OnInit {
       await alert1.present();
       return;
     } 
-    await alert3.present();
-    let a = setInterval(() => {
-      this.buffer += 0.03;
-      this.progress += 0.02;
-      if (this.progress > 1) {
-        this.buffer = 0.00;
-        this.progress = 0;
-        // 删除定时器
-        clearInterval(a);
-      }
-    }, 1000);
-
+    this.loading = await this.loadingController.create({
+      message: '智能体生成中...',
+    });
+    await this.loading.present();
     localStorage.setItem("company","E4KpGvTEto")
 
     let consult = new CloudObject("DoctorAgent")
@@ -175,17 +156,32 @@ export class PageCreateAgentComponent  implements OnInit {
         console.log(message.content)
         // 赋值消息内容给组件内属性
         this.PictureDescResult = message.content
+        if(this.progress<0.97){
+          if(this.progress<0.5){
+            this.progress+=0.002
+          }
+          if(this.progress>=0.8){
+            this.progress+=0.001
+          }
+        }
         if(message?.complete){ // 判断message为完成状态,则设置isComplete为完成
               // 图片生成
             let PicturePrompt = `${this.PictureDescResult}\n风格:画面不带任何文字。人物为主体,人物要在图片的正中央。其中人物必须帅气,符合现代中国人审美。`
             let options:DalleOptions = {prompt:PicturePrompt}
 
-            this.imagineWork?.draw(options).subscribe(work=>{
+            this.imagineWork?.draw(options).subscribe(async work=>{
+              if(this.progress<0.5){
+                this.progress+=0.01
+              }
+              if(this.progress>=0.8){
+                this.progress+=0.001
+              }
                 if(work?.get("images")?.length){
+                  if (this.loading) {
+                    await this.loading.dismiss();
+                    this.loading = null; // 清空 loading 实例
+                  }
                   avatar =  work?.get("images")[0];
-                  console.log(work?.get("images"));
-                  console.log("work",work);
-                  console.log("里面的avatar",avatar);
                   consult.set({
                     avatar:`${avatar}`,
                     name:`${this.name}`,
@@ -195,8 +191,9 @@ export class PageCreateAgentComponent  implements OnInit {
                     user:this.currentUser.toPointer(),
                     ACL:ACL,
                   })
+                  this.progress=0
                   consult.save();
-                  this.progress = 1;
+                  // this.progress = 1;
                   console.log("consult",consult);
                   alert2.present();
                   this.loadAgentData();
@@ -291,11 +288,14 @@ ${userPrompt}
           let content:any = message?.content
           if(typeof content == "string"){
             if(content?.indexOf("[处方完成]")>-1){
-              console.log("门诊已完成")
-              consult.set({
-                content:content // 处方内容
-              })
-              consult.save();
+                console.log("门诊已完成")
+                let list = chat?.messageList
+                console.log("门诊已完成")
+                consult.set({
+                  allContent:list,
+                  content:content // 处方内容
+                })
+                consult.save();
             }
           }
         },

+ 10 - 19
wisdom-app/src/app/page/page-inquiry/page-inquiry.component.html

@@ -1,28 +1,19 @@
 <ion-header [translucent]="true">
   <ion-toolbar class="searchbar">
-    <div>
-      <ion-button (click)="backhome()" color="primary" >{{back}}</ion-button>
-    </div>
-    <ion-segment [(ngModel)]="selectedSegment" (ionChange)="segmentChanged($event)" scrollable>
-      <ion-segment-button *ngFor="let segment of segments" [value]="segment">
-        {{segment}}
-      </ion-segment-button>
-    </ion-segment>
+    <ion-button color="light" slot="start">
+      <ion-back-button  defaultHref="/" ></ion-back-button>
+    </ion-button>
+    <ion-title>AI问诊</ion-title>
+
   </ion-toolbar>
 </ion-header>
 
 <ion-content>
-  <!-- <div>
-    <ion-list>
-      <ion-item>
-        <ion-avatar aria-hidden="true" slot="start">
-          <img alt="currentUser.get('realname') | 头像" [src]="currentUser.get('avatar')"   />
-        </ion-avatar>
-        <ion-label>{{currentUser.get('realname')}}</ion-label>
-      </ion-item>
-    </ion-list>
-  </div> -->
-  
+  <ion-segment [(ngModel)]="selectedSegment" (ionChange)="segmentChanged($event)" scrollable>
+    <ion-segment-button *ngFor="let segment of segments" [value]="segment">
+      {{segment}}
+    </ion-segment-button>
+  </ion-segment>
   <div>
       <ion-grid>
         <ion-row>

+ 11 - 0
wisdom-app/src/app/page/page-inquiry/page-inquiry.component.scss

@@ -1,3 +1,14 @@
+ion-header {
+  background-color: #5c97ff;
+  color: white;
+}
+
+ion-title {
+  font-size: 20px;
+  font-weight: bold;
+  text-align: center;
+}
+
 .createai{
     ion-button{
         contain-intrinsic-height: 50px;

+ 5 - 1
wisdom-app/src/app/page/page-inquiry/page-inquiry.component.ts

@@ -1,5 +1,5 @@
 import { Component,OnInit } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonIcon, ModalController, IonTextarea, IonInput, IonCard, IonCardHeader, IonCardTitle, IonThumbnail, IonCardContent, IonCardSubtitle, IonItem, IonList, IonLabel, IonAvatar, IonCol, IonRow, IonGrid, IonBadge, IonFooter, IonSegment, IonSegmentButton } from '@ionic/angular/standalone';
+import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonIcon, ModalController, IonTextarea, IonInput, IonCard, IonCardHeader, IonCardTitle, IonThumbnail, IonCardContent, IonCardSubtitle, IonItem, IonList, IonLabel, IonAvatar, IonCol, IonRow, IonGrid, IonBadge, IonFooter, IonSegment, IonSegmentButton, IonBackButton } from '@ionic/angular/standalone';
 import { AgentTaskStep } from 'src/agent/agent.task';
 import { addIcons } from 'ionicons';
 import { radioButtonOffOutline, reloadOutline, checkmarkCircleOutline, closeCircleOutline } from 'ionicons/icons';
@@ -40,6 +40,7 @@ interface Doctor1 {
     IonIcon,AgentUserInputComponent,DecimalPipe,IonCard,IonCardHeader,IonCardTitle,
     IonCardSubtitle,IonCardContent, IonThumbnail, IonItem,IonList,CommonModule,IonLabel,
     IonAvatar,FormsModule,IonCol,IonRow,IonGrid,IonBadge,IonFooter,IonSegment,IonSegmentButton,
+    IonBackButton
   ],
 })
 
@@ -247,8 +248,11 @@ export class PageInquiryComponent  implements OnInit {
           let content:any = message?.content
           if(typeof content == "string"){
             if(content?.indexOf("[处方完成]")>-1){
+              console.log("门诊已完成")
+              let list = chat?.messageList
               console.log("门诊已完成")
               consult.set({
+                allContent:list,
                 content:content // 处方内容
               })
               consult.save();

+ 11 - 10
wisdom-app/src/app/page/page-my-health/page-my-health.component.html

@@ -1,28 +1,29 @@
 <ion-header [translucent]="true">
   <ion-toolbar class="searchbar">
-    <ion-button slot="start" (click)="backHome()" color="primary">{{back}}</ion-button>
-    <ion-title>
-      <div class="user-info">
+    <ion-button color="light" slot="start">
+      <ion-back-button  defaultHref="/" ></ion-back-button>
+    </ion-button>
+    <ion-title>AI问诊</ion-title>
+      <!-- <div class="user-info">
         <ion-avatar class="user-avatar">
           <img [src]="avatar" (error)="handleImageError()" alt="用户头像" class="avatar" />
         </ion-avatar>
         <span class="user-name">欢迎,{{ userName }}!</span>
       </div>
-      我的每次问询记录
-    </ion-title>
-    <ion-buttons slot="end">
+    </ion-title> -->
+    <!-- <ion-buttons slot="end">
       <ion-icon name="menu-outline"></ion-icon>
-    </ion-buttons>
+    </ion-buttons> -->
   </ion-toolbar>
 </ion-header>
 
 <ion-content [fullscreen]="true">
-  <ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)">
+  <!-- <ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)">
     <ion-refresher-content></ion-refresher-content>
-  </ion-refresher>
+  </ion-refresher> -->
 
   <!-- 数据加载指示器 -->
-  <!-- <ion-spinner *ngIf="isLoading" name="crescent" class="loading-spinner"></ion-spinner> -->
+  <ion-spinner *ngIf="isLoading" name="crescent" class="loading-spinner"></ion-spinner>
 
   <!-- 数据展示区域 -->
 

+ 9 - 0
wisdom-app/src/app/page/page-my-health/page-my-health.component.scss

@@ -2,7 +2,16 @@
   --background: #ffffff;
   --ion-color-primary: #3880ff;
 }
+ion-header {
+  background-color: #5c97ff;
+  color: white;
+}
 
+ion-title {
+  font-size: 20px;
+  font-weight: bold;
+  text-align: center;
+}
 .user-info {
   display: flex;
   align-items: center;

+ 3 - 2
wisdom-app/src/app/page/page-my-health/page-my-health.component.ts

@@ -28,7 +28,8 @@ import {
   IonSpinner,
   IonGrid,
   IonRow,
-  IonCol
+  IonCol,
+  IonBackButton
 } from '@ionic/angular/standalone'; // 确保导入自 '@ionic/angular/standalone'
 
 import { addIcons } from 'ionicons';
@@ -109,7 +110,7 @@ interface Consultation {
     IonSpinner,
     IonGrid,
     IonRow,
-    IonCol
+    IonCol,IonBackButton
     // 如果需要,可以取消注释以下行
     // FmMarkdownPreview,
   ]

+ 33 - 3
wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.html

@@ -1,3 +1,33 @@
-<p>
-  page-user-inquery works!
-</p>
+<!-- 我的预约页面 -->
+<ion-header [translucent]="true">
+  <ion-toolbar class="searchbar">
+    <ion-button color="light" slot="start">
+      <ion-back-button  defaultHref="/" ></ion-back-button>
+    </ion-button>
+    <ion-title>我的预约</ion-title>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-refresher slot="fixed" (ionRefresh)="handleRefresh($event)">
+    <ion-refresher-content></ion-refresher-content>
+  </ion-refresher>
+  <ion-list *ngFor="let appointment of appointmentList">
+    @if(appointment){
+      <ion-item>
+        <h2>患者简介</h2>
+      </ion-item>
+      <ion-item >
+          <h3>姓名:{{appointment.get("username")}}</h3>
+      </ion-item>
+      <ion-item>
+        <p>电话"{{appointment.get("userPhone")}}</p>
+      </ion-item>
+      <ion-item>
+        <p>预约方式:{{appointment.get("type")}}</p>
+      </ion-item>
+      <ion-item>
+        <ion-button expand="block">立即前往</ion-button>
+      </ion-item>
+    }
+  </ion-list>
+</ion-content>

+ 10 - 0
wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.scss

@@ -0,0 +1,10 @@
+ion-header {
+    background-color: #5c97ff;
+    color: white;
+  }
+  
+  ion-title {
+    font-size: 20px;
+    font-weight: bold;
+    text-align: center;
+  }

+ 30 - 2
wisdom-app/src/app/page/page-user-inquery/page-user-inquery.component.ts

@@ -1,4 +1,6 @@
+import { CommonModule } from '@angular/common';
 import { Component, OnInit } from '@angular/core';
+import { IonBackButton, IonButton, IonContent, IonHeader, IonItem, IonLabel, IonList, IonRefresher, IonRefresherContent, IonTitle, IonToolbar } from '@ionic/angular/standalone';
 import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
 
 @Component({
@@ -6,17 +8,43 @@ import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
   templateUrl: './page-user-inquery.component.html',
   styleUrls: ['./page-user-inquery.component.scss'],
   standalone: true,
+  imports: [
+    CommonModule,IonTitle,IonContent,IonToolbar,IonHeader,IonList,IonLabel,IonItem,IonButton,
+    IonRefresher,IonRefresherContent,IonBackButton
+  ]
 })
 export class PageUserInqueryComponent  implements OnInit {
+  handleRefresh(event:any) {
+    setTimeout(() => {
+      // Any calls to load data go here
+      this.appointDisplay()
+      event.target.complete();
+    }, 2000);
+  }
   currentUser:CloudUser;
   constructor(
 
   ) {
     this.currentUser = new CloudUser();
-    this.load()
+    this.appointDisplay()
+    // this.load()
    }
 
-  ngOnInit() {}
+  ngOnInit() {
+  }
+  appointmentList: Array<CloudObject> = []
+  // 用来显示预约列表
+  async appointDisplay(){
+    console.log('appointDisplay')
+    let query = new CloudQuery('appointment');
+    // query.include("user")
+    query.equalTo('doctor', this.currentUser?.id)
+    this.appointmentList = await query.find()
+    console.log('我的appointmentList',this.appointmentList)
+    console.log("this.currentUser",this.currentUser)
+  }
+
+  // 用来认证医生
   async load(){
     let depart = new CloudQuery('Department');
     depart.equalTo("name", "妇产科")

+ 9 - 9
wisdom-app/src/app/tab1/tab1.page.html

@@ -1,6 +1,6 @@
 <ion-header [translucent]="true">
   <ion-toolbar class="searchbar">
-    <div class="searchbar-container">
+    <!-- <div class="searchbar-container">
       <ion-searchbar 
         [value]="searchContent" 
         (ionInput)="handleInput($event)" 
@@ -11,8 +11,8 @@
         color="primary" 
         size="default" 
         (click)="search()">搜索</ion-button>
-    </div>
-    
+    </div> -->
+    <ion-title>智养人生欢迎您</ion-title>
   </ion-toolbar>
 </ion-header>
 <!-- 内存不足 使用以下代码 -->
@@ -23,15 +23,15 @@ node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve -->
 
 <ion-content [fullscreen]="true">
   @for (doctor of realDoctorList;track doctor) {
-    @if(currentUser?.id == doctor.data["user"]?.objectId){
+    @if(currentUser.id == doctor.data["user"]?.objectId){
       <ion-card>
         <ion-card-header>
-          <ion-card-title>医生</ion-card-title>
+          <ion-card-title>{{currentUser.data['realname']}}医生,欢迎您!</ion-card-title>
         </ion-card-header>
         <ion-card-content>
-          <ion-button (click)="goToPageUser()">去看预约</ion-button>
-          <ion-button (click)="goToPageDoctor()">查看医生</ion-button>
-          <ion-button (click)="goToPageDrug()">查看药品</ion-button>
+          <ion-button expand="block" (click)="goToPageUser()">我的预约</ion-button>
+          <!-- <ion-button (click)="goToPageDoctor()">查看医生</ion-button>
+          <ion-button (click)="goToPageDrug()">查看药品</ion-button> -->
         </ion-card-content>
       </ion-card>
     }
@@ -106,7 +106,7 @@ node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve -->
             <h1>AI医生</h1>
           </div>
           <div class="under_slide">
-            <ion-label (click)="goToViewAll()">查看全部</ion-label>
+            <ion-label (click)="goToPage1()">查看全部</ion-label>
             <ion-ripple-effect></ion-ripple-effect>
             <ion-icon name="chevron-forward-outline"></ion-icon>
           </div>

+ 6 - 0
wisdom-app/src/app/tab1/tab1.page.scss

@@ -1,3 +1,9 @@
+
+ion-title {
+  font-size: 20px;
+  font-weight: bold;
+  text-align: center;
+}
 .searchbar-container {
   display: flex; /* 使用 Flexbox 布局 */
   align-items: center; /* 垂直居中 */

+ 26 - 77
wisdom-app/src/app/tab1/tab1.page.ts

@@ -1,6 +1,5 @@
 import { Component, LOCALE_ID } from '@angular/core';
-import { IonCardHeader, IonHeader, IonToolbar, IonTitle, IonContent, IonTabButton, IonSearchbar, IonLabel, IonItem, IonList, NavController, IonCard, IonCardTitle, IonCardSubtitle, IonCardContent, IonThumbnail, IonRippleEffect, IonFab, IonFabList, IonFabButton, IonBadge } from '@ionic/angular/standalone';
-import { ExploreContainerComponent } from '../explore-container/explore-container.component';
+import { IonCardHeader, IonHeader, IonToolbar, IonTitle, IonContent, IonTabButton, IonSearchbar, IonLabel, IonItem, IonList, NavController, IonCard, IonCardTitle, IonCardSubtitle, IonCardContent, IonThumbnail, IonRippleEffect, IonFab, IonFabList, IonFabButton, IonBadge, IonAvatar } from '@ionic/angular/standalone';
 import { IonButton } from '@ionic/angular/standalone';
 import { IonIcon } from '@ionic/angular/standalone';
 import { Router } from '@angular/router';
@@ -44,9 +43,10 @@ interface ServiceItem {
   styleUrls: ['tab1.page.scss'],
   standalone: true,
   imports: [
-    IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent, IonTabButton, IonButton,
+    IonHeader, IonToolbar, IonTitle, IonContent,IonTabButton, IonButton,
     IonIcon,IonSearchbar,IonLabel,IonItem,IonList,CommonModule,IonCard,IonCardHeader,IonCardTitle,IonCardSubtitle,
-    IonCardContent, IonThumbnail, IonRippleEffect, IonFab, IonFabButton, IonFabList,IonBadge, 
+    IonCardContent, IonThumbnail, IonRippleEffect, IonFab, IonFabButton, IonFabList,IonBadge, IonAvatar
+  
   ],
 })
 export class Tab1Page {
@@ -162,19 +162,21 @@ export class Tab1Page {
     private http: HttpClient // 注入 HttpClient
   ) {
     this.loadRealDoctorList();
+    this.currentUser = new CloudUser();
     }
+    currentUser: CloudUser;
     async loadRealDoctorList() {
-      this.currentUser = new CloudUser();
       let query = new CloudQuery('Doctor1');
       query.include('user')
       query.include('depart')
       this.realDoctorList =await query.find()
-      // console.log(this.realDoctorList)
-      console.log(this.realDoctorList[0].data["user"]?.objectId)
-      console.log(this.realDoctorList[1].data["user"]?.objectId)
-      console.log(this.realDoctorList[2].data["user"]?.objectId)
-      console.log(this.currentUser.id)
-    }
+      for(let i = 0; i < this.realDoctorList.length; i++){
+        if(this.realDoctorList[i].data["user"]?.objectId == this.currentUser.id){
+          console.log("欢迎您,医生!")
+        }
+      }
+      console.log(this.currentUser)
+  }
  /**
   * 轮播图
   */
@@ -213,53 +215,22 @@ export class Tab1Page {
     }
   }
 
-
-  /**
-   * Go to the ai page
-   */
   goToPage1(){
     console.log(['route'])
-    let user = new CloudUser;
-    if (!user.id){
+    if (!this.currentUser.id){
       this.router.navigate(['/tabs/tab4'])
       return
     }
     this.router.navigate(['/tabs/inquiry/ai'])
   }
-
-  /**
-   * Go to the human page
-   */
   goToPage2(){
-    let user = new CloudUser;
-    if (!user.id){
+    if (!this.currentUser.id){
       this.router.navigate(['/tabs/tab4'])
       return
     }
     this.router.navigate(['/tabs/inquiry/human'])
   }
 
-  goToPicture(){
-    console.log(['route'])
-    this.router.navigate(['/tabs/picture'])
-  }
-  searchContent:string = ''; //搜索内容
-
-  handleInput(ev:any) {
-    console.log("ev.detail.value: ",ev.detail.value)
-    this.searchContent = ev.detail.value;
-  }
-
-  search(){
-    if (this.searchContent == ''){
-      console.log("请输入搜索内容")
-    }
-    else {
-      console.log("搜索内容: ",this.searchContent)
-      this.searchContent = '';
-    }
-  }
-
   // 功能按钮数据
   functionItems1 = [
     { label: '专属医生', icon: 'document-text', route: '/tabs/create-agent' },
@@ -293,27 +264,13 @@ export class Tab1Page {
     for(let i = 0; i < 3; i++) {
       this.doctorList.push(List[i])
     }
-    // let query1 = new CloudQuery('Consultation');
-    // let content = await query1.find()
-    // // 把content中的所有数据都打印出来
-    // console.log("content: ",content)
-    // for (let i = 0; i < content.length; i++) {
-    //   console.log("content: ",content[i].data["allContent"])
-    // }
-    // // console.log("content: ",content[0]?.get("allContent"))
-  }
-  goToViewAll(){
-    console.log(['route'])
-    this.router.navigate(['/tabs/inquiry/ai'])
   }
   
-  currentUser:CloudUser|undefined
    /** 示例:问诊根据doctor拼接提示词 */
    async openInquiry(doctor:any){
     // 验证用户登录
-    let currentUser = new CloudUser();
     let userPrompt = ``
-    if(!currentUser?.id){
+    if(!this.currentUser?.id){
       console.log("用户未登录,请登录后重试");
       // let user = await openUserLoginModal(this.modalCtrl);
       // if(!user?.id){
@@ -323,15 +280,15 @@ export class Tab1Page {
       this.router.navigate(['/tabs/tab4'])
       return 
     }
-    console.log("currentUser: ",currentUser)
-    if(currentUser?.get("realname")){
-      userPrompt += `当前来访的患者,姓名:${currentUser?.get("realname")}`
+    console.log("currentUser: ",this.currentUser)
+    if(this.currentUser?.get("realname")){
+      userPrompt += `当前来访的患者,姓名:${this.currentUser?.get("realname")}`
     }
-    if(currentUser?.get("gender")){
-      userPrompt += `,性别:${currentUser?.get("gender")}`
+    if(this.currentUser?.get("gender")){
+      userPrompt += `,性别:${this.currentUser?.get("gender")}`
     }
-    if(currentUser?.get("age")){
-      userPrompt += `,年龄:${currentUser?.get("age")}`
+    if(this.currentUser?.get("age")){
+      userPrompt += `,年龄:${this.currentUser?.get("age")}`
     }
 
 
@@ -344,9 +301,6 @@ export class Tab1Page {
     let ACL:any = {
       "*":{read:true,write:true}
     }
-    // if(currentUser?.id){
-    //   ACL[currentUser?.id] = {read:true,write:true}
-    // }
     consult.set({
       title:`${doctor.get('depart')?.name || ""}门诊记录${dateStr}-${doctor?.get("name")}`,
       doctor:doctor.toPointer(),
@@ -355,7 +309,7 @@ export class Tab1Page {
         className:"Department",
         objectId:doctor.get("depart")?.objectId
       },
-      user:currentUser.toPointer(),
+      user:this.currentUser.toPointer(),
       ACL:ACL
     })
 
@@ -403,23 +357,18 @@ ${userPrompt}
             console.log("门诊已完成")
             consult.set({
               allContent:list,
-              content:content // 处方内容
+              content:content,
             })
             consult.save();
           }
         }
-
       },
       onChatSaved:(chat:FmodeChat)=>{
-        // chat?.chatSession?.id 本次会话的 chatId
         console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
-        // consult.set({
-        //   chatId:chat?.chatSession?.id
-        // })
-        // console.log("chat.MessageList", chat?.messageList)
       }
     }
     openChatPanelModal(this.modalCtrl,options)
   }
 
 }
+

+ 2 - 6
wisdom-app/src/app/tab2/tab2.page.ts

@@ -1,12 +1,10 @@
 import { Component } from '@angular/core';
 import { ModalController, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonList, IonItem, IonLabel, IonAvatar, IonButton, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonIcon, IonButtons, IonSearchbar, IonFab, IonFabButton, IonFabList, IonFooter, IonInput } from '@ionic/angular/standalone';
-import { ExploreContainerComponent } from '../explore-container/explore-container.component';
 import { addIcons } from 'ionicons';
 import { airplane, bluetooth, call, wifi } from 'ionicons/icons';
 import { ArticleCardComponent } from '../component/article-card/article-card.component';
 import { CommonModule } from '@angular/common';
 import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud';
-import { NavigationLanComponent } from '../component/navigation-lan/navigation-lan.component';
 import { Router } from '@angular/router';
 import {
   chevronDownCircle,
@@ -25,10 +23,8 @@ addIcons({ chevronDownCircle, chevronForwardCircle, chevronUpCircle, colorPalett
   styleUrls: ['tab2.page.scss'],
   standalone: true,
   imports: [
-    IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
-    IonLabel,IonItem,IonList,IonAvatar,ArticleCardComponent,CommonModule,IonButton,
-    IonSegment, IonSegmentButton,NavigationLanComponent,
-    IonSegmentContent,IonSegmentView,IonCardContent, IonCardTitle, IonCardHeader,IonCard,
+    IonHeader, IonToolbar, IonTitle, IonContent,IonLabel,IonItem,IonList,IonAvatar,ArticleCardComponent,CommonModule,IonButton,
+    IonSegment, IonSegmentButton,IonSegmentContent,IonSegmentView,IonCardContent, IonCardTitle, IonCardHeader,IonCard,
     IonModal,IonIcon, IonButtons, IonSearchbar, IonFab, IonFabButton,IonFabList,IonFooter,
     IonInput,IonSegment,IonSegmentButton,FormsModule
   ]

+ 2 - 4
wisdom-app/src/app/tab3/tab3.page.ts

@@ -1,6 +1,5 @@
 import { Component } from '@angular/core';
-import { ModalController, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonList, IonItem, IonLabel, IonAvatar, IonButton, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonIcon, IonButtons, IonGrid, IonRow, IonThumbnail, IonSearchbar, IonCol } from '@ionic/angular/standalone';
-import { ExploreContainerComponent } from '../explore-container/explore-container.component';
+import { ModalController, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonList, IonItem, IonLabel, IonAvatar, IonButton, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonIcon, IonButtons, IonGrid, IonRow, IonThumbnail, IonSearchbar, IonCol, IonBackButton } from '@ionic/angular/standalone';
 import { addIcons } from 'ionicons';
 import { airplane, bluetooth, call, wifi, close } from 'ionicons/icons';
 import { SaleCardComponent } from '../component/sale-card/sale-card.component';
@@ -24,9 +23,8 @@ addIcons({ airplane, bluetooth, call, wifi });
     CommonModule,
     AllProductsModalComponent,
     DetailModalComponent,
-    ExploreContainerComponent,
     SaleCardComponent,
-    FmChatModalInput
+    FmChatModalInput,IonBackButton
   ]
 })
 export class Tab3Page {

+ 0 - 11
wisdom-app/src/app/tab4/tab4.page.html

@@ -81,7 +81,6 @@
         <h2 class="memo-title">健康备忘录</h2>
         <p class="memo-description">写下您问诊的医生名或者心动的科普知识,便于您下次查找</p>
         <app-edit-tag (onTagChange)="setTagsValue($event)"></app-edit-tag>
-        <h2 class="memo-title">收藏夹</h2>
         <ul class="tag-list">
             @for(tag of editTags; track tag;){
                 <li class="tag-item">{{tag}}</li>
@@ -116,14 +115,6 @@
             <ion-icon name="location" slot="start"></ion-icon>
             <ion-label>我的地址</ion-label>
           </ion-item>
-          <ion-item>
-            <ion-icon name="card" slot="start"></ion-icon>
-            <ion-label>我的优惠券</ion-label>
-          </ion-item>
-          <ion-item>
-            <ion-icon name="bag" slot="start"></ion-icon>
-            <ion-label>我的套餐包</ion-label>
-          </ion-item>
           <ion-item>
             <ion-icon name="chatbox" slot="start"></ion-icon>
             <ion-label>联系客服</ion-label>
@@ -145,8 +136,6 @@
         </ion-item>
           <ion-button expand="block" fill="outline" (click)="changeNum1()" color="default">切换主题</ion-button>
           <ion-button expand="block" fill="outline" (click)="logout()" color="medium">登出</ion-button>
-        
-        
       </ion-content>
     }
 }

+ 1 - 2
wisdom-app/src/app/tab4/tab4.page.ts

@@ -5,7 +5,6 @@ import { openUserEditModal } from 'src/lib/user/modal-user-edit/modal-user-edit.
 import { openUserLoginModal } from 'src/lib/user/modal-user-login/modal-user-login.component';
 import { EditTagComponent } from '../component/edit-tag/edit-tag.component';
 import { Router } from '@angular/router';
-
 @Component({
   selector: 'app-tab4',
   templateUrl: 'tab4.page.html',
@@ -17,7 +16,7 @@ import { Router } from '@angular/router';
   ],
 })
 export class Tab4Page {
-  pageNum:Number=0
+  pageNum:Number=2
   changeNum1(){
     this.pageNum=1;
   }

+ 7 - 7
wisdom-app/src/app/tabs/tabs.page.ts

@@ -6,11 +6,11 @@ import {
   compassOutline, bookOutline, book, storefront, personOutline, documentOutline,
   mailOutline, calendarOutline, logoUsd, briefcaseOutline, heartOutline, footballOutline,
   chevronForwardOutline, storefrontOutline, businessOutline, documentsOutline,
-  rocketOutline, sparklesOutline, medalOutline, listOutline, giftOutline,
+  rocketOutline, sparklesOutline, medalOutline, listOutline, giftOutline,folder,
   scanOutline, settingsOutline, heartCircleOutline, walletOutline, bagRemoveOutline,
   folderOutline, readerOutline, cartOutline, thumbsUpOutline, ticketOutline, documentTextOutline,
   timeOutline, cloudDownloadOutline, bagCheckOutline, cardOutline, searchOutline, menuOutline,
-  addCircleOutline, addOutline, optionsOutline,checkmarkCircle
+  addCircleOutline, addOutline, optionsOutline,checkmarkCircle,image,document,location,chatbox,call,personCircle
 } from 'ionicons/icons';
 import { CloudUser } from 'src/lib/ncloud';
 @Component({
@@ -26,12 +26,12 @@ export class TabsPage {
     constructor() {
       addIcons({
         home, accessibility,cart, person,bagAdd,
-        compassOutline, bookOutline, book, storefront, personOutline, documentOutline,
-        mailOutline, calendarOutline, logoUsd, briefcaseOutline, heartOutline,
-        footballOutline, chevronForwardOutline, storefrontOutline, businessOutline,
-        documentsOutline, rocketOutline, sparklesOutline, medalOutline, listOutline,
+        compassOutline, bookOutline, book, storefront, personOutline, documentOutline,location,
+        mailOutline, calendarOutline, logoUsd, briefcaseOutline, heartOutline,document,call,personCircle,
+        footballOutline, chevronForwardOutline, storefrontOutline, businessOutline,chatbox,
+        documentsOutline, rocketOutline, sparklesOutline, medalOutline, listOutline,folder,
         giftOutline, scanOutline, settingsOutline, heartCircleOutline, walletOutline,
-        bagRemoveOutline, folderOutline, readerOutline, cartOutline, thumbsUpOutline,
+        bagRemoveOutline, folderOutline, readerOutline, cartOutline, thumbsUpOutline,image,
         ticketOutline, documentTextOutline, timeOutline, cloudDownloadOutline, bagCheckOutline,
         cardOutline, searchOutline, menuOutline, addCircleOutline, addOutline, optionsOutline,checkmarkCircle
       });

+ 2 - 9
wisdom-app/src/app/tabs/tabs.routes.ts

@@ -60,13 +60,6 @@ export const routes: Routes = [
             (m) => m.DrugCategoryPage
           ),
       },
-      {
-        path: 'ai-knowledge',
-        loadComponent: () =>
-          import('../page/page-ai-knowledge/page-ai-knowledge.component').then(
-            (m) => m.PageAiKnowledgeComponent
-          ),
-      },
       {
         path: 'create-agent',
         loadComponent: () =>
@@ -83,14 +76,14 @@ export const routes: Routes = [
       },
       {
         path: '',
-        redirectTo: '/tabs/tab4',
+        redirectTo: '/tabs/tab1',
         pathMatch: 'full'
       },
     ],
   },
   {
     path: '',
-    redirectTo: '/tabs/tab4',
+    redirectTo: '/tabs/tab1',
     pathMatch: 'full'
   }
 ];

+ 4 - 1
wisdom-app/src/lib/user/modal-user-edit/modal-user-edit.component.html

@@ -14,9 +14,12 @@
    <ion-item>
      <ion-input type="number" [value]="userData['age']" (ionChange)="userDataChange('age',$event)" label="年龄" placeholder="请您输入年龄"></ion-input>
     </ion-item>
-  <ion-item>
+    <ion-item>
      <ion-input [value]="userData['gender']" (ionChange)="userDataChange('gender',$event)" label="性别" placeholder="请您输入男/女"></ion-input>
     </ion-item>
+    <ion-item>
+      <ion-input [value]="userData['phone']" (ionChange)="userDataChange('phone',$event)" label="电话" placeholder="请您输入电话号码(11位)"></ion-input>
+     </ion-item>
     <ion-item>
       <ion-input [value]="userData['avatar']" (ionChange)="userDataChange('avatar',$event)" label="头像" placeholder="请您输入头像地址(地址错误则会显示默认头像)"></ion-input>
      </ion-item>

+ 66 - 9
wisdom-app/src/lib/user/modal-user-edit/modal-user-edit.component.ts

@@ -1,6 +1,6 @@
 import { Input, OnInit } from '@angular/core';
 import { Component } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent, IonCard, IonCardContent, IonButton, IonCardHeader, IonCardTitle, IonCardSubtitle, ModalController, IonInput, IonItem, IonSegment, IonSegmentButton, IonLabel } from '@ionic/angular/standalone';
+import { IonHeader, IonToolbar, IonTitle, IonContent, IonCard, IonCardContent, IonButton, IonCardHeader, IonCardTitle, IonCardSubtitle, ModalController, IonInput, IonItem, IonSegment, IonSegmentButton, IonLabel, AlertController } from '@ionic/angular/standalone';
 import { CloudUser } from 'src/lib/ncloud';
 
 @Component({
@@ -19,12 +19,17 @@ export class ModalUserEditComponent  implements OnInit {
   currentUser:CloudUser|undefined
   userData:any = {}
   userDataChange(key:string,ev:any){
+    if(key=="phone" && ev?.detail?.value.length != 11){
+      console.log("手机号格式不正确1")
+      return
+    }
     let value = ev?.detail?.value
     if(value){
       this.userData[key] = value
     }
   }
-  constructor(private modalCtrl:ModalController) { 
+  constructor(private modalCtrl:ModalController,
+    private alertController: AlertController,) { 
     this.currentUser = new CloudUser();
     this.userData = this.currentUser.data;
   }
@@ -32,19 +37,71 @@ export class ModalUserEditComponent  implements OnInit {
   ngOnInit() {}
 
   async save(){
-    Object.keys(this.userData).forEach(key=>{
-      if(key=="age"){
-        this.userData[key] = Number(this.userData[key])
+    let alert = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '手机号格式不正确,请重新输入',
+      buttons: ['好的'],
+    });
+    let alert1 = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '年龄格式不正确,请重新输入',
+      buttons: ['好的'],
+    });
+    let alert2 = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '性别格式不正确,请重新输入',
+      buttons: ['好的'],
+    });
+    let alert3 = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '保存成功',
+      buttons: ['好的'],
+    });
+    // Object.keys(this.userData).forEach(async key=>{
+    //   if(key=="phone" && this.userData[key].length != 11){
+    //     console.log("手机号格式不正确2")
+    //     await alert.present()
+    //   }
+    //   if(key=="age"){
+    //     this.userData[key] = Number(this.userData[key])
+    //   }
+    // })
+    if(this.userData?.gender != "男" && this.userData?.gender != "女"){
+      console.log("性别格式不正确")
+      await alert2.present()
+      return
+    }
+    if(this.userData?.key == "age"){
+      if(this.userData["age"] < 0 || this.userData["age"] > 150){
+        console.log("年龄格式不正确")
+        await alert1.present()
+        return
       }
-    })
-
+      this.userData["age"] = Number(this.userData["age"])
+    }
+    if(this.userData?.phone?.length != 11){
+      console.log("手机号格式不正确3")
+        await alert.present()
+        return 
+    }
     this.currentUser?.set(this.userData)
     await this.currentUser?.save()
+    await alert3.present()
     this.modalCtrl.dismiss(this.currentUser,"confirm")
   }
-  cancel(){
+  async cancel(){
+    let alert = await this.alertController.create({
+      header: '温馨提示',
+      subHeader: 'Tips',
+      message: '取消保存',
+      buttons: ['好的'],
+    });
+    await alert.present()
     this.modalCtrl.dismiss(null,"cancel")
-
   }
 }