salary-management-front/pc4mobx/hrmSalary/pages/ruleConfig/index.js

395 lines
14 KiB
JavaScript

/*
* Author: 黎永顺
* name: 规则配置
* Description:
* Date: 2022-09-19 18:15:32
*/
import React, { Component } from "react";
import { WeaCheckbox, WeaFormItem, WeaLocaleProvider, WeaNewScroll, WeaSearchGroup, WeaSelect, WeaTop } from "ecCom";
import { message, Modal } from "antd";
import * as API from "../../apis/ruleconfig";
import "./index.less";
import ProgressModal from "../../components/progressModal";
const { getLabel } = WeaLocaleProvider;
export default class Index extends Component {
constructor(props) {
super(props);
this.state = {
items: [],
matchRuleOptions: [], orderOptions: [], ascOptions: [], employeeOptions: [],
saveParams: {
orderRule: "",
ascOrDesc: "",
rule: "",
enctry: "",
operateTaxDeclaration: "",
matchRule: "",
confValue: "0",
withDrawTaxDeclaration: "0"
},
showEncryptOperationButton: "",
progressVisible: false,
progress: 50
};
}
async componentDidMount() {
const { saveParams } = this.state;
const [
matchRuleEnum, orderRuleEnum, ascOrDescEnum, matchEmployeeModeEnum,
orderRules, codeRule, appSettings
] = await Promise.all([
this.matchRuleEnum(), this.orderRuleEnum(), this.ascOrDescEnum(), this.matchEmployeeModeEnum(),
this.sysOrderRule(), this.sysConfCodeRule(), this.queryAppsetting()
]);
const matchRuleOptions = _.map(matchRuleEnum.data, it => ({ key: it.value, showname: it.defaultLabel }));
const orderOptions = _.map(orderRuleEnum.data, it => ({ key: it.value, showname: it.defaultLabel }));
const ascOptions = _.map(ascOrDescEnum.data, it => ({ key: it.value, showname: it.defaultLabel }));
const employeeOptions = _.map(matchEmployeeModeEnum.data, it => ({ key: it.value, showname: it.defaultLabel }));
const { data: { ascOrDesc, orderRule } } = orderRules;
const { data: rule } = codeRule;
const {
data: {
showEncryptOperationButton,
isOpenEncrypt: enctry,
isOpenTaxDeclaration: operateTaxDeclaration,
salaryAcctEmployeeRule: matchRule,
salaryArchiveDelete: confValue, withDrawTaxDeclaration
}
} = appSettings;
this.setState({
matchRuleOptions, orderOptions, ascOptions, employeeOptions,
showEncryptOperationButton,
saveParams: {
...saveParams,
ascOrDesc, orderRule, rule, enctry, operateTaxDeclaration, matchRule, confValue, withDrawTaxDeclaration
}
});
}
sysOrderRule = () => {
return API.sysOrderRule();
};
sysConfCodeRule = () => {
return API.sysConfCodeRule({ code: "matchEmployeeMode" });
};
queryAppsetting = () => {
return API.queryAppsetting();
};
matchRuleEnum = () => {
const payload = {
enumClass: "com.engine.salary.sys.enums.SalaryAcctEmployeeRuleEnum"
};
return API.commonEnumList(payload);
};
orderRuleEnum = () => {
const payload = {
enumClass: "com.engine.salary.sys.enums.OrderRuleEnum"
};
return API.commonEnumList(payload);
};
ascOrDescEnum = () => {
const payload = {
enumClass: "com.engine.salary.sys.enums.AscOrDescEnum"
};
return API.commonEnumList(payload);
};
matchEmployeeModeEnum = () => {
const payload = {
enumClass: "com.engine.salary.sys.enums.MatchEmployeeModeEnum"
};
return API.commonEnumList(payload);
};
updateOrderRule = () => {
API.updateOrderRule(_.pick(this.state.saveParams, ["orderRule", "ascOrDesc"]))
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
saveMatchEmployeeModeRule = () => {
API.saveMatchEmployeeModeRule(_.pick(this.state.saveParams, ["rule"])).then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
saveSalaryAcctEmployeeRule = () => {
API.saveSalaryAcctEmployeeRule({ rule: this.state.saveParams.matchRule })
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
operateTaxDeclarationFunction = () => {
API.operateTaxDeclarationFunction(_.pick(this.state.saveParams, ["operateTaxDeclaration"]))
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
saveEncryptSetting = () => {
API.saveEncryptSetting({ isOpenEncrypt: this.state.saveParams.enctry })
.then(({ data, status, errormsg }) => {
if (status) {
const { isSuccess, progressId, msg } = data;
if (!isSuccess) {
message.error(errormsg || msg || getLabel(22620, "保存失败!"));
return;
}
this.setState({
progressVisible: true,
progress: 0
}, () => {
let number = 1;
this.timer && clearInterval(this.timer);
this.timer = setInterval(() => {
API.getEncryptProgress({ progressId }).then(({ status, data, errormsg }) => {
const { progress_statue } = data;
if (progress_statue === "success" && this.timer) {
clearInterval(this.timer);
this.timer = null;
number = 1;
this.setState({
progress: 100
}, () => {
this.setState({
progressVisible: false
});
});
message.success(getLabel(22619, "保存成功!"));
} else if (progress_statue === "in_progress" && this.timer) {
if (this.state.progress >= 90) {
this.setState({
progress: this.state.progress + (0.001 * this.state.progress)
});
} else {
this.setState({
progress: 10 * number
}, () => number++);
}
} else if (!status || (progress_statue === "fail" && this.timer)) {
clearInterval(this.timer);
this.timer = null;
number = 1;
this.setState({
progress: 100
}, () => {
this.setState({
progressVisible: false
});
});
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
}, 1000);
});
}
});
};
saveArchiveDelete = () => {
API.saveArchiveDelete(_.pick(this.state.saveParams, ["confValue"]))
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
withDrawTaxDeclaration = () => {
API.saveWithDrawTaxDeclaration({ confValue: _.pick(this.state.saveParams, ["withDrawTaxDeclaration"]).withDrawTaxDeclaration })
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(22619, "保存成功!"));
} else {
message.error(errormsg || getLabel(22620, "保存失败!"));
}
});
};
handleChange = (key, val) => {
const { saveParams } = this.state;
Modal.confirm({
title: getLabel(131329, "信息确认"),
content: getLabel(111, "确认要保存吗?"),
onOk: () => {
this.setState({
saveParams: {
...saveParams,
[key]: val
}
}, () => {
switch (key) {
case "orderRule":
case "ascOrDesc":
this.updateOrderRule();
break;
case "rule":
this.saveMatchEmployeeModeRule();
break;
case "matchRule":
this.saveSalaryAcctEmployeeRule();
break;
case "operateTaxDeclaration":
this.operateTaxDeclarationFunction();
break;
case "enctry":
this.saveEncryptSetting();
break;
case "confValue":
this.saveArchiveDelete();
break;
case "withDrawTaxDeclaration":
this.withDrawTaxDeclaration();
break;
default:
break;
}
});
},
onCancel: () => {
this.setState({
saveParams: {
...saveParams,
[key]: saveParams[key]
}
});
}
});
};
render() {
const {
saveParams,
matchRuleOptions,
orderOptions,
ascOptions,
employeeOptions,
showEncryptOperationButton
} = this.state;
const {
orderRule,
ascOrDesc,
rule,
enctry,
operateTaxDeclaration,
matchRule,
confValue,
withDrawTaxDeclaration
} = saveParams;
return (
<div className="ruleWrapper">
<WeaTop
title={<span>{getLabel(543355, "规则配置")}</span>}
icon={<i className="icon-coms-Flow-setting"/>}
iconBgcolor="#F14A2D"
buttons={[]}
/>
<WeaNewScroll height={`calc(100% - 46px)`}>
<WeaSearchGroup title={getLabel(543356, "排序规则")} showGroup center>
<WeaFormItem label={getLabel(15512, "排序字段")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaSelect options={orderOptions} value={orderRule}
onChange={val => this.handleChange("orderRule", val)}
/>
</WeaFormItem>
<WeaFormItem label={getLabel(543351, "正序/倒序")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaSelect options={ascOptions} value={ascOrDesc}
onChange={val => this.handleChange("ascOrDesc", val)}
/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(543357, "人员校验规则")} showGroup center>
<WeaFormItem label={getLabel(543352, "人员字段")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaSelect options={employeeOptions} value={rule}
onChange={val => this.handleChange("rule", val)}
/>
</WeaFormItem>
</WeaSearchGroup>
{
showEncryptOperationButton === "true" &&
<WeaSearchGroup title={getLabel(543358, "加密规则")} showGroup center>
<WeaFormItem label={getLabel(526997, "加密设置")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<WeaCheckbox display="switch" value={enctry}
onChange={val => this.handleChange("enctry", val)}/>
</WeaFormItem>
</WeaSearchGroup>
}
<WeaSearchGroup title={getLabel(111, "算税规则")} showGroup center>
<WeaFormItem label={getLabel(111, "系统算税")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<WeaCheckbox display="switch" value={operateTaxDeclaration}
onChange={val => this.handleChange("operateTaxDeclaration", val)}/>
</WeaFormItem>
<WeaFormItem label={getLabel(111, "撤回申报表")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<WeaCheckbox display="switch" value={withDrawTaxDeclaration}
onChange={val => this.handleChange("withDrawTaxDeclaration", val)}/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(538004, "薪资档案")} showGroup center>
<WeaFormItem label={getLabel(111, "允许删除档案")} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<WeaCheckbox display="switch" value={confValue}
onChange={val => this.handleChange("confValue", val)}/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(111, "薪资核算人员匹配规则")} showGroup center>
<WeaFormItem label={getLabel(111, "匹配规则")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaSelect options={matchRuleOptions} value={matchRule}
onChange={val => this.handleChange("matchRule", val)}
/>
</WeaFormItem>
</WeaSearchGroup>
{
this.state.progressVisible &&
<ProgressModal
title={getLabel(543360, "加密/解密中...")}
visible={this.state.progressVisible}
onCancel={() => {
this.setState({ progressVisible: false, progress: 0 });
}}
progress={this.state.progress}
/>
}
</WeaNewScroll>
</div>
);
}
}
export const Select = payload => {
const {
label,
onChange,
value,
options = [],
viewAttr = 3,
detailtype = 1,
multiple = false,
showSearch = false
} = payload;
return (
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaSelect options={multiple ? options : [...options]} viewAttr={viewAttr}
detailtype={detailtype}
value={value}
multiple={multiple}
showSearch={showSearch}
optionFilterProp="children"
style={multiple ? { width: 600 } : {}}
onChange={(selected, showName) => onChange({ type: label, selected, showName })}/>
</WeaFormItem>
);
};