salary-management-front/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js

239 lines
8.1 KiB
JavaScript
Raw Normal View History

2022-06-27 10:35:39 +08:00
import React from "react";
import { WeaCheckbox, WeaFormItem, WeaInput, WeaLocaleProvider, WeaSearchGroup, WeaSelect, WeaTimePicker } from "ecCom";
2022-06-27 10:35:39 +08:00
import { inject, observer } from "mobx-react";
2022-12-07 14:15:46 +08:00
import { getReplenishRuleSetOptions } from "../../../apis/payroll";
import moment from "moment";
import { toJS } from "mobx";
import "./index.less";
2022-03-18 14:16:52 +08:00
const getLabel = WeaLocaleProvider.getLabel;
2022-06-27 10:35:39 +08:00
@inject("payrollStore")
2022-04-13 16:56:31 +08:00
@observer
2022-03-18 14:16:52 +08:00
export default class BaseInformForm extends React.Component {
2022-06-27 10:35:39 +08:00
constructor(props) {
super(props);
this.state = {
inited: false,
options: [],
2022-12-07 14:15:46 +08:00
replenishRuleOptions: [],
2022-06-27 10:35:39 +08:00
request: {}
};
}
2022-06-27 10:35:39 +08:00
componentWillMount() {
const { payrollStore } = this.props;
const { getPayrollBaseForm } = payrollStore;
2022-12-23 17:30:59 +08:00
const templateBaseData = window.localStorage.getItem("template-basedata") || "{}";
2022-06-27 10:35:39 +08:00
getPayrollBaseForm(this.props.id).then(data => {
this.setState(
{
2022-12-07 14:15:46 +08:00
replenishRuleOptions: _.map(data.replenishRuleSetOption, it => ({ key: it.id, showname: it.content })),
options: _.isEmpty(toJS(data.salarySobOptions)) ? [{ key: "", showname: "" }] : [{
key: "",
showname: ""
}, ...toJS(data.salarySobOptions)],
2022-12-07 14:15:46 +08:00
request: {
...data.templateBaseData,
2023-06-07 15:35:14 +08:00
msgStatus: !this.props.id ? "1" : data.templateBaseData.msgStatus,
2022-12-07 14:15:46 +08:00
reissueRule: data.templateBaseData.replenishRule ? "1" : "0",
...JSON.parse(templateBaseData),
sendEmail: ""
2022-12-07 14:15:46 +08:00
}
}, () => {
this.props.onChange && this.props.onChange(this.state.request);
2022-06-27 10:35:39 +08:00
this.setState({
inited: true
});
2022-04-13 16:56:31 +08:00
}
2022-06-27 10:35:39 +08:00
);
});
JSON.parse(templateBaseData).salarySob && this.getReplenishRuleSetOptions({ salarySobId: JSON.parse(templateBaseData).salarySob });
2022-06-27 10:35:39 +08:00
}
2022-04-13 16:56:31 +08:00
2022-12-07 14:15:46 +08:00
hanldeChange = (params) => {
2022-06-27 10:35:39 +08:00
let request = { ...this.state.request, ...params };
this.setState({
request
2022-12-07 14:15:46 +08:00
}, () => {
if (this.state.request.reissueRule === "1" && this.state.request.salarySob) {
// TODO获取规则设置枚举项
this.getReplenishRuleSetOptions();
}
2022-06-27 10:35:39 +08:00
});
this.props.onChange && this.props.onChange(request);
2022-12-07 14:15:46 +08:00
};
getReplenishRuleSetOptions = (params = {}) => {
2022-12-07 14:15:46 +08:00
const { request } = this.state;
getReplenishRuleSetOptions({ salarySobId: request.salarySob, ...params }).then(({ status, data }) => {
2022-12-07 14:15:46 +08:00
if (status && !_.isEmpty(data)) {
this.setState({
replenishRuleOptions: _.map(data, it => ({ key: it.id, showname: it.content }))
});
}
});
};
2022-05-05 15:53:35 +08:00
2022-06-27 10:35:39 +08:00
render() {
2022-12-07 14:15:46 +08:00
const { request, options, replenishRuleOptions } = this.state;
const {
salarySob,
name,
description,
replenishName,
replenishRule,
reissueRule,
msgStatus,
emailStatus,
autoSendStatus,
autoSendDayOfMonth,
autoSendTimeOfDay
} = request;
2022-12-07 14:15:46 +08:00
2022-06-27 10:35:39 +08:00
return (
<React.Fragment>
<WeaSearchGroup title="基础信息" items={[]} needTigger showGroup col={1} className="payrollBaseInfoWrapper">
<WeaFormItem
label="薪资账套"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
{
this.state.inited &&
<WeaSelect
viewAttr={3}
options={options}
value={salarySob ? salarySob : ""}
style={{ width: 200 }}
onChange={value => this.hanldeChange({ salarySob: value })}/>
}
</WeaFormItem>
<WeaFormItem
label="工资单模板名称"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaInput
value={name}
viewAttr={3}
onChange={value => this.hanldeChange({ name: value })}
/>
</WeaFormItem>
2022-12-07 14:15:46 +08:00
<WeaFormItem
label="补发工资单模板名称"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaInput
value={replenishName}
viewAttr={3}
onChange={value => this.hanldeChange({ replenishName: value })}
/>
</WeaFormItem>
<WeaFormItem
label="补发工资单名单生成规则"
2022-12-07 14:15:46 +08:00
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaSelect
options={[{ key: "0", showname: "全部" }, { key: "1", showname: "按规则" }]}
value={reissueRule}
detailtype={3}
2022-12-07 14:15:46 +08:00
viewAttr={3}
onChange={value => this.hanldeChange({ reissueRule: value })}
2022-12-07 14:15:46 +08:00
/>
</WeaFormItem>
{
reissueRule !== "0" &&
<WeaFormItem
label="规则设置"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaSelect
options={replenishRuleOptions}
value={replenishRule}
viewAttr={3}
onChange={value => this.hanldeChange({ replenishRule: value })}
/>
</WeaFormItem>
}
<WeaFormItem
label="备注"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaInput
value={description}
onChange={value => this.hanldeChange({ description: value })}
/>
</WeaFormItem>
</WeaSearchGroup>
<WeaSearchGroup title={getLabel(111, "发送设置")} items={[]} needTigger showGroup col={1}
className="payrollBaseInfoWrapper">
<WeaFormItem label={getLabel(111, "系统消息")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
2023-06-07 15:35:14 +08:00
<WeaCheckbox value={msgStatus ? "1" : "0"} display="switch"
onChange={value => this.hanldeChange({ msgStatus: value === "1" })}/>
</WeaFormItem>
<WeaFormItem label={getLabel(111, "邮件")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaCheckbox value={emailStatus ? "1" : "0"} display="switch"
onChange={value => this.hanldeChange({ emailStatus: value === "1" })}/>
</WeaFormItem>
<WeaFormItem label={getLabel(111, "定时发送")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<WeaCheckbox value={autoSendStatus ? "1" : "0"} display="switch"
onChange={value => this.hanldeChange({ autoSendStatus: value === "1" })}/>
</WeaFormItem>
{
autoSendStatus &&
<WeaFormItem label={getLabel(111, "发送时间")} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
<SendTimeComp
value={{
autoSendDayOfMonth,
autoSendTimeOfDay
}}
onChange={this.hanldeChange}
/>
</WeaFormItem>
}
</WeaSearchGroup>
</React.Fragment>
2022-06-27 10:35:39 +08:00
);
}
}
const SendTimeComp = (props) => {
const { value, onChange } = props;
const { autoSendDayOfMonth, autoSendTimeOfDay } = value;
const handleChangeSendtime = (key, val) => {
onChange({ autoSendDayOfMonth, autoSendTimeOfDay, [key]: val });
};
return <div className="customTimeCompWrapper">
<div>
<span>{getLabel(111, "每月")}</span>
<WeaSelect
value={!_.isNil(autoSendDayOfMonth) ? autoSendDayOfMonth : "1"}
options={_.map(getDay(), item => ({ key: item, showname: item }))}
onChange={v => handleChangeSendtime("autoSendDayOfMonth", v)}
/>
<span>{getLabel(16992, "号")}</span>
</div>
<WeaTimePicker value={!_.isNil(autoSendTimeOfDay) ? autoSendTimeOfDay : "09:00"} size="small"
onChange={v => handleChangeSendtime("autoSendTimeOfDay", v)}/>
</div>;
};
const getDay = () => {
let days = [];
let day = getDaysInMonth(moment().year(), moment().month() + 1);
for (let i = 1; i <= day; i++) {
days.push(i);
}
return days;
};
const getDaysInMonth = (year, month) => {
month = parseInt(month, 10);
let d = new Date(year, month, 0);
return d.getDate();
};