From 981682844c186e2608ac5f06d71a223bec02631f Mon Sep 17 00:00:00 2001 From: SHAOJIAHAO <55341701@qq.com> Date: Thu, 5 Jan 2023 17:16:06 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=AE=8C=E5=96=84]=E5=BF=98=E8=AE=B0=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E7=9F=AD=E4=BF=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../change-password.component.ts | 4 +- src/app/pages/home/home.component.ts | 15 ++-- .../pages/login/forget/forget.component.html | 10 +-- .../pages/login/forget/forget.component.ts | 82 +++++++++++++++---- src/app/pages/login/login.component.ts | 18 ++-- 5 files changed, 86 insertions(+), 43 deletions(-) diff --git a/src/app/pages/change-password/change-password.component.ts b/src/app/pages/change-password/change-password.component.ts index 62d64b3..7eae4fb 100644 --- a/src/app/pages/change-password/change-password.component.ts +++ b/src/app/pages/change-password/change-password.component.ts @@ -33,7 +33,7 @@ export class MyValidators extends Validators { return null; } - return isPassword(value) ? null : { mobile: { 'zh-cn': `长度 12 位以上,包含①大写字母、②小写字母、③数字、④特殊字符四种中的三种组合`, en: `Password phone number is not valid` } }; + return isPassword(value) ? null : { mobile: { 'zh-cn': `长度至少 8 位,必须包含大写字母、小写字母、数字、符号四种中的三种,且口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符`, en: `Password phone number is not valid` } }; } } @@ -41,5 +41,5 @@ 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_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{12,99}$/.test(value); + 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); } diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts index b47ae15..ff44efa 100644 --- a/src/app/pages/home/home.component.ts +++ b/src/app/pages/home/home.component.ts @@ -503,13 +503,12 @@ export class HomeComponent implements OnInit { } } } - // this.router.navigate([this.menuList2[0].url]) - if (this.menuList2[0].url) { - window.open(this.menuList2[0].url) - } else { + if (this.menuList2.length == 0) { this.message.create('warning', '未分配系统管理菜单'); + return + } else { + window.open(this.menuList2[0].url) } - } goback() { this.router.navigate(['/plan']) @@ -568,10 +567,14 @@ export class HomeComponent implements OnInit { nzComponentParams: {}, nzOnOk: async () => { if (instance.validateForm.valid) { + let word = JSON.parse(JSON.stringify(instance.validateForm.value.newpassword)).toLowerCase() if (instance.validateForm.value.newpassword != instance.validateForm.value.affirmpassword) { this.message.create('warning', '两次密码输入不一致!'); return false - } else { + } if (word.indexOf('sino') != -1 || word.indexOf('zhonghua') != -1) { + this.message.create('warning', '口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符'); + return false + } else { await new Promise((resolve, reject) => { let body = { currentPassword: instance.validateForm.value.oldpassword, diff --git a/src/app/pages/login/forget/forget.component.html b/src/app/pages/login/forget/forget.component.html index ef2d29f..de98eb1 100644 --- a/src/app/pages/login/forget/forget.component.html +++ b/src/app/pages/login/forget/forget.component.html @@ -14,7 +14,8 @@
- 该账号绑定的手机号为:13864340193 + 该账号绑定的手机号为:{{phoneNum}}
@@ -30,13 +31,6 @@
- - - - - - diff --git a/src/app/pages/login/forget/forget.component.ts b/src/app/pages/login/forget/forget.component.ts index 16379c0..c8bba61 100644 --- a/src/app/pages/login/forget/forget.component.ts +++ b/src/app/pages/login/forget/forget.component.ts @@ -3,6 +3,7 @@ import { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/fo 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', @@ -12,7 +13,7 @@ export class ForgetComponent implements OnInit { validateForm!: FormGroup; validateForm2!: FormGroup; validateForm3!: FormGroup; - constructor(private fb: FormBuilder, private message: NzMessageService, private http: HttpClient) { } + constructor(private fb: FormBuilder, private message: NzMessageService, private http: HttpClient, private modal: NzModalRef) { } ngOnInit(): void { this.validateForm = this.fb.group({ @@ -23,47 +24,92 @@ export class ForgetComponent implements OnInit { }); const { password } = MyValidators; this.validateForm3 = this.fb.group({ - oldpassword: [null, [Validators.required]], 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.currentStep = 2 + 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 { - this.currentStep = 3 + 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 = { - // currentPassword: this.validateForm3.value.oldpassword, - // newPassword: this.validateForm3.value.newpassword - // } - // this.http.post('/api/services/app/User/ChangePassword', body).subscribe(data => { - - // this.message.create('success', '修改成功!'); - // return true - // }, err => { - // this.message.create('warning', err.error.error.message); - // return false - // }) + 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 + }) } @@ -86,7 +132,7 @@ export class MyValidators extends Validators { return null; } - return isPassword(value) ? null : { mobile: { 'zh-cn': `长度 12 位以上,包含①大写字母、②小写字母、③数字、④特殊字符四种中的三种组合`, en: `Password phone number is not valid` } }; + return isPassword(value) ? null : { mobile: { 'zh-cn': `长度至少 8 位,必须包含大写字母、小写字母、数字、符号四种中的三种,且口令禁止包含 sinochem、sino、zhonghua (含大小写变体) 等中国中化相关字符`, en: `Password phone number is not valid` } }; } } @@ -94,5 +140,5 @@ 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_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{12,99}$/.test(value); + 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); } diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts index 8f8d9e4..4843eed 100644 --- a/src/app/pages/login/login.component.ts +++ b/src/app/pages/login/login.component.ts @@ -236,15 +236,15 @@ export class LoginComponent implements OnInit { return menuList } forget() { - this.message.create('warning', `请联系管理员`); - // this.modal.create({ - // nzTitle: '忘记密码', - // nzContent: ForgetComponent, - // nzViewContainerRef: this.viewContainerRef, - // nzWidth: 288, - // nzComponentParams: {}, - // nzFooter: null - // }); + // this.message.create('warning', `请联系管理员`); + this.modal.create({ + nzTitle: '忘记密码', + nzContent: ForgetComponent, + nzViewContainerRef: this.viewContainerRef, + nzWidth: 288, + nzComponentParams: {}, + nzFooter: null + }); } }