/* * Author: 黎永顺 * name: 薪资账套基本设置 * Description: * Date: 2022/12/9 */ import React, { Component } from "react"; import { WeaCheckbox, WeaFormItem, WeaHelpfulTip, WeaInput, WeaSelect, WeaTextarea } from "ecCom"; import { Col, Row } from "antd"; import { inject, observer } from "mobx-react"; import { baseSettingFormItem } from "../config"; import { getLedgerBasicForm } from "../../../apis/ledger"; import { getAddMonthYearMonth, getCurrentYearMonth, getSubtractMonthYearMonth } from "../../../util/date"; import moment from "moment"; import "./index.less"; @inject("taxAgentStore") @observer class LedgerBaseSetting extends Component { constructor(props) { super(props); this.state = { baseForm: baseSettingFormItem, settingBaseInfo: { name: "", taxAgentId: "", taxableItems: "1", salaryCycleType: "3", salaryCycleFromDay: "1", taxCycleType: "3", attendCycleType: "3", attendCycleFromDay: "1", socialSecurityCycleType: "3", description: "", canEdit: false } }; } componentDidMount() { this.getTaxAgentSelectListAsAdmin(); if (this.props.visible && this.props.editId) { this.getLedgerBasicForm(this.props.editId); } } componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible && nextProps.editId) { this.getLedgerBasicForm(nextProps.editId); } if (nextProps.visible !== this.props.visible && !nextProps.editId) { this.handleResetBaseInfo(); } } handleResetBaseInfo = () => { this.setState({ settingBaseInfo: { name: "", taxAgentId: "", taxableItems: "1", salaryCycleType: "3", salaryCycleFromDay: "1", taxCycleType: "3", attendCycleType: "3", attendCycleFromDay: "1", socialSecurityCycleType: "3", description: "", canEdit: "true" } }); }; getLedgerBasicForm = (id) => { getLedgerBasicForm({ id }).then(({ status, data }) => { if (status) { const { basicForm } = data; const { settingBaseInfo } = this.state; let tmpV = {}; _.map(Object.keys(settingBaseInfo), key => { tmpV[key] = !_.isNil(basicForm[key]) ? basicForm[key].toString() : ""; }); this.setState({ settingBaseInfo: { ...settingBaseInfo, ...tmpV } }, () => { this.props.onSaveParams(this.state.settingBaseInfo); }); } }); }; getTaxAgentSelectListAsAdmin = () => { const { taxAgentStore } = this.props; const { getTaxAgentSelectListAsAdmin } = taxAgentStore; getTaxAgentSelectListAsAdmin().then(({ status, data }) => { if (status) { const { baseForm } = this.state; this.setState({ baseForm: _.map(baseForm, it => { if (it.key === "taxAgentId") { return { ...it, options: _.map(data, it => ({ key: it.id, showname: it.content })) }; } return { ...it }; }) }); } }); }; handleChangeField = (key, value) => { const { onSaveParams } = this.props; const { settingBaseInfo } = this.state; this.setState({ settingBaseInfo: { ...settingBaseInfo, [key]: value } }, () => { onSaveParams(this.state.settingBaseInfo); }); }; render() { const { editId } = this.props; const { baseForm, settingBaseInfo } = this.state; const { canEdit, taxAgentId } = settingBaseInfo; let taxAgentIdDisabled = false, taxableItemsDisabled = false; return (
{ _.map(baseForm, item => { const { key, label, type, options = [], children = [] } = item; taxAgentIdDisabled = key === "taxAgentId" && taxAgentId; taxableItemsDisabled = key === "taxableItems" && editId; return { type === "INPUT" ? this.handleChangeField(key, v)}/> : type === "TEXTAREA" ? this.handleChangeField(key, v)}/> : type === "CHECKBOX" ? : type === "SELECT" ? this.handleChangeField(key, v)}/> : type === "CUSTOM" ? this.handleChangeField(key, v)}/> : null } ; }) }
); } } export default LedgerBaseSetting; const CustomSelect = (props) => { const { list, baseInfo, onChange, inputStr } = props; const { salaryCycleType, salaryCycleFromDay, attendCycleType, attendCycleFromDay, canEdit } = baseInfo; const salaryCycleStrObj = initPeriodStr("inputStr", salaryCycleType, salaryCycleFromDay); const attendCycleStrObj = initPeriodStr("inputStr", attendCycleType, attendCycleFromDay); return { _.map(list, item => { const { key, options = [] } = item; return onChange(key, v)}/> ; }) } {inputStr === "salaryCycleStrObj" ? salaryCycleStrObj.inputStr : attendCycleStrObj.inputStr} ; }; const MonthCycleDesc = (props) => { const { taxCycleType, socialSecurityCycleType, salaryCycleFromDay, salaryCycleType, attendCycleType, attendCycleFromDay } = props; const salaryCycleStrObj = initPeriodStr("salaryCycleStr", salaryCycleType, salaryCycleFromDay); const attendCycleStrObj = initPeriodStr("attendCycleStr", attendCycleType, attendCycleFromDay); return
月份周期说明
例:薪资所属月是{moment().format("YYYY-MM")}(即核算员工{moment().format("MM")}月的工资)
根据您当前的选择,相应的周期为:
薪资周期
{getStartDate(salaryCycleType, salaryCycleFromDay)}{salaryCycleStrObj.date}
税款所属期
{getMonth(taxCycleType)}
考勤取值周期
{getStartDate(attendCycleType, attendCycleFromDay)}{attendCycleStrObj.date}
福利台账月份
引用{getMonth(socialSecurityCycleType)}的福利台账数据
; }; // 获取开始日期 const getStartDate = (salaryCycleType, day) => { day = Number(day); return getMonth(salaryCycleType) + "-" + (day < 10 ? "0" + day : day); }; const getMonth = (salaryCycleType) => { switch (salaryCycleType) { case "1": // 上上月 return getSubtractMonthYearMonth(2); case "2": // 上月 return getSubtractMonthYearMonth(1); case "3": // 本月 return getCurrentYearMonth(); case "4": // 下月 return getAddMonthYearMonth(1); } }; const initPeriodStr = (periodStrType, types, fromDay) => { let str = "", tmpDate = null; switch (types) { case "1": tmpDate = moment().subtract(2, "month"); const is_31H = moment(tmpDate, "YYYY-MM").daysInMonth() === 31; if (fromDay == 1) { tmpDate = moment().subtract(2, "month").endOf("month"); str = `至上上月最后一天`; } else { tmpDate = moment(new Date(`${moment(tmpDate).format("YYYY-MM")}-0${fromDay}`)) .add(is_31H ? 30 : 29, "days"); str = `至上月${moment(tmpDate).date()}号`; } break; case "2": tmpDate = moment().subtract(1, "month"); const is_31 = moment(tmpDate, "YYYY-MM").daysInMonth() === 31; if (fromDay == 1) { tmpDate = moment().subtract(1, "month").endOf("month"); str = `至上月最后一天`; } else { tmpDate = moment(new Date(`${moment(tmpDate).format("YYYY-MM")}-0${fromDay}`)) .add(is_31 ? 30 : 29, "days"); str = `至本月${moment(tmpDate).date()}号`; } break; case "3": tmpDate = moment().add(0, "month"); const is_31K = moment(tmpDate, "YYYY-MM").daysInMonth() === 31; if (fromDay == 1) { tmpDate = moment().endOf("month"); str = `至本月最后一天`; } else { tmpDate = moment(new Date(`${moment(tmpDate).format("YYYY-MM")}-0${fromDay}`)) .add(is_31K ? 30 : 29, "days"); str = `至下月${moment(tmpDate).date()}号`; } break; case "4": tmpDate = moment().add(1, "month"); const is_31L = moment(tmpDate, "YYYY-MM").daysInMonth() === 31; if (fromDay == 1) { tmpDate = moment().add(1, "month").endOf("month"); str = `至下月最后一天`; } else { tmpDate = moment(new Date(`${moment(tmpDate).format("YYYY-MM")}-0${fromDay}`)) .add(is_31L ? 30 : 29, "days"); str = `至下下月${moment(tmpDate).date()}号`; } break; default: break; } return { [periodStrType]: str, date: moment(tmpDate).format("YYYY-MM-DD") }; };