weaver_trunk_cli/pc4mobx/hrm/stores/secondaryVerifyCom.js

264 lines
6.8 KiB
JavaScript

import {
observable,
action,
computed
} from 'mobx';
import {
WeaSwitch,
WeaTools
} from 'comsMobx';
import {
WeaLocaleProvider,
} from 'ecCom';
import {
Button,
message
} from 'antd';
import * as api from '../apis/secondaryVerify';
import HrmBaseStore from './baseStore';
import {
i18n
} from '../public/i18n';
import Resend from '../components/secondaryVerifyCom/Resend';
import {addContentPath} from '../util/index.js'
const getLabel = WeaLocaleProvider.getLabel;
export class HrmSecondaryVerifyCom extends HrmBaseStore {
/********************* unobservable list *********************/
dialogId;
secondAuthType;
verifyType;//10: 动态密码 20: 动态令牌 30: 二次密码密码 40: CA扫码登录
checkCAAuthTimer;
loginkey;
get topBtnAndMenu(){
let btns = [
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@dbq9d7@1`} type='primary' op='save' onClick={this.doSecondAuth}>{i18n.button.ok()}</Button>,
];
// let menus = [];
// btns.map((btn, index) => {
// const {
// props
// } = btn;
// menus.push({
// key: index.toString(),
// content: props.children,
// icon: <i className={this.menuIconCollection[props.op]}/>,
// onClick: props.onClick
// });
// })
return {
btns,
// menus: [...menus, ...this.getBasicMenus()]
}
}
t = -1;
get notSetSecondary(){
let label = getLabel('514970','您还未设置二次验证密码,点击{param}');
label = label.replace('{param}', `<a href=${addContentPath('/wui/index.html#/main/hrm/password?tabKey=2')} target='_blank'>${getLabel('30747','设置')}</a>`);
return label;
}
itemRender = {
authCode: (field, textAreaProps, form, formParams) => {
return (
<div>
{
this.verifyType != 40 &&
<div style={{width: 300}}>
<div style={{float: 'left', width: 200}}>
<WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@6zstuu`} fieldConfig={{...field, ...textAreaProps}}
form={form} formParams={formParams} />
</div>
{
this.verifyType == 10 &&
<Resend ecId={`${this && this.props && this.props.ecId || ''}_Resend@dvoaed`} store={this} />
}
</div>
}
{
this.verifyType == 30 && this.notSetting &&
<div style={{clear: 'both', paddingTop: 10}} dangerouslySetInnerHTML={{__html: this.notSetSecondary}}>
{/* 您还未设置二次验证密码,点击<a href='/wui/index.html#/main/hrm/password?tabKey=2' target='_blank'>设置</a> */}
</div>
}
</div>
)
}
}
childrenComponents = {
// authCode: () => {
// return [
// {
// com: <div className="times">123123</div>,
// col: 1
// }
// ];
// }
};
/********************* unobservable list *********************/
/********************* dialog info setting *********************/
/********************* dialog info setting *********************/
/********************* observable list *********************/
@observable spinning = false;
@observable sendBtnLabel = '';
@observable showTimeout = false;
@observable notSetting = false;
@observable _qrCode = {};
@computed get qrCode(){
return this.toJS(this._qrCode);
}
set qrCode(qrCode){
this._qrCode = qrCode;
}
/********************* observable list *********************/
/********************* computed list *********************/
/********************* computed list *********************/
/********************* action list *********************/
@action init = (dialogId, authType) => {
this.dialogId = dialogId;
authType && this.getSecondAuthForm(authType);
}
//是否在免密时间内
@action getSecondAuthFreeTime = () => {
api.getSecondAuthFreeTime().then(data => {
console && console.debug('getSecondAuthFreeTime', data);
});
}
//获取二次验证表单
@action getSecondAuthForm = authType => {
if(this.spinning)
return;
this.spinning = true;
api.getSecondAuthForm({secondAuthType: authType}).then(data => {
if(data.status == '1'){
this.verifyType = data.authType;
if(this.verifyType == -1){
}else if(this.verifyType != 40){
const fields = [{title: '', defaultshow: true, items: data.conditions}];
this.setFormData('verifyForm', fields);
if(this.verifyType == 10){
this.getSecDynamicPassword(true);
}
this.notSetting = data.notSetting || false;
}else{
this.qrCode = data.qrcode;
this.loginkey = data.loginkey;
this.startCheckCAAuthTimer();
}
}else{
message.error(data.message);
}
this.spinning = false;
});
}
@action startCheckCAAuthTimer = () => {
this.checkCAAuthTimer && clearInterval(this.checkCAAuthTimer);
this.checkCAAuthTimer = setInterval(() => {
api.doSecondAuth({authType: this.verifyType, authCode: this.loginkey || ''}).then(data => {
if(data.api_status){
clearInterval(this.checkCAAuthTimer);
this.closeDialog('success');
}
})
}, 1000);
}
//二次验证
@action doSecondAuth = () => {
if(this.spinning || this.verifyType == 40)
return;
this.spinning = true;
this.formTarget.verifyForm.validateForm().then(f => {
if (f.isValid) {
const formData = this.formTarget.verifyForm.getFormParams();
const params = {
authType: this.verifyType,
authCode: formData.authCode
}
api.doSecondAuth(params).then(data => {
if(data.status == '1'){
if(!data.api_status){
f.showError('authCode', data.api_errormsg);
}else{
this.closeDialog('success');
}
}else{
message.error(data.message );
}
this.spinning = false;
});
} else {
this.spinning = false;
f.showErrors();
this.showError = new Date().getTime();
}
});
}
//获取动态密码
@action getSecDynamicPassword = (init = false) => {
if(init || this.showTimeout){
api.getSecDynamicPassword().then(data => {
if(data.status == '1'){
this.initTimer(data.validSecond);
}else{
message.error(data.message);
}
});
}
}
@action closeDialog = flag => {
let dialog = null;
if(this.dialogId){
dialog = window.top.getParentDialog();//WeaTools.getDialog(this.dialogId);
}
if(dialog){
dialog.callback && dialog.callback(flag);
dialog.close();
}
}
@action initTimer = seconds => {
this.t = seconds;
this.sendBtnLabel = `${this.t}s`;
this.showTimeout = false;
this.checkTimer = setInterval(() => {
this.sendBtnLabel = `${(--this.t).toString()}s`;
if(this.t === 0){
this.showTimeout = true;
this.sendBtnLabel = i18n.button.resend();
clearInterval(this.checkTimer);
}
}, 1000);
}
@action doCancel = () => {
this.closeDialog('failed');
}
@action resend = () => {
this.getSecondAuthForm(40);
}
@action clearTimer = () => this.checkCAAuthTimer && clearInterval(this.checkCAAuthTimer);
/********************* action list *********************/
}
export const hrmSecondaryVerifyCom = new HrmSecondaryVerifyCom();