fmode 17 цаг өмнө
parent
commit
8302d4d084

+ 10 - 9
src/app/tab4/tab4.page.html

@@ -1,22 +1,23 @@
 <ion-header>
   <ion-toolbar>
     <ion-buttons slot="start">
-      <ion-avatar class="header-avatar">
+      <ion-avatar class="header-avatar" (click)="showLoginAlert()">
         <ion-icon name="person" class="avatar-icon"></ion-icon>
       </ion-avatar>
     </ion-buttons>
 
-    <div class="header-user-info">
-      <div class="username">直率的_Keepereza8</div>
-      <div class="user-stats">
+    <div class="header-user-info" (click)="showLoginAlert()">
+      <div class="username">{{ username }}</div>
+      <div class="user-stats" *ngIf="isLoggedIn">
         <span>关注0</span> | <span>粉丝0</span> | <span>加油0</span>
         <div class="secondary-stats">4 0 - ¥0 - ¥0</div>
       </div>
+      <div *ngIf="!isLoggedIn">点击登录</div>
     </div>
 
     <ion-buttons slot="end">
       <ion-badge color="danger" class="challenge-badge">新挑战 2025.04</ion-badge>
-      <ion-button fill="clear" class="settings-btn">
+      <ion-button fill="clear" class="settings-btn" *ngIf="isLoggedIn" (click)="logout()">
         <ion-icon slot="icon-only" name="settings"></ion-icon>
       </ion-button>
     </ion-buttons>
@@ -30,7 +31,7 @@
       <ion-card-title>
         <span class="warning-text">
           <ion-icon name="cloud-upload"></ion-icon>
-          待上传 
+          待上传
         </span>
       </ion-card-title>
     </ion-card-header>
@@ -71,13 +72,13 @@
         <span class="vip-action">立即开通 <ion-icon [name]="vipPanelOpen ? 'chevron-down' : 'chevron-forward'"></ion-icon></span>
       </ion-card-title>
     </ion-card-header>
-    
+
     <ion-card-content *ngIf="vipPanelOpen">
       <div class="vip-item">
         <ion-icon name="calendar"></ion-icon> 7天瑜伽打卡计划 <ion-icon name="chevron-forward"></ion-icon>
       </div>
       <div class="vip-promo">
-        <ion-icon name="alarm"></ion-icon> 会员大促最后 
+        <ion-icon name="alarm"></ion-icon> 会员大促最后
         <span class="countdown">23:59:59</span>
         <ion-icon name="chevron-down"></ion-icon>
       </div>
@@ -138,4 +139,4 @@
       </ion-fab-list>
     </ion-fab>
   </div> -->
-</ion-content>
+</ion-content>

+ 127 - 28
src/app/tab4/tab4.page.ts

@@ -1,13 +1,13 @@
 import { Component } from '@angular/core';
-import { IonicModule } from '@ionic/angular';
+import { IonicModule,AlertController } from '@ionic/angular';
 import { CommonModule } from '@angular/common';
 import { FormsModule } from '@angular/forms';
 import { addIcons } from 'ionicons';
-import { 
-  chevronBack, 
-  settings, 
-  cloudUpload, 
-  chevronForward, 
+import {
+  chevronBack,
+  settings,
+  cloudUpload,
+  chevronForward,
   statsChart,
   diamond,
   calendar,
@@ -21,8 +21,10 @@ import {
   add,
   barbell,
   restaurant,
-  shareSocial
+  shareSocial,
+  person
 } from 'ionicons/icons';
+import { CloudUser } from 'src/lib/ncloud';
 
 @Component({
   selector: 'app-tab4',
@@ -33,31 +35,128 @@ import {
 })
 export class Tab4Page {
   vipPanelOpen = false;
+  currentUser: CloudUser | null = null;
+  isLoggedIn = false;
+  username = '请登录';
 
-  constructor() {
-    // 注册所有需要的图标
+  constructor(private alertCtrl: AlertController) {
     addIcons({
-      chevronBack, 
-      settings, 
-      cloudUpload, 
-      chevronForward, 
-      statsChart,
-      diamond,
-      calendar,
-      alarm,
-      star,
-      videocam,
-      trophy,
-      nutrition,
-      wallet,
-      gift,
-      add,
-      barbell,
-      restaurant,
-      shareSocial
+      settings, cloudUpload, chevronForward, statsChart,
+      diamond, calendar, alarm, star, videocam, trophy,
+      nutrition, wallet, gift, person
     });
+    this.checkLoginStatus();
   }
 
+  async checkLoginStatus() {
+    this.currentUser = new CloudUser();
+    const user = await this.currentUser.current();
+    if (user && user.id) {
+      this.isLoggedIn = true;
+      this.username = user.get('username') || '用户';
+    } else {
+      this.isLoggedIn = false;
+      this.username = '请登录';
+    }
+  }
+
+  async showLoginAlert() {
+    if (this.isLoggedIn) return;
+
+    const alert = await this.alertCtrl.create({
+      header: '登录',
+      inputs: [
+        {
+          name: 'username',
+          type: 'text',
+          placeholder: '用户名'
+        },
+        {
+          name: 'password',
+          type: 'password',
+          placeholder: '密码'
+        }
+      ],
+      buttons: [
+        {
+          text: '取消',
+          role: 'cancel'
+        },
+        {
+          text: '登录',
+          handler: async (data:any) => {
+            if (!data.username || !data.password) {
+              return false; // 阻止关闭
+            }
+            await this.handleLogin(data.username, data.password);
+            return true;
+          }
+        },
+        {
+          text: '注册',
+          handler: async (data:any) => {
+            if (!data.username || !data.password) {
+              return false; // 阻止关闭
+            }
+            await this.handleSignUp(data.username, data.password);
+            return true;
+          }
+        }
+      ]
+    });
+
+    await alert.present();
+  }
+
+  async handleLogin(username: string, password: string) {
+    const user = new CloudUser();
+    try {
+      await user.login(username, password);
+      if (user.id) {
+        this.isLoggedIn = true;
+        this.username = username;
+      } else {
+        this.showErrorAlert('登录失败');
+      }
+    } catch (error) {
+      this.showErrorAlert('登录错误: ' + (error instanceof Error ? error.message : '未知错误'));
+    }
+  }
+
+  async handleSignUp(username: string, password: string) {
+    const user = new CloudUser();
+    try {
+      await user.signUp(username, password);
+      if (user.id) {
+        this.isLoggedIn = true;
+        this.username = username;
+      } else {
+        this.showErrorAlert('注册失败');
+      }
+    } catch (error) {
+      this.showErrorAlert('注册错误: ' + (error instanceof Error ? error.message : '未知错误'));
+    }
+  }
+
+  async showErrorAlert(message: string) {
+    const alert = await this.alertCtrl.create({
+      header: '错误',
+      message: message,
+      buttons: ['确定']
+    });
+    await alert.present();
+  }
+
+  async logout() {
+    if (!this.isLoggedIn) return;
+
+    const user = new CloudUser();
+    await user.logout();
+    this.isLoggedIn = false;
+    this.username = '请登录';
+  }
+
+
   // 顶部栏操作
   goBack() {
     console.log('返回上一页');
@@ -114,4 +213,4 @@ export class Tab4Page {
   shareMoment() {
     console.log('分享动态');
   }
-}
+}