salary-management-front/pc4mobx/hrmSalary/pages/payroll/payrollDetail/index.js

194 lines
7.2 KiB
JavaScript
Raw Normal View History

import React from "react";
import { inject, observer } from "mobx-react";
import { WeaHelpfulTip, WeaTab } from "ecCom";
import { Button, Spin } from "antd";
import { getQueryString } from "../../../util/url";
import { removePropertyCondition } from "../../../util/response";
import { getSearchs } from "../../../util";
import { getPayrollDetailList, getPayrollDetailSa, getPayrollInfo } from "../../../apis/payroll";
import "./index.less";
@inject("payrollStore")
2022-04-16 13:13:41 +08:00
@observer
export default class PayrollDetail extends React.Component {
constructor(props) {
super(props);
this.state = {
salarySendDetailBaseInfo: {}, loading: false,
condition: [], dataSource: [], columns: [],
pageInfo: { current: 1, pageSize: 10, total: 0 }
};
}
2023-03-17 14:36:45 +08:00
componentWillMount() {
this.getPayrollDetailList();
}
componentDidMount() {
this.getPayrollInfo();
this.getPayrollDetailSa();
window.addEventListener("message", this.handleReceiveMessage, false);
}
componentWillUnmount() {
window.removeEventListener("message", this.handleReceiveMessage, false);
}
handleReceiveMessage = async ({ data }) => {
const { dataSource, columns, pageInfo } = this.state;
const childFrameObj = document.getElementById("atdTable");
const { type, payload } = data;
if (type === "turn") {
const { id, params: { size: pageSize, pageNum: current, total } } = payload;
if (id && id === "PAGEINFO") {
this.setState({
pageInfo: {
...pageInfo,
current,
pageSize,
total
}
}, () => this.getPayrollDetailList({ child: id }));
}
}
if (type === "init") {
childFrameObj.contentWindow.postMessage(JSON.stringify({
dataSource,
columns,
pageInfo,
sumpayload: { salarySendId: getQueryString("id") }
}), "*");
2023-03-17 14:36:45 +08:00
this.getPayrollDetailList({ child: type });
}
};
getPayrollInfo = () => {
const id = getQueryString("id");
getPayrollInfo({ id }).then(({ status, data }) => {
if (status) {
this.setState({ salarySendDetailBaseInfo: data });
}
});
};
getPayrollDetailSa = () => {
const { payrollStore } = this.props;
const { detailListConditionForm } = payrollStore;
getPayrollDetailSa().then(({ status, data }) => {
if (status) {
const condition = removePropertyCondition(data.condition);
this.setState({ condition }, () => {
detailListConditionForm.initFormFields(this.state.condition);
});
}
});
};
getPayrollDetailList = (extra = {}) => {
const childFrameObj = document.getElementById("atdTable");
const { pageInfo } = this.state;
const { child, ...extraParams } = extra;
const salarySendId = getQueryString("id");
const { payrollStore } = this.props;
const { detailListConditionForm: form } = payrollStore;
const payload = { salarySendId, ...pageInfo, ...extraParams, ...form.getFormParams() };
this.setState({ loading: true });
getPayrollDetailList(payload).then(({ status, data }) => {
this.setState({ loading: false });
if (status) {
const { columns, datas: dataSource, pageInfo: pages } = data;
const { pageNum: current, pageSize, total } = pages;
this.setState({
dataSource,
columns: _.map(columns, (item, index) => ({
dataIndex: item.column, title: item.text, width: item.width,
fixed: index <= 2 ? "left" : null
})),
pageInfo: { ...pageInfo, current, pageSize, total }
}, () => {
const { pageInfo, dataSource, columns } = this.state;
2023-03-17 14:36:45 +08:00
(child === "PAGEINFO" || child === "init") &&
childFrameObj.contentWindow.postMessage(JSON.stringify({
dataSource,
columns,
pageInfo,
sumpayload: { salarySendId: getQueryString("id") }
}), "*");
});
}
}).catch(() => this.setState({ loading: false }));
};
handleExportAll = () => {
const salarySendId = getQueryString("id");
const url = `${window.location.origin}/api/bs/hrmsalary/salaryBill/send/exportDetailList?salarySendId=${salarySendId}`;
window.open(url, "_self");
};
handleSearch = () => this.getPayrollDetailList({ child: "PAGEINFO", current: 1 });
render() {
const { salarySendDetailBaseInfo, condition, loading } = this.state;
const { payrollStore } = this.props;
const { setDetailListShowSearchAd, detailListShowSearchAd, detailListConditionForm } = payrollStore;
const { salaryMonth, template, sendNum, sendTotal } = salarySendDetailBaseInfo;
const adBtn = [
<Button type="primary" onClick={this.handleSearch}>搜索</Button>,
<Button type="ghost" onClick={() => detailListConditionForm.resetForm()}>重置</Button>,
<Button type="ghost" onClick={() => setDetailListShowSearchAd(false)}>取消</Button>
];
return (
2023-09-01 14:06:32 +08:00
<div className="payrollDetail">
<WeaTab
searchType={["base", "advanced"]} searchsBasePlaceHolder="请输入姓名"
buttons={[<Button type="primary" onClick={this.handleExportAll}>导出全部</Button>]}
showSearchAd={detailListShowSearchAd} setShowSearchAd={bool => setDetailListShowSearchAd(bool)}
searchsAd={getSearchs(detailListConditionForm, condition, 2)}
buttonsAd={adBtn} onSearch={this.handleSearch}
onSearchChange={v => detailListConditionForm.updateFields({ username: v })}
searchsBaseValue={detailListConditionForm.getFormParams().username}
/>
<div className="titleBar">
<div className="titleBarLeft">
<span>薪资所属月{salaryMonth}</span>
<WeaHelpfulTip
style={{ marginLeft: "10px", marginRight: "10px" }}
width={200}
title={<PayrollTips salarySendDetailBaseInfo={salarySendDetailBaseInfo}/>}
placement="topLeft"
/>
<span>工资单模板{template}</span>
</div>
<div className="titleBarRight">
<span>已发放{sendNum}/<span style={{ color: "red" }}>{sendTotal}</span></span>
</div>
</div>
<div className="tableWrapper">
<Spin spinning={loading}>
<iframe
style={{ border: 0, width: "100%", height: "100%" }}
// src="http://localhost:7607/#/previewTable"
src="/spa/hrmSalary/hrmSalaryCalculateDetail/index.html#/previewTable"
id="atdTable"
/>
</Spin>
</div>
</div>
);
}
2022-09-09 10:29:12 +08:00
}
export const PayrollTips = (props) => {
const { salarySendDetailBaseInfo = {} } = props;
const { salarySobCycle: { salaryCycle, taxCycle, attendCycle, socialSecurityCycle } } = salarySendDetailBaseInfo;
const { fromDate, endDate } = salaryCycle;
const { fromDate: aFromDate, endDate: aEndDate } = attendCycle;
return <div>
<div>薪资周期</div>
<div><span>{fromDate}</span><span></span><span>{endDate}</span></div>
<div>税款所属期</div>
<div>{taxCycle}</div>
<div>考勤取值周期</div>
<div><span>{aFromDate}</span><span></span><span>{aEndDate}</span></div>
<div>福利台账月份</div>
<div>{`引用的${socialSecurityCycle}福利台账数据`}</div>
</div>;
};