weaver_trunk_cli/pc4mobx/hrm/stores/systeminfo.js

523 lines
14 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
message
} from 'antd';
import {
observable,
action
} from 'mobx';
import {
WeaForm
} from 'comsMobx';
import * as API from '../apis/systeminfo';
import * as Util from '../util/index';
import moment from 'moment';
import _isNaN from 'lodash/isNaN';
import * as mobx from 'mobx';
import {
WeaTools
} from 'ecCom'
import * as PublicFunc from '../util/pulic-func';
import {
i18n
} from '../public/i18n';
import {
WeaLocaleProvider
} from 'ecCom';
import {
checkWeakPass
} from "../util/PASSUtil.js";
const getLabel = WeaLocaleProvider.getLabel;
const toJS = mobx.toJS;
export class HrmSystemInfo {
loading = false;
title = i18n.label.sysInfo;
viewDate = new moment().format('YYYY-MM-DD');
pickerValue = new moment().add(1, 'day').format('YYYY-MM-DD');
@observable hrmId = '';
@observable isEditor = false;
@observable checkValue = '0';
@observable inputVlaue = '';
@observable selectValue = '0';
@observable form = new WeaForm();
@observable buttons = {};
@observable formFields = [];
@observable settings = {};
@observable weekInfo = {};
@observable date = new Date().getTime();
@observable isSelef = false;
@observable openRSA = "0";
@observable options = [{
key: '0',
showname: '启用'
}, {
key: '2',
showname: '网段策略'
}];
@observable bodyConf = [{
title: '签到信息',
icon: 'icon-Human-resources-Sign-in-information',
fields: ['signintime', 'signinip'],
isRow: false,
fieldsConf: [{
title: '时间',
icon: 'icon-Human-resources-late',
}, {
title: 'IP',
icon: 'icon-Human-resources-IP',
isIp: true,
}]
}, {
title: '签退信息',
icon: 'icon-Human-resources-Sign-out',
fields: ['signouttime', 'signoutip'],
isRow: false,
fieldsConf: [{
title: '时间',
icon: 'icon-Human-resources-late',
}, {
title: 'IP',
icon: 'icon-Human-resources-IP',
isIp: true,
}]
}, {
title: '微博填写',
icon: 'icon-Human-resources-micro-blog',
fields: ['blogcreated'],
isRow: true,
fieldsConf: [{
title: '时间',
icon: 'icon-Human-resources-late',
}]
}, {
title: '出差信息',
icon: 'icon-Human-resources-business-travel',
fields: ['businesstravelbegin', 'businesstravelend'],
isRow: false,
fieldsConf: [{
title: '开始',
icon: 'icon-Human-resources-late',
}, {
title: '结束',
icon: 'icon-Human-resources-late',
}]
}, {
title: '移动签到',
icon: 'icon-Human-resources-Mobile-sign-in',
fields: ['mobilesignaddr'],
isRow: true,
fieldsConf: [{
title: '地址',
icon: 'icon-Human-resources-Mobile-sign-in',
}]
}]
@action
init = () => {
this.viewDate = new moment().format('YYYY-MM-DD');
this.isEditor = false;
this.checkValue = '0';
this.inputVlaue = '';
this.selectValue = '0';
this.form = new WeaForm();
this.buttons = {};
this.formFields = [];
this.settings = {};
this.weekInfo = {};
}
getFormField = () => {
let params = {
id: this.hrmId
};
API.getFormField(params).then((data) => {
this.buttons = data.buttons;
this.formFields = data.condition;
this.checkValue = data.needauto,
this.pickerValue = data.enableDate,
this.selectValue = data.enableUsbType,
this.inputVlaue = data.enableDate && data.enableDate != '' && moment(data.enableDate).diff(moment(), 'days') + 1,
this.settings = data.settings;
this.isSelef = data.isSelef;
this.openRSA = data.openRSA;
this.form.initFormFields(data.condition);
});
}
getWeekInfo = (v) => {
let params = {
id: this.hrmId,
datefrom: v
};
API.getWeekInfo(params).then((data) => {
this.weekInfo = data
});
}
getDateLabel = () => {
let str = this.viewDate;
if (new moment().format('YYYY-MM-DD') == this.viewDate) str = '今天';
return str;
}
onCheckChange = (v) => {
this.checkValue = v;
}
onInputChange = (v) => {
if (v && !_isNaN(parseInt(v)) && parseInt(v) > 0) {
this.inputVlaue = v;
this.pickerValue = new moment().add(parseInt(v), 'day').format('YYYY-MM-DD');
} else {
this.inputVlaue = '';
}
}
onPickerChange = (v) => {
this.pickerValue = v;
this.inputVlaue = moment(v).diff(moment(), 'days') + 1;
}
onSelectChange = (v) => {
this.selectValue = v;
}
edit = () => {
const formParams = this.getFormParams();
const usbState = formParams.usbstate || '';
this.formFields && this.formFields.forEach(c => {
c.items.forEach(field => {
let domkey = field.domkey[0] || '';
if ((usbState == '0' && (domkey == 'tokenKey' || domkey == 'serial')) || domkey === 'validatecode') {
field.viewAttr = 3;
} else {
field.viewAttr = 2;
}
if (field.conditionType == 'BROWSER') {
field.browserConditionParam.viewAttr = 2;
}
if (domkey === 'classification' && this.isSelef) {
field.viewAttr = 1;
}
});
});
this.isEditor = true;
}
doSave = () =>{
if(this.loading) return;
this.loading = true;
const formParams = this.form.getFormParams();
const userUsbType = formParams.userUsbType || '';
const usbstate = formParams.usbstate || '';
const tokenKey = formParams.tokenKey || '';
const hrmId = this.hrmId;
if (!this.beforeSave()) {
this.loading = false;
return false;
}
let __this = this;
if (userUsbType == "3" && usbstate != "1" && tokenKey != "") { //动态令牌
let params = {};
params.id = hrmId;
params.tokenKey = tokenKey;
WeaTools.callApi('/api/hrm/sysadmin/checkIsUsed', 'POST', params).then((data) => {
if (data.isUsed) {
message.warning('令牌序列号已经绑定给' + data.lastname + ',不能重复绑定!');
this.loading = false;
} else {
__this.doAjaxSave();
}
})
} else {
__this.doAjaxSave();
}
}
RSAEcrypt = (password,password1) => {
return new Promise( (resolve, reject) => {
//异步加载ras文件
loadjs.isDefined('rsa') ? loadjs.ready('rsa', () => {
if ( this.openRSA && this.openRSA == '1') {
password = __RSAEcrypt__.rsa_data_encrypt(password);
password1 = __RSAEcrypt__.rsa_data_encrypt(password1);
}
resolve({password,password1});
}) : loadjs(["/js/rsa/jsencrypt.js", "/js/rsa/rsa.js"], 'rsa', {
async: false,
success: () => {
if (this.openRSA && this.openRSA == '1') {
const callback = () => {
password = __RSAEcrypt__.rsa_data_encrypt(password);
password1 = __RSAEcrypt__.rsa_data_encrypt(password1);
resolve({password, password1});
}
__RSAEcrypt__.initRsaCode(callback);
} else {
resolve({password, password1});
}
}
});
})
}
doAjaxSave = () => {
const hrmId = this.hrmId;
const formParams = this.form.getFormParams();
let params = {
needauto: this.checkValue,
enableDate: this.pickerValue,
enableUsbType: this.selectValue
};
params = { ...{
id: hrmId
},
...params,
...formParams
};
let {
password,
password1
} = params;
this.RSAEcrypt(password,password1).then(data => {
params = {
...params,
password:data.password,
password1:data.password1
}
const {
validatecode
} = formParams;
if (!validatecode) {
message.warning(getLabel(386319, '必填字段不完整!'));
this.loading = false;
return
}
const save = () => {
API.doSave(params).then((data) => {
if (data.status == '1') {
message.success(i18n.message.saveSuccess());
this.isEditor = false;
this.getFormField();
this.form.updateFields({
validatecode: {
value: ''
}
});
} else {
message.warning(data.message);
}
this.loading = false;
this.date = new Date().getTime();
}, error => {
message.warning(error.message);
this.loading = false;
})
}
if (formParams.password === "qwertyuiop") {
save();
}else{
checkWeakPass(params.password,() => {
save();
},() =>{
this.loading = false;
this.date = new Date().getTime();
})
}
})
}
backCard = () => {
this.form.updateFields({
validatecode: {
value: ''
}
});
const hrmId = this.hrmId;
this.isEditor = false;
this.getFormField({
hrmId
});
}
updateKey = () => {
const formParams = this.form.getFormParams();
let needusb = formParams.userUsbType || '';
if (needusb == "2") {
let returnstr = PublicFunc.getUserName() || '';
if (returnstr != "") {
form.updateFields({ ...formParams,
...{
loginid: {
name: 'loginid',
value: returnstr
}
}
});
}
} else if (needusb == "3") {
this.bindTokenKey();
}
}
bindTokenKey = () => {
const hrmId = this.hrmId;
const title = "";
let url = "/spa/hrm/index_mobx.html#/main/hrm/BindTokenKey?requestFrom=system&userid=" + hrmId;
const dialog = ecCom.WeaTools.createDialog({
title,
url,
style: {
width: 700,
height: 365
}
});
dialog.show();
}
beforeSave = () => {
const formParams = this.form.getFormParams();
const userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
const isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
const isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
const userUsbType = formParams.userUsbType || '';
const usbstate = formParams.usbstate || '';
const serial = formParams.serial || '';
const tokenKey = formParams.tokenKey || '';
const loginid = formParams.loginid || '';
const email = formParams.email || '';
const needauto = this.checkValue || '';
const enableDate = this.pickerValue || '';
let username = "";
if (userUsbType == 2) {
if (!isIE) {
message.warning("您的浏览器不支持修改使用海泰key的账号密码请使用IE浏览器");
return false;
}
//读取硬件usbkey赋值
username = PublicFunc.getUserName();
if (username == '') return false;
}
if (usbstate != "1") {
let flag = true;
if (userUsbType == "2" && serial == "") {
flag = false;
} else if (userUsbType == "3" && tokenKey == "") {
flag = false;
}
if (!flag) {
message.warning(i18n.message.requireFieldNone());
return false;
}
}
if (needauto == '1' && enableDate == '') {
message.warning(i18n.message.requireFieldNone());
return false;
}
if (userUsbType == '3' && tokenKey != "" && (!this.isdigit(tokenKey) || tokenKey.length != 10)) {
message.warning(getLabel(387344, "令牌序列号必须为10位数字"));
return false;
}
if (loginid.indexOf(" ") != -1 || loginid.indexOf(";") != -1 || loginid.indexOf("--") != -1 || loginid.indexOf("'") != -1) {
message.warning(getLabel(387345, "登录名中不能有“空格、分号、--、单引号”字符"));
return false;
}
if ("2" == userUsbType) { //海泰key
if (loginid != username) {
message.warning(getLabel(387346, "系统用户名与Key中的不匹配"));
return false;
}
}
if (!this.checkPassword()) return false;
if (!PublicFunc.chkMail(email)) return false;
return true;
}
isdigit = (s) => {
var r, re;
re = /\d*/i; //\d表示数字,*表示匹配多个数字
r = s.match(re);
return (r == s) ? true : false;
}
checkPassword = () => {
const formParams = this.form.getFormParams();
let cs = formParams.password || ''; //新密码
let cs1 = formParams.password1 || ''; //确认密码
let passwordComplexity = this.settings.passwordComplexity;
let minpasslen = this.settings.minpasslen;
let checkpass = true;
if (cs == '' || cs == "qwertyuiop") return checkpass;
if (cs.length < minpasslen) {
message.warning(getLabel(387347, "密码长度不能小于") + minpasslen);
return false;
}
if (cs != cs1) {
message.warning(getLabel(387351, "密码确认不正确"));
return false;
}
if (passwordComplexity == "1") {
const complexity11 = /[a-z]+/;
const complexity12 = /[A-Z]+/;
const complexity13 = /\d+/;
if (cs != "") {
if (complexity11.test(cs) && complexity12.test(cs) && complexity13.test(cs)) {
checkpass = true;
} else {
message.warning(getLabel(533396, "新密码不符合要求,必须为字母大写、字母小写、数字组合!请重新输入!"));
checkpass = false;
}
}
} else if (passwordComplexity == "2") {
const complexity21 = /[a-zA-Z_]+/;
const complexity22 = /\W+/;
const complexity23 = /\d+/;
if (cs != "") {
if (complexity21.test(cs) && complexity22.test(cs) && complexity23.test(cs)) {
checkpass = true;
} else {
message.warning(getLabel(533374, "新密码不符合要求,必须为字母、数字、特殊字符组合!请重新输入!"));
checkpass = false;
}
}
}
return checkpass;
}
onPickerHandler = (v) => {
v = new moment(v).format('YYYY-MM-DD');
this.getWeekInfo(v);
this.viewDate = v;
}
getFormParams = () => {
return this.form.getFormParams();
}
}