|
@@ -0,0 +1,348 @@
|
|
|
+import { Component, OnInit, ViewChild } from '@angular/core';
|
|
|
+import { AuthService } from '../../../services/auth.service';
|
|
|
+import * as Parse from 'parse';
|
|
|
+import { ActivatedRoute } from '@angular/router';
|
|
|
+import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
|
+import { catchError } from 'rxjs/operators';
|
|
|
+import { AgreementComponent } from '.././agreement/agreement.component';
|
|
|
+
|
|
|
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
|
+import { CommonModule } from '@angular/common';
|
|
|
+import {
|
|
|
+ ionicStandaloneModules,
|
|
|
+ AlertController,
|
|
|
+ ToastController,
|
|
|
+ ModalController,
|
|
|
+ // LoadingController,
|
|
|
+} from '../../ionic-standalone.modules';
|
|
|
+import { Platform } from '@ionic/angular';
|
|
|
+
|
|
|
+@Component({
|
|
|
+ selector: 'app-invite',
|
|
|
+ templateUrl: './invite.component.html',
|
|
|
+ styleUrls: ['./invite.component.scss'],
|
|
|
+ standalone: true,
|
|
|
+ imports: [
|
|
|
+ CommonModule,
|
|
|
+ FormsModule,
|
|
|
+ ReactiveFormsModule,
|
|
|
+ ...ionicStandaloneModules,
|
|
|
+ ],
|
|
|
+})
|
|
|
+export class InviteComponent implements OnInit {
|
|
|
+ constructor(
|
|
|
+ private toastController: ToastController,
|
|
|
+ public authServ: AuthService,
|
|
|
+ // private router: Router,
|
|
|
+ private activatedRoute: ActivatedRoute,
|
|
|
+ private http: HttpClient,
|
|
|
+ private modalCtrl: ModalController,
|
|
|
+ private alertController: AlertController,
|
|
|
+ // private loadingCtrl: LoadingController
|
|
|
+ private platform: Platform
|
|
|
+ ) {
|
|
|
+ this.company = authServ.company;
|
|
|
+ }
|
|
|
+ inviteUser?:Parse.Object
|
|
|
+ company: string = '';
|
|
|
+ inputType: string = 'password';
|
|
|
+ // 注册
|
|
|
+ agreement: boolean = false;
|
|
|
+ registerAgreement: any;
|
|
|
+ registerInfo: any = {
|
|
|
+ mobile: '',
|
|
|
+ code: '',
|
|
|
+ password: '',
|
|
|
+ confirmPassword: '',
|
|
|
+ invite: '',
|
|
|
+ };
|
|
|
+ isRegister: boolean = false; //是否注册成功
|
|
|
+ app:Parse.Object
|
|
|
+ ngOnInit() {
|
|
|
+ if (this.platform.is('hybrid')) {
|
|
|
+ this.authServ.logout();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let invite = localStorage.getItem('invite');
|
|
|
+ console.log('invite:', invite);
|
|
|
+ if (invite) this.registerInfo.invite = invite;
|
|
|
+ this.activatedRoute.paramMap.subscribe(async (param) => {
|
|
|
+ if (invite) {
|
|
|
+ let query = new Parse.Query('User');
|
|
|
+ query.equalTo('invite', invite);
|
|
|
+ query.select('mobile', 'username', 'nickname');
|
|
|
+ this.inviteUser = await query.first();
|
|
|
+ }
|
|
|
+ localStorage.setItem('APP_DEFAULT_COMPANY', 'Qje9D4bqol');
|
|
|
+ localStorage.setItem('company', this.company);
|
|
|
+ if (this.company) {
|
|
|
+ let App = new Parse.Query('App');
|
|
|
+ App.equalTo('company', this.company);
|
|
|
+ this.app = await App.first();
|
|
|
+ }
|
|
|
+ this.getAgreement();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取验证码
|
|
|
+ wait: number = 60;
|
|
|
+ waitStatus: boolean = false;
|
|
|
+ time() {
|
|
|
+ if (this.wait == 0) {
|
|
|
+ this.waitStatus = false;
|
|
|
+ this.wait = 60;
|
|
|
+ } else {
|
|
|
+ this.waitStatus = true;
|
|
|
+ this.wait--;
|
|
|
+ setTimeout(() => {
|
|
|
+ this.time();
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取验证码
|
|
|
+ vcode: string = '';
|
|
|
+ mobile: string = '';
|
|
|
+ loginToken: string = '';
|
|
|
+ timer: boolean = false;
|
|
|
+ async sendVerifyCode(mobile: string) {
|
|
|
+ if (this.timer) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.timer = true;
|
|
|
+ let a = /^1[3456789]\d{9}$/;
|
|
|
+ if (mobile == undefined || !String(mobile).match(a)) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '请填写正确手机号',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ this.timer = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.http
|
|
|
+ .post('https://server.fmode.cn/api/apig/message', {
|
|
|
+ company: this.company,
|
|
|
+ mobile: mobile,
|
|
|
+ })
|
|
|
+ .subscribe((res: any) => {
|
|
|
+ this.waitStatus = true;
|
|
|
+ this.time();
|
|
|
+ this.vcode = res.data.code;
|
|
|
+ this.timer = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ togglePassword() {
|
|
|
+ if (this.inputType == 'password') {
|
|
|
+ this.inputType = 'text';
|
|
|
+ } else {
|
|
|
+ this.inputType = 'password';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 注册账号
|
|
|
+ agree() {
|
|
|
+ this.agreement = !this.agreement;
|
|
|
+ }
|
|
|
+ getAgreement() {
|
|
|
+ let Agreement = new Parse.Query('ContractAgreement');
|
|
|
+ Agreement.equalTo('company', this.company);
|
|
|
+ Agreement.equalTo('type', 'register');
|
|
|
+ Agreement.first().then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ this.registerAgreement = res;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ async showAgreement() {
|
|
|
+ const modal = await this.modalCtrl.create({
|
|
|
+ component: AgreementComponent,
|
|
|
+ cssClass: 'my-custom-class',
|
|
|
+ componentProps: {
|
|
|
+ agreement: this.registerAgreement,
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return await modal.present();
|
|
|
+ }
|
|
|
+ async registerUser() {
|
|
|
+ let a = /^1[3456789]\d{9}$/;
|
|
|
+ if (
|
|
|
+ this.registerInfo.mobile == undefined ||
|
|
|
+ !String(this.registerInfo.mobile).match(a)
|
|
|
+ ) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '请填写正确的手机号',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (this.registerInfo.code == undefined || this.registerInfo.code == '') {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '请输入验证码',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ this.registerInfo.password == undefined ||
|
|
|
+ this.registerInfo.password.trim() == ''
|
|
|
+ ) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '请输入密码',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ this.registerInfo.password.length < 6 ||
|
|
|
+ this.registerInfo.password.length.length > 20
|
|
|
+ ) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '密码长度不得小于6位或大于20位',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ this.registerInfo.confirmPassword == undefined ||
|
|
|
+ this.registerInfo.confirmPassword.trim() == ''
|
|
|
+ ) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '请确认密码',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ this.registerInfo.password.trim() !=
|
|
|
+ this.registerInfo.confirmPassword.trim()
|
|
|
+ ) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: '两次输入密码不一致',
|
|
|
+ color: 'warning',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.agreement) {
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ cssClass: 'my-custom-class',
|
|
|
+ header: '提示',
|
|
|
+ message: `请先勾选${this.registerAgreement?.get('title')}`,
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '取消',
|
|
|
+ role: 'cancel',
|
|
|
+ cssClass: 'secondary',
|
|
|
+ handler: (blah) => {
|
|
|
+ console.log('Confirm Cancel: blah');
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: '同意',
|
|
|
+ handler: () => {
|
|
|
+ this.agreement = true;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ });
|
|
|
+ await alert.present();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let data = this.registerInfo.invite
|
|
|
+ ? {
|
|
|
+ company: this.company,
|
|
|
+ code: this.registerInfo.code,
|
|
|
+ mobile: this.registerInfo.mobile,
|
|
|
+ password: this.registerInfo.password,
|
|
|
+ invite: this.registerInfo.invite,
|
|
|
+ }
|
|
|
+ : {
|
|
|
+ company: this.company,
|
|
|
+ code: this.registerInfo.code,
|
|
|
+ mobile: this.registerInfo.mobile,
|
|
|
+ password: this.registerInfo.password,
|
|
|
+ };
|
|
|
+ this.http
|
|
|
+ .post(`https://server.fmode.cn/api/auth/register`, data)
|
|
|
+ .pipe(
|
|
|
+ catchError(async (e) => {
|
|
|
+ // 显示报错
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: e.message,
|
|
|
+ color: 'danger',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ console.log(e);
|
|
|
+ return;
|
|
|
+ })
|
|
|
+ )
|
|
|
+ .subscribe(async (res: any) => {
|
|
|
+ console.log(res);
|
|
|
+ if (res && res.code == 200) {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ message: res.msg,
|
|
|
+ color: 'success',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ cssClass: 'my-custom-class',
|
|
|
+ header: '注册成功',
|
|
|
+ message: `恭喜你,注册成功`,
|
|
|
+ backdropDismiss: false,
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '确认',
|
|
|
+ handler: () => {
|
|
|
+ this.registerInfo = {
|
|
|
+ mobile: '',
|
|
|
+ code: '',
|
|
|
+ password: '',
|
|
|
+ confirmPassword: '',
|
|
|
+ invite: '',
|
|
|
+ };
|
|
|
+ this.isRegister = true
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ });
|
|
|
+ await alert.present();
|
|
|
+ } else {
|
|
|
+ const toast = await this.toastController.create({
|
|
|
+ // 接口返回的错误,提示用户
|
|
|
+ message: res.mess,
|
|
|
+ color: 'danger',
|
|
|
+ duration: 1000,
|
|
|
+ });
|
|
|
+ toast.present();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ downImg(url:string) {
|
|
|
+ let dlLink: any = document.createElement('a');
|
|
|
+ if ('download' in dlLink) {
|
|
|
+ dlLink.style.visibility = 'hidden';
|
|
|
+ dlLink.href = url;
|
|
|
+ dlLink.download = 'hey聊';
|
|
|
+ document.body.appendChild(dlLink);
|
|
|
+ dlLink.click();
|
|
|
+ document.body.removeChild(dlLink);
|
|
|
+ } else {
|
|
|
+ location.href = url;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|