modal-user-login.component.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { Component } from '@angular/core';
  2. import { IonContent, IonHeader, IonToolbar, IonTitle, IonButtons, IonButton,
  3. IonItem, IonLabel, IonInput, IonSegment, IonSegmentButton,
  4. IonCard, IonCardHeader, IonCardTitle, IonCardSubtitle,
  5. IonCardContent } from '@ionic/angular/standalone';
  6. import { ModalController, AlertController } from '@ionic/angular/standalone';
  7. import { FormsModule } from '@angular/forms';
  8. import { CommonModule } from '@angular/common';
  9. import { CloudUser } from '../../ncloud';
  10. import * as Parse from 'parse';
  11. @Component({
  12. selector: 'app-modal-user-login',
  13. templateUrl: './modal-user-login.component.html',
  14. styleUrls: ['./modal-user-login.component.scss'],
  15. standalone: true,
  16. imports: [
  17. CommonModule,
  18. FormsModule,
  19. IonContent,
  20. IonHeader,
  21. IonToolbar,
  22. IonTitle,
  23. IonButtons,
  24. IonButton,
  25. IonItem,
  26. IonLabel,
  27. IonInput,
  28. IonSegment,
  29. IonSegmentButton,
  30. IonCard,
  31. IonCardHeader,
  32. IonCardTitle,
  33. IonCardSubtitle,
  34. IonCardContent
  35. ]
  36. })
  37. export class ModalUserLoginComponent {
  38. username: string = '';
  39. password: string = '';
  40. password2: string = '';
  41. type: 'login' | 'signup' = 'login';
  42. constructor(
  43. private modalCtrl: ModalController,
  44. private alertController: AlertController
  45. ) {}
  46. typeChange(event: any) {
  47. this.type = event.detail.value;
  48. }
  49. usernameChange(event: any) {
  50. this.username = event.detail.value;
  51. }
  52. passwordChange(event: any) {
  53. this.password = event.detail.value;
  54. }
  55. password2Change(event: any) {
  56. this.password2 = event.detail.value;
  57. }
  58. async login() {
  59. if (!this.username || !this.password) {
  60. await this.showAlert('提示', '请输入完整的用户名和密码');
  61. return;
  62. }
  63. try {
  64. const user = await Parse.User.logIn(this.username, this.password);
  65. if (user) {
  66. await Parse.User.become(user.getSessionToken());
  67. const cloudUser = new CloudUser();
  68. cloudUser.setParseObject(user);
  69. this.modalCtrl.dismiss(cloudUser, "confirm");
  70. } else {
  71. await this.showAlert('登录失败', '用户名或密码错误');
  72. }
  73. } catch (error) {
  74. console.error("Login error:", error);
  75. await this.showAlert('错误', '登录过程中发生错误,请稍后重试');
  76. }
  77. }
  78. async signup() {
  79. if (!this.username || !this.password || !this.password2) {
  80. await this.showAlert('提示', '请输入完整信息');
  81. return;
  82. }
  83. if (this.password !== this.password2) {
  84. await this.showAlert('提示', '两次输入的密码不一致');
  85. return;
  86. }
  87. try {
  88. const user = new Parse.User();
  89. user.set("username", this.username);
  90. user.set("password", this.password);
  91. await user.signUp();
  92. const cloudUser = new CloudUser();
  93. cloudUser.setParseObject(user);
  94. this.modalCtrl.dismiss(cloudUser, "confirm");
  95. } catch (error) {
  96. console.error("Signup error:", error);
  97. await this.showAlert('错误', '注册失败,请稍后重试');
  98. }
  99. }
  100. private async showAlert(header: string, message: string) {
  101. const alert = await this.alertController.create({
  102. header,
  103. message,
  104. buttons: ['确定']
  105. });
  106. await alert.present();
  107. }
  108. }
  109. // 导出打开模态框的函数
  110. export async function openUserLoginModal(modalController: ModalController) {
  111. const modal = await modalController.create({
  112. component: ModalUserLoginComponent
  113. });
  114. await modal.present();
  115. return modal.onDidDismiss();
  116. }