/* * Author: 黎永顺 * name: 调差列表 * Description: * Date: 2022/12/5 */ import React, { Component } from "react"; import { WeaHelpfulTip, WeaInputNumber, WeaSelect, WeaTableEdit } from "ecCom"; import { message, Modal } from "antd"; import { compensationBack, compensationCategoryType, compensationSave, getCompensationComTotal, getCompensationList, getEmployeeListToCompensation } from "../../../../apis/standingBook"; import { getQueryString } from "../../../../util/url"; import "./index.less"; class AdjustTable extends Component { constructor(props) { super(props); this.state = { loading: { query: false }, dataSource: [], columns: [], selectedRowKeys: [], targetOptions: [] }; } componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible) { nextProps.visible && this.getCompensationList().then(r => { }); } } getCompensationList = async () => { const { pageInfo, loading } = this.state; const billMonth = getQueryString("billMonth"); const paymentOrganization = getQueryString("paymentOrganization"); const [adjustmentObjEnum] = await Promise.all([this.getEmployeeListToCompensation()]); const { status, data: list } = adjustmentObjEnum; this.setState({ targetOptions: list }); const targetOptions = status ? _.map(list, it => ({ key: it.employeeId.toString(), showname: it.username })) : []; const payload = { paymentOrganization, billMonth, ...pageInfo }; this.setState({ loading: { ...loading, query: true } }); getCompensationList(payload).then(({ status, data }) => { this.setState({ loading: { ...loading, query: false } }); if (status) { const { columns, data: dataSource } = data; this.setState({ dataSource: _.map(dataSource, it => { return { ...it, welfareType: it.welfareType.toString(), target: it.employeeId.toString(), adjustTo: it.adjustTo.toString(), adjustToOptions: _.map(it.categoryTypeOptions, child => ({ key: child.id, showname: child.content })), categoryTypeOptions: _.map(it.categoryTypeOptions, child => ({ key: child.id, showname: child.content })), targetOptions: _.map([it.targetOptions], child => ({ key: child.id, showname: child.name })) }; }), columns: _.map(columns, item => { const { dataIndex } = item; switch (dataIndex) { case "target": item.com = [ { type: "custom", key: "target", width: 220, render: (text, record, index, onEdit) => { return ( this.handleChangeTableItem("target", v, index)} /> ); } } ]; break; case "welfareType": item.com = [ { width: 220, type: "custom", key: "welfareType", render: (text, record, index, onEdit) => ( this.handleChangeTableItem("welfareType", v, index)} /> ) } ]; break; case "categoryType": item.com = [ { width: 220, type: "custom", key: "categoryType", render: (text, record, index, onEdit) => ( this.handleChangeTableItem("categoryType", v, index)} /> ) } ]; break; case "countryTotal": item.com = [ { width: 220, type: "custom", key: "countryTotal", render: (text, record, index, onEdit) => ( this.handleChangeTableItem("countryTotal", v, index)} /> ) } ]; break; case "companyTotal": item.com = [ { width: 220, type: "custom", key: "companyTotal", render: (text, record, index, onEdit) => ( this.handleChangeTableItem("companyTotal", v, index)} /> ) } ]; break; case "adjustmentTotal": item.title = {item.title} ; item.com = [ { width: 220, type: "custom", key: "adjustmentTotal", render: (text, record, index, onEdit) => ( this.handleChangeTableItem("adjustmentTotal", v, index)} /> ) } ]; break; case "adjustTo": item.com = [ { width: 220, type: "custom", key: "adjustTo", render: (text, record, index, onEdit) => { return ( this.handleChangeTableItem("adjustTo", v, index)} /> ); } } ]; break; default: break; } return { ...item, display: true, width: "20%" }; }) }); } }).catch(() => { this.setState({ loading: { ...loading, query: false } }); }); }; compensationCategoryType = (id, index) => { const { dataSource } = this.state; compensationCategoryType({ id }).then(({ status, data }) => { if (status) { this.setState({ dataSource: _.map(dataSource, (item, idx) => { if (index === idx) { return { ...item, adjustTo: "", adjustToOptions: [], categoryType: "", categoryTypeOptions: _.map(data, child => ({ key: child.id, showname: child.content })) }; } else { return { ...item }; } }) }); } }); }; getEmployeeListToCompensation = () => { const billMonth = getQueryString("billMonth"); const paymentOrganization = getQueryString("paymentOrganization"); const payload = { billMonth, paymentOrganization, pageNum: 1, pageSize: 100 }; return getEmployeeListToCompensation(payload); }; getCompensationComTotal = (payload, index, categoryType) => { const { dataSource } = this.state; getCompensationComTotal(payload).then(({ status, data }) => { if (status && !_.isEmpty(data)) { this.setState({ dataSource: _.map(dataSource, (item, idx) => { if (index === idx) { return { ...item, companyTotal: data[0].totalNum, adjustToOptions: categoryType ? _.map(categoryType.split(","), tmpV => { return _.find(item.categoryTypeOptions, tmpJ => tmpJ.key === tmpV); }) : [] }; } else { return { ...item }; } }) }); } } ); }; handleChangeCom = (dataSource) => { this.setState({ dataSource: _.map(dataSource, (item, index) => { return { ...item, uuid: new Date().getTime() + index }; }) }); }; handleChangeTableItem = (filedItemkey, value, index) => { const { dataSource, targetOptions } = this.state; this.setState({ dataSource: _.map(dataSource, (item, idx) => { if (index === idx) { return { ...item, [filedItemkey]: value }; } else { return { ...item }; } }) }, () => { const paymentOrganization = getQueryString("paymentOrganization"); if (filedItemkey === "target") { this.compensationCategoryType(_.find(targetOptions, it => it.employeeId == value).target, index); } else if (filedItemkey === "categoryType") { _.map(this.state.dataSource, (it, itdx) => { const bool = it.target && it.categoryType; if (bool && itdx === index) { const payload = { paymentOrganization, target: _.find(targetOptions, child => child.employeeId == it.target).target, employeeId: it.target, categoryType: it.categoryType }; this.getCompensationComTotal([payload], itdx, it.categoryType); } }); } else if (filedItemkey === "countryTotal") { this.setState({ dataSource: _.map(this.state.dataSource, (child, childidx) => { if (index === childidx) { return { ...child, adjustmentTotal: (Number(!_.isNil(child.countryTotal) ? child.countryTotal : 0) - Number(child.companyTotal)).toFixed(2) }; } else { return { ...child }; } }) }); } }); }; handleClick = (record) => { const { status, id, paymentOrganization, billMonth } = record; const { targetOptions } = this.state; if (status) { Modal.confirm({ title: "信息确认", content: "确定撤回吗?撤回后该笔调差将失效!", onOk: () => { const payload = { id, paymentOrganization, billMonth }; compensationBack(payload).then(({ status, data, errormsg }) => { if (status) { message.success(data || "撤回成功"); this.setState({ dataSource: _.map(this.state.dataSource, (it, idx) => { if (id === it.id) { return { ...it, status: false, uuid: new Date().getTime() + idx }; } return { ...it, uuid: new Date().getTime() + idx }; }) }); } else { message.error(errormsg || "撤回失败"); } }); }, onCancel: () => { } }); } else { Modal.confirm({ title: "信息确认", content: "确定保存吗?保存后数据将即时更新到台账!", onOk: () => { const { adjustToOptions, categoryTypeOptions, key, target, status, originId, targetOptions: targetOption, billMonth, ...extraParams } = record; const month = getQueryString("billMonth"); const paymentOrg = getQueryString("paymentOrganization"); const tmpObj = { ...extraParams, target }; for (let i in tmpObj) { if (tmpObj[i]) { Object.assign(tmpObj, { [i]: tmpObj[i].toString() }); } } const bool = _.every(Object.keys({ ...extraParams, target }), child => { return !!tmpObj[child]; }); if (!bool) { Modal.warning({ title: "信息确认", content: "必要信息不完整,红色*为必填项!" }); return; } const payload = { ...extraParams, employeeId: target, target: _.find(targetOptions, child => child.employeeId == target).target, billMonth: month, paymentOrganization: paymentOrg }; compensationSave([payload]).then(({ status, data, errormsg }) => { if (status) { const { data: dataMsg, errorMessage = [], successIds = [] } = data; const msg = dataMsg + errorMessage.join(","); !_.isEmpty(errorMessage) ? message.error(msg) : message.success(msg || "保存成功"); if (_.isEmpty(errorMessage)) { this.setState({ dataSource: _.map(this.state.dataSource, it => { if (record.target === it.target && record.uuid === it.uuid) { return { ...it, status: true, id: successIds[0] }; } return { ...it }; }) }); } } else { message.error(errormsg || "保存失败"); } }); }, onCancel: () => { } }); } }; getRowSelection = (rowSelection) => { let sel = { ...rowSelection }; sel.getCheckboxProps = (record) => { return { disabled: record.status }; }; return sel; }; render() { const { dataSource, columns, selectedRowKeys } = this.state; return ( { const { status } = record; return this.handleClick(record)}>{status ? "撤回" : "保存"}; } } ] } datas={dataSource} onChange={this.handleChangeCom} selectedRowKeys={selectedRowKeys} getRowSelection={this.getRowSelection} tableProps={{ x: 800 }} /> ); } } export default AdjustTable;