salary-management-front/pc4mobx/hrmSalary/pages/payroll/payrollGrant/payrollPartModal.js

282 lines
7.8 KiB
JavaScript

/*
* Author: 黎永顺
* name: 工资单部分发放和撤回
* Description:
* Date: 2022/12/2
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { WeaBrowser, WeaDialog, WeaFormItem, WeaSearchGroup, WeaSelect } from "ecCom";
import { Button, message, Modal } from "antd";
import { commonEnumList } from "../../../apis/ruleconfig";
import { sendRangeSave } from "../../../apis/payroll";
import "./index.less";
@inject("taxAgentStore")
@observer
class PayrollPartModal extends Component {
constructor(props) {
super(props);
this.state = {
loading: false,
targetTypeList: [],
personalAddItem: [
{
viewAttr: 3,
key: "include",
label: "对象",
targetType: "1",
targetTypeIds: "",
targetTypeIdsNames: ""
},
{
viewAttr: 2,
key: "exclude",
label: "对象中排除",
targetType: "1",
targetTypeIds: "",
targetTypeIdsNames: ""
}
]
};
}
componentDidMount() {
const { taxAgentStore } = this.props;
const { getTaxAgentSelectListAsAdmin } = taxAgentStore;
getTaxAgentSelectListAsAdmin();
}
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible) {
nextProps.visible && this.orderRuleEnum();
}
}
orderRuleEnum = () => {
const payload = {
enumClass: "com.engine.salary.enums.salarysend.SalarySendRangeTargetTypeEnum"
};
commonEnumList(payload).then(({ status, data }) => {
if (status) {
this.setState({
targetTypeList: _.map(data, item => {
return {
key: item.value.toString(),
showname: item.defaultLabel
};
})
});
}
});
};
taxAgentRangeSave = () => {
const { grantType, salarySendId, onCancel } = this.props;
const { personalAddItem } = this.state;
let excludeObjParams = [], includeObjParams = [];
if (
_.find(personalAddItem, item => item.viewAttr === 3).targetType !== "0" &&
_.isEmpty(_.find(personalAddItem, item => item.viewAttr === 3).targetTypeIds)
) {
Modal.warning({
title: "信息确认",
content: "必要信息不完整,红色*为必填项!"
});
return;
}
_.map(personalAddItem, it => {
const { key, targetType, targetTypeIds } = it;
if (key === "include") {
if (targetType === "0") {
includeObjParams = [{ targetType, targetId: "" }];
} else {
if (targetTypeIds) {
includeObjParams = _.map(targetTypeIds.split(","), child => ({
targetType, targetId: child
}));
}
}
} else if (key === "exclude") {
if (targetType === "0") {
excludeObjParams = [{ targetType, targetId: "" }];
} else {
if (targetTypeIds) {
excludeObjParams = _.map(targetTypeIds.split(","), child => ({
targetType, targetId: child
}));
}
}
}
});
const payload = {
grantType, salarySendId,
excludeObjParams, includeObjParams
};
this.setState({ loading: true });
sendRangeSave(payload).then(({ status, errormsg }) => {
this.setState({ loading: false });
if (status) {
message.success("保存成功");
this.handleReset();
onCancel();
} else {
message.error(errormsg || "保存失败");
}
}).catch(() => this.setState({ loading: false }));
};
handleChange = (type, value) => {
const { personalAddItem } = this.state;
this.setState({
personalAddItem: _.map(personalAddItem, it => {
if (it.key === type) {
return {
...it,
targetType: value,
targetTypeIds: ""
};
}
return { ...it };
})
});
};
renderBrowser = (item) => {
const { personalAddItem } = this.state;
const { taxAgentStore } = this.props;
const { targetType, targetTypeIds, targetTypeIdsNames, key, viewAttr } = item;
let browserType = {};
if (targetType === "5") {
return <WeaSelect
multiple
viewAttr={viewAttr}
style={{ width: 200 }}
value={targetTypeIds}
options={taxAgentStore.taxAgentAdminOption}
onChange={(targetTypeIds, targetTypeIdsNames) => {
this.setState({
personalAddItem: _.map(personalAddItem, it => {
if (it.key === key) {
return {
...it,
targetTypeIds, targetTypeIdsNames
};
}
return { ...it };
})
});
}}
/>;
} else if (targetType === "0") {
return null;
} else {
switch (targetType) {
case "1":
browserType = { ...browserType, type: 17, title: "人员选择" };
break;
case "2":
browserType = { ...browserType, type: 57, title: "部门选择" };
break;
case "3":
browserType = { ...browserType, type: 164, title: "分部选择" };
break;
case "4":
browserType = { ...browserType, type: 278, title: "岗位选择" };
break;
default:
break;
}
return <WeaBrowser
{...browserType}
viewAttr={viewAttr}
isSingle={false}
value={targetTypeIds}
valueSpan={targetTypeIdsNames}
inputStyle={{ width: 200 }}
onChange={(targetTypeIds, targetTypeIdsNames) => {
this.setState({
personalAddItem: _.map(personalAddItem, it => {
if (it.key === key) {
return {
...it,
targetTypeIds, targetTypeIdsNames
};
}
return { ...it };
})
});
}}
/>;
}
};
handleReset = () => {
this.setState({
personalAddItem: [
{
viewAttr: 3,
key: "include",
label: "对象",
targetType: "1",
targetTypeIds: "",
targetTypeIdsNames: ""
},
{
viewAttr: 2,
key: "exclude",
label: "对象中排除",
targetType: "1",
targetTypeIds: "",
targetTypeIdsNames: ""
}
]
});
};
render() {
const { onCancel, visible } = this.props;
const { targetTypeList, personalAddItem, loading } = this.state;
const buttons = [
<Button type="primary" onClick={this.taxAgentRangeSave} loading={loading}>确定</Button>,
<Button type="ghost" onClick={this.handleReset}>重置</Button>
];
return (
<WeaDialog
initLoadCss
className="payrollPartModalWrapper"
title="添加"
visible={visible}
style={{ width: 600 }}
buttons={buttons}
onCancel={() => {
this.handleReset();
onCancel();
}}
>
<WeaSearchGroup col={1} needTigger title="" showGroup center>
{
_.map(personalAddItem, it => {
const { targetType, key, label } = it;
return <WeaFormItem
key={key}
label={label}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<div style={{ display: "flex", alignItems: "center" }}>
<WeaSelect
style={{ width: 60, marginRight: 12 }}
value={targetType}
options={targetTypeList}
onChange={(v) => this.handleChange(key, v)}
/>
{this.renderBrowser(it)}
</div>
</WeaFormItem>;
})
}
</WeaSearchGroup>
</WeaDialog>
);
}
}
export default PayrollPartModal;