weaver_trunk_cli/pc4mobx/hrm/stores/secondaryVerify.js

524 lines
15 KiB
JavaScript
Raw Normal View History

2023-09-22 14:01:42 +08:00
import * as Api from '../apis/secondaryVerify';
import {
observable,
action,
} from 'mobx';
import {
WeaForm,
} from 'comsMobx';
import {
WeaMoreButton,
WeaLocaleProvider,
} from 'ecCom';
import {
message,
Button,
} from 'antd';
import {
fetch
} from '../util/py-util';
import {
RSAEcrypt
} from '../util/RSAUtil'
const getLabel = WeaLocaleProvider.getLabel;
export class HrmSecondaryVerify {
//*************************RSA********************************
//是否开启了RSA加密
@observable openRSA = "0";
//*************************SecondaryVerify********************************
@observable date = new Date().getTime();
@action setDate = () => {
this.date = new Date().getTime();
}
@observable secondaryVerify = {
isSetted: false,
loading: true,
}
isSettedSecondaryPwd = () => {
fetch({
Api,
name: 'isSettedSecondaryPwd',
logic: (cb) => {
const {
isSetted
} = cb;
this.secondaryVerify.loading = false;
this.secondaryVerify.isSetted = isSetted;
if (isSetted) {
this.mainDialog.isPassLoginPassword = true;
}
}
});
}
setSecondaryVerify = () => {
this.openDialog({
type: 'set'
});
}
modifySecondaryPass = () => {
this.openDialog({
type: 'modify'
});
}
//*************************MainDialog********************************
@observable mainDialog = {
visible: false,
title: '',
isPassLoginPassword: false,
}
getButtonName = () => {
const {
isPassLoginPassword
} = this.mainDialog;
let name;
if (!isPassLoginPassword) {
name = getLabel('504372', "下一步");
} else {
name = getLabel('504373', '保存');
}
return name;
}
getBtnCallback = () => {
const {
isPassLoginPassword
} = this.mainDialog;
if (!isPassLoginPassword) {
this.checkPassword()
} else {
this.saveSecondaryPassword();
}
}
checkPassword = () => {
const {
form
} = this.formInfo;
let RSAParam = {
password: form.getFormParams().password
}
RSAEcrypt(this.openRSA, RSAParam).then(RSAParam => {
form.validateForm().then(f => {
if (f.isValid) {
fetch({
Api,
name: 'checkPassword',
fetchParams: {
...form.getFormParams(),
password: RSAParam.password
},
logic: (cb) => {
const {
result
} = cb;
this.mainDialog.isPassLoginPassword = result;
if (result) {
this.setDialogTitle({
type: 'modify'
});
this.resetFormInfo();
this.getFormConditions();
} else {
form.showError('password', getLabel('504343', "登录密码错误"));
}
}
});
} else {
f.showErrors();
}
});
});
}
saveSecondaryPassword = () => {
const {
form,
passwordComplexity,
minpasslen,
isOldPwdPass,
isEqualToLoginPass,
} = this.formInfo, {
secondaryPwd1,
newSecondaryPwd1,
secondaryPwd2,
newSecondaryPwd2,
} = form.getFormParams();
const pwd1 = secondaryPwd1 || newSecondaryPwd1,
pwd2 = secondaryPwd2 || newSecondaryPwd2;
const key = secondaryPwd1 ? 'secondaryPwd1' : 'newSecondaryPwd1';
form.validateForm().then(f => {
if (f.isValid) {
2023-09-26 16:58:23 +08:00
if (newSecondaryPwd1 && !isOldPwdPass) {
form.showError('oldSecondaryPwd', getLabel('504374', "旧密码校验不通过!"));
return;
}
2023-09-22 14:01:42 +08:00
if (isEqualToLoginPass) {
form.showError(key, getLabel('504375', "二次验证密码不能和登录密码相同"));
return;
}
if (!this.isEqual(pwd1, pwd2)) {
form.showError(secondaryPwd2 ? 'secondaryPwd2' : 'newSecondaryPwd2', getLabel('504376', "密码确认不正确!"));
return;
}
if (['1','2','3'].includes(passwordComplexity) && !this.isPassRegExp(pwd1, passwordComplexity)) {
let msg;
if (passwordComplexity == '1') {
msg = getLabel('533396',"新密码不符合要求,必须包含字母大写、字母小写、数字!请重新输入!");
}
if (passwordComplexity == '2') {
msg = getLabel('533374',"新密码不符合要求,必须包含字母、数字、特殊字符!请重新输入!");
}
if (passwordComplexity == '3') {
msg = getLabel('533397', "新密码不符合要求,必须包含字母、数字!请重新输入!");
}
form.showError(key, msg);
return;
}
if (!this.isReachMinLen(pwd1, minpasslen)) {
form.showError(key, `${getLabel('504379', "密码长度不能小于")}${minpasslen}`);
return;
}
let RSAParam = {};
if (key === 'secondaryPwd1') {
RSAParam = {
secondaryPwd1:form.getFormParams().secondaryPwd1,
secondaryPwd2:form.getFormParams().secondaryPwd2
}
} else {
RSAParam = {
oldSecondaryPwd:form.getFormParams().oldSecondaryPwd,
newSecondaryPwd1:form.getFormParams().newSecondaryPwd1,
newSecondaryPwd2:form.getFormParams().newSecondaryPwd2
}
}
RSAEcrypt(this.openRSA,RSAParam).then(RSAParam=>{
fetch({
Api,
name: 'saveSecondaryPwd',
fetchParams: {
...form.getFormParams(),
...RSAParam
},
logic: (cb) => {
const {
sign
} = cb;
if (sign == '1') {
message.success(cb.message);
this.secondaryVerify.isSetted = true;
this.closeDialog();
} else {
message.warning(cb.message);
this.setDate();
}
}
});
});
} else {
f.showErrors();
}
});
}
isEqual = (secondaryPwd1, secondaryPwd2) => {
if (secondaryPwd1 !== secondaryPwd2) {
return false;
}
return true;
}
isPassRegExp = (secondaryPwd1, passwordComplexity) => {
let regExp;
let isPassRegExp = true;
if (passwordComplexity == '1') {
regExp = [/[a-z]+/, /[A-Z]+/, /\d+/];
} else if (passwordComplexity == '2') {
regExp = [/[a-zA-Z_]+/, /\W+/, /\d+/];
} else if (passwordComplexity == '3') {
regExp = [/[a-zA-Z_]+/, /\d+/];
}
regExp.map(reg => {
if (!reg.test(secondaryPwd1)) {
isPassRegExp = false;
}
});
return isPassRegExp;
}
isReachMinLen = (secondaryPwd1, minpasslen) => {
if (secondaryPwd1.length < minpasslen) {
return false;
}
return true;
}
get buttons() {
const {
loading
} = this.formInfo;
const buttons = [
(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@rkwxrl@1`} type="primary" disabled={loading} onClick={() => this.getBtnCallback()}>{this.getButtonName()}</Button>),
(<WeaMoreButton ecId={`${this && this.props && this.props.ecId || ''}_WeaMoreButton@r9exog@2`} datas={this.dropMenuDatas} />)
]
return buttons;
}
get style() {
const style = {
width: this.getWidth(),
height: this.getHeight()
}
return style
}
getWidth = () => {
const {
isPassLoginPassword
} = this.mainDialog;
let width;
if (!isPassLoginPassword) {
width = 600;
} else {
width = 650;
}
return width
}
getHeight = () => {
const {
isPassLoginPassword
} = this.mainDialog, {
c_len
} = this.formInfo;
let height;
if (!isPassLoginPassword) {
height = 90;
} else {
height = c_len === 4 ? 250 : 210;
}
return height;
}
get dropMenuDatas() {
const {
isPassLoginPassword
} = this.mainDialog, {
loading
} = this.formInfo;
let dropMenuDatas = [];
dropMenuDatas.push({
key: '0',
disabled: loading,
icon: this.getDropMenuIcon(isPassLoginPassword),
content: this.getDropMenuContent(isPassLoginPassword),
disabled: loading,
onClick: () => this.handleClick(isPassLoginPassword),
})
return dropMenuDatas;
}
getDropMenuIcon = (isPassLoginPassword) => {
let icon;
if (!isPassLoginPassword) {
icon = <i className='icon-coms-Right' />;
} else {
icon = <i className='icon-coms-Preservation' />;
}
return icon;
}
getDropMenuContent = (isPassLoginPassword) => {
let name;
if (!isPassLoginPassword) {
name = getLabel('504372', "下一步");
} else {
name = getLabel('504373', '保存');
}
return name;
}
handleClick = (isPassLoginPassword) => {
if (!isPassLoginPassword) {
this.checkPassword()
} else {
this.saveSecondaryPassword()
}
}
@action
openDialog = (params) => {
this.setDialogTitle(params);
this.mainDialog.visible = true;
}
@action
setDialogTitle = (params) => {
const {
type
} = params;
if (type == 'set') {
this.mainDialog.title = getLabel('504331', "请先输入登录密码")
}
if (type == 'modify') {
this.mainDialog.title = getLabel('504332', "二次验证密码设置")
}
}
@action
closeDialog = () => {
this.mainDialog.visible = false;
if (!this.secondaryVerify.isSetted) {
this.mainDialog.isPassLoginPassword = false;
}
this.setDate();
}
//*************************MainDialog********************************
@observable formInfo = {
conditions: [],
form: new WeaForm(),
loading: true,
isOldPwdPass: false,
isEqualToLoginPass: true,
c_len: 1,
}
getFormConditions = () => {
const {
isPassLoginPassword
} = this.mainDialog;
fetch({
Api,
name: !isPassLoginPassword ? 'getPasswordForm' : 'getSecondaryPwdForm',
logic: (cb) => {
const {
conditions,
minpasslen,
openRSA
} = cb;
if (openRSA !== undefined) {
this.openRSA = openRSA;
}
if (minpasslen !== undefined) {
['minpasslen', 'passwordComplexity', 'title'].map(v => {
this.formInfo[v] = cb[v]
});
}
this.handleConditions(conditions);
this.formInfo.c_len = conditions[0].items.length;
this.formInfo.conditions = conditions;
this.formInfo.form.initFormFields(conditions);
this.formInfo.loading = false;
}
});
}
handleConditions = (conditions) => {
const {
passwordComplexity,
title
} = this.formInfo;
conditions.map(c => {
c.items.map(item => {
const key = item.domkey[0];
if (key !== 'validatecode')
item.otherParams = {
type: 'password'
}
if (['secondaryPwd1', 'newSecondaryPwd1'].includes(key)) {
item.otherParams = Object.assign(item.otherParams, {
tip: title,
passwordStrength: true,
});
}
});
});
}
verifyPassword = (params) => {
const {
form
} = this.formInfo, {
cb,
key
} = params;
let RSAParam = {
password: cb
}
RSAEcrypt(this.openRSA,RSAParam).then(RSAParam =>{
fetch({
Api,
name: (key == 'oldSecondaryPwd') ? 'checkOldSecondaryPwd' : 'checkNewSecondaryPwd',
fetchParams: {
[key]: RSAParam.password
},
logic: (cb) => {
const {
result
} = cb;
if (key == 'oldSecondaryPwd') {
this.formInfo.isOldPwdPass = result;
} else {
this.formInfo.isEqualToLoginPass = !result;
}
const msg = (key == 'oldSecondaryPwd') ? getLabel('504374', "旧密码校验不通过!") : getLabel('504375', "二次验证密码不能和登录密码相同");
if (!result) {
form.showError(key, msg);
}
}
});
});
}
resetFormInfo = () => {
this.formInfo.conditions = [];
this.formInfo.form = new WeaForm();
this.formInfo.loading = true;
}
resetSecondaryVerify = () => {
this.mainDialog.isPassLoginPassword = false;
}
}