中化加油站项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
4.9 KiB

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { HttpClient } from '@angular/common/http';
import { NzModalRef } from 'ng-zorro-antd/modal';
@Component({
selector: 'app-forget',
templateUrl: './forget.component.html',
styleUrls: ['./forget.component.scss']
})
export class ForgetComponent implements OnInit {
validateForm!: FormGroup;
validateForm2!: FormGroup;
validateForm3!: FormGroup;
constructor(private fb: FormBuilder, private message: NzMessageService, private http: HttpClient, private modal: NzModalRef) { }
ngOnInit(): void {
this.validateForm = this.fb.group({
account: [null, [Validators.required]]
});
this.validateForm2 = this.fb.group({
code: [null, [Validators.required]]
});
const { password } = MyValidators;
this.validateForm3 = this.fb.group({
newpassword: [null, [Validators.required, password]],
affirmpassword: [null, [Validators.required, password]]
});
}
currentStep = 1
phoneNum: string
step1() {
console.log(this.validateForm)
if (this.validateForm.invalid) {
this.message.create('warning', '请填写完整');
} else {
this.http.get('/api/services/app/User/GetPhoneNumber', {
params: {
userName: this.validateForm.value.account
}
}).subscribe({
next: (data: any) => {
this.phoneNum = data.result
this.currentStep = 2
}
})
}
}
//发送验证码
codeCountDown = 0
code() {
let params = {
userName: this.validateForm.value.account,
}
this.http.post('/api/services/app/User/SendVerificationCode', null, { params: params }).subscribe({
next: (data: any) => {
this.message.create('success', '已发送');
//按钮倒计时
this.codeCountDown = 30
let codesetInterval = setInterval(() => {
this.codeCountDown = this.codeCountDown - 1
if (this.codeCountDown == 0) {
clearInterval(codesetInterval)
}
}, 1000);
}
})
}
step2() {
if (this.validateForm2.invalid) {
this.message.create('warning', '请填写完整');
} else {
console.log(this.validateForm.value.account)
let params = {
userName: this.validateForm.value.account,
code: this.validateForm2.value.code
}
this.http.get('/api/services/app/User/VerifyVerificationCode', { params: params }).subscribe({
next: (data: any) => {
this.currentStep = 3
}
})
}
}
step3() {
if (this.validateForm3.valid) {
let word = JSON.parse(JSON.stringify(this.validateForm3.value.newpassword)).toLowerCase()
if (this.validateForm3.value.newpassword != this.validateForm3.value.affirmpassword) {
this.message.create('warning', '两次密码输入不一致!');
return false
} if (word.indexOf('sino') != -1 || word.indexOf('zhonghua') != -1) {
this.message.create('warning', '口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符');
return false
} else {
let body = {
userName: this.validateForm.value.account,
code: this.validateForm2.value.code,
newPassword: this.validateForm3.value.newpassword,
}
this.http.post('/api/services/app/User/ChangePasswordBySms', body).subscribe(data => {
this.message.create('success', '修改成功!');
this.modal.close()
return true
}, err => {
return false
})
}
} else {
this.message.create('warning', '请填写完整!');
return false
}
}
}
export type MyErrorsOptions = { 'zh-cn': string; en: string } & Record<string, NzSafeAny>;
export type MyValidationErrors = Record<string, MyErrorsOptions>;
export class MyValidators extends Validators {
static password(control: AbstractControl): MyValidationErrors | null {
const value = control.value;
if (isEmptyInputValue(value)) {
return null;
}
return isPassword(value) ? null : { mobile: { 'zh-cn': `长度至少 8 位,必须包含大写字母、小写字母、数字、符号四种中的三种,且口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符`, en: `Password phone number is not valid` } };
}
}
function isEmptyInputValue(value: NzSafeAny): boolean {
return value == null || value.length === 0;
}
function isPassword(value: string): boolean {
return typeof value === 'string' && /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)(?!.*[sS][iI][nN][oO].*)(?!.*[zZ][hH][oO][nN][gG][hH][uU][aA].*)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,99}$/.test(value);
}