7 4 dni temu
rodzic
commit
eaa628fe0e

+ 1 - 20
myapp/src/app/tab1/tab1.page.html

@@ -12,25 +12,6 @@
   
  
 
-<ion-content [fullscreen]="true">
-  <!-- 子女消息区域 -->
-  <div *ngIf="isElderly && childrenMessages.length" class="children-messages">
-    <ion-card *ngFor="let msg of childrenMessages" 
-              [class.unread]="!msg.played"
-              (click)="playMessage(msg)">
-      <ion-card-header>
-        <ion-card-title>
-          <ion-icon name="person"></ion-icon>
-          {{ msg.from }}
-        </ion-card-title>
-        <ion-card-subtitle>{{ msg.time | date:'HH:mm' }}</ion-card-subtitle>
-      </ion-card-header>
-      <ion-card-content>
-        {{ msg.text }}
-        <div *ngIf="!msg.played" class="unread-indicator"></div>
-      </ion-card-content>
-    </ion-card>
-  </div>
 
 
   <!-- 服务九宫格 -->
@@ -80,7 +61,7 @@
       </ion-item>
     </ion-list>
   </div>
-</ion-content>
+
 
 <!-- 悬浮助手按钮 -->
 <div class="assistant-button" (click)="openVoiceInput()">

+ 5 - 0
myapp/src/app/tab5/tab5-routing.module.ts

@@ -3,6 +3,7 @@ import { RouterModule, Routes } from '@angular/router';
 import { Tab5Page } from './tab5.page';
 import { UserDashboardPage } from './user-dashboard.page';
 import { RegisterPage } from './register.page';
+import { UploadQualificationPage } from './upload-qualification.page';
 
 const routes: Routes = [
   {
@@ -16,6 +17,10 @@ const routes: Routes = [
   {
     path: 'register',
     component: RegisterPage
+  },
+  {
+    path: 'upload-qualification',
+    component: UploadQualificationPage
   }
 ];
 

+ 31 - 0
myapp/src/app/tab5/upload-qualification.page.html

@@ -0,0 +1,31 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-title>上传资质</ion-title>
+    <ion-buttons slot="start">
+      <ion-button (click)="goBack()">返回</ion-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content class="ion-padding">
+  <ion-item>
+    <ion-label position="stacked">资质类型</ion-label>
+    <ion-select [(ngModel)]="selectedType" placeholder="请选择资质类型">
+      <ion-select-option *ngFor="let type of qualificationTypes" [value]="type">
+        {{type}}
+      </ion-select-option>
+    </ion-select>
+  </ion-item>
+
+  <ion-item>
+    <ion-label position="stacked">上传证书/证明</ion-label>
+    <input type="file" (change)="onFileChange($event)" accept=".pdf,.jpg,.png" />
+  </ion-item>
+
+  <ion-item>
+    <ion-label position="stacked">证书获取时间</ion-label>
+    <ion-input type="date" [(ngModel)]="certTime"></ion-input>
+  </ion-item>
+
+  <ion-button expand="block" (click)="submitQualification()">提交审核</ion-button>
+</ion-content>

+ 0 - 0
myapp/src/app/tab5/upload-qualification.page.scss


+ 67 - 0
myapp/src/app/tab5/upload-qualification.page.ts

@@ -0,0 +1,67 @@
+import { Component } from '@angular/core';
+import { Router } from '@angular/router';
+import { ModalController } from '@ionic/angular';
+import { CloudObject, CloudQuery } from '../../lib/ncloud';
+import { UserDashboardPage } from './user-dashboard.page';
+import { IonicModule } from '@ionic/angular';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+@Component({
+  selector: 'app-upload-qualification',
+  templateUrl: 'upload-qualification.page.html',
+  styleUrls: ['upload-qualification.page.scss'],
+  standalone: true,
+  imports: [IonicModule, CommonModule, FormsModule]
+})
+export class UploadQualificationPage {
+  qualificationTypes = ['家政', '看护', '管道', '水电', '家教'];
+  selectedType = '';
+  certFile: File | null = null;
+  certTime = '';
+
+  constructor(
+    public router: Router, // 改为 public 以便模板访问
+    private modalCtrl: ModalController
+  ) {}
+
+  onFileChange(event: any) {
+    this.certFile = event.target.files[0];
+  }
+
+  async submitQualification() {
+    if (!this.selectedType || !this.certTime) {
+      alert('请选择资质类型并输入证书获取时间');
+      return;
+    }
+
+    const qualification = {
+      type: this.selectedType,
+      uploadTime: new Date().toISOString().split('T')[0],
+      certTime: this.certTime,
+      status: this.certFile ? '已通过' : '未上传' // 根据是否上传文件设置状态
+    };
+
+    try {
+      const qualObj = new CloudObject('Qualification');
+      await qualObj.set(qualification);
+      await qualObj.save();
+      
+      // 使用query重新获取最新数据
+      const query = new CloudQuery('Qualification');
+      const updatedQualifications = await query.find();
+      
+      // 传递整个更新后的列表
+      this.router.navigate(['/tabs/tab5/user-dashboard'], {
+        state: { qualifications: updatedQualifications }
+      });
+    } catch (error) {
+      console.error('保存失败:', error);
+      alert('提交失败,请重试');
+    }
+  }
+
+  goBack() {
+    this.router.navigate(['/tabs/tab5/user-dashboard']);
+  }
+}

+ 26 - 1
myapp/src/app/tab5/user-dashboard.page.html

@@ -19,4 +19,29 @@
     </ion-card-content>
   </ion-card>
 
-  <ion-button expand="block" (click)="goToEditProfile()">个人资料</ion-button>
+  <ion-button expand="block" (click)="goToEditProfile()">个人资料</ion-button>
+
+  <!-- 添加我的资质框 -->
+  <ion-card>
+    <ion-card-header>
+      <ion-card-title>我的资质</ion-card-title>
+    </ion-card-header>
+    <ion-card-content>
+      <ion-grid>
+        <ion-row class="ion-text-center ion-align-items-center">
+          <ion-col><strong>资质类型</strong></ion-col>
+          <ion-col><strong>上传时间</strong></ion-col>
+          <ion-col><strong>证书时间</strong></ion-col>
+          <ion-col><strong>状态</strong></ion-col>
+        </ion-row>
+        <ion-row *ngFor="let qual of qualification" class="ion-text-center ion-align-items-center">
+          <ion-col>{{qual.get('type')}}</ion-col>
+          <ion-col>{{qual.get('uploadTime')}}</ion-col>
+          <ion-col>{{qual.get('certTime')}}</ion-col>
+          <ion-col>{{qual.get('status') || '已通过'}}</ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-card-content>
+  </ion-card>
+
+<ion-button expand="block" (click)="goToUploadQualification()">上传资质</ion-button>

+ 17 - 1
myapp/src/app/tab5/user-dashboard.page.ts

@@ -1,5 +1,5 @@
 import { Component } from '@angular/core';
-import { CloudUser } from '../../lib/ncloud';
+import { CloudObject, CloudQuery, CloudUser } from '../../lib/ncloud';
 import { Router } from '@angular/router';
 import { IonicModule } from '@ionic/angular';
 import { CommonModule } from '@angular/common';
@@ -14,8 +14,12 @@ import { EditProfileComponent } from './edit-profile.component'; // 假设编辑
   standalone: true 
 })
 export class UserDashboardPage {
+ 
   user = new CloudUser();
   currentUser: any = null;
+     
+  // 修改为CloudObject数组类型
+  qualification: CloudObject[] = [];
 
   constructor(private router: Router, private modalCtrl: ModalController) {
     this.getCurrentUser();
@@ -23,6 +27,8 @@ export class UserDashboardPage {
 
   async getCurrentUser() {
     this.currentUser = await this.user.current();
+    const query = new CloudQuery('Qualification');
+    this.qualification = await query.find();
   }
 
   async logout() {
@@ -51,4 +57,14 @@ export class UserDashboardPage {
 
     return await modal.present();
   }
+
+  async ngOnInit() {
+    const query = new CloudQuery('Qualification');
+    this.qualification = await query.find();
+    console.log('从数据库加载的资质数据:', this.qualification); // 添加调试日志
+  }
+
+  goToUploadQualification() {
+    this.router.navigate(['/tabs/tab5/upload-qualification']);
+  }
 }

+ 8 - 0
myapp/src/lib/ncloud.ts

@@ -11,6 +11,10 @@ export class CloudObject {
     createdAt: any;
     updatedAt: any;
     data: Record<string, any> = {};
+    type: string | undefined;
+     uploadTime: string | undefined; 
+     certTime: string | undefined; 
+     status?: string | undefined; 
 
     constructor(className: string) {
         this.className = className;
@@ -89,6 +93,7 @@ export class CloudObject {
 export class CloudQuery {
     className: string;
     queryParams: Record<string, any> = { where: {} };
+  where: any;
 
     constructor(className: string) {
         this.className = className;
@@ -226,6 +231,9 @@ export class CloudQuery {
 
 // CloudUser.ts
 export class CloudUser extends CloudObject {
+    find(): any[] | PromiseLike<any[]> {
+      throw new Error('Method not implemented.');
+    }
     constructor() {
         super("_User"); // 假设用户类在Parse中是"_User"
         // 读取用户缓存信息