salary-management-front/pc4mobx/hrmSalary/pages/calculateDetail/compareDetail.js

289 lines
8.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from "react";
import { Button } from "antd";
import { WeaCheckbox, WeaInputSearch } from "ecCom";
import { getQueryString } from "../../util/url";
import CustomTab from "../../components/customTab";
import { inject, observer } from "mobx-react";
import CompareDetailImportModal from "./compareDetailImportModal";
import CustomPaginationTable from "../../components/customPaginationTable";
import { salaryacctAcctresultCheckAuth } from "../../apis/calculate";
import Authority from "../mySalary/authority";
@inject("calculateStore", "taxAgentStore")
@observer
export default class CompareDetail extends React.Component {
constructor(props) {
super(props);
this.id = "";
this.state = {
onlyDiffEmployee: true,
onlyDiffSalaryItem: true,
importModalVisible: false,
searchValue: "",
calculateAuth: false
};
this.pageInfo = { current: 1, pageSize: 10 };
}
componentWillMount() {
this.id = getQueryString("id");
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffEmployee, onlyDiffSalaryItem } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
current: 1
};
fetchComparisonResultList(params);
this.salaryacctAcctresultCheckAuth({ salaryAcctRecordId: getQueryString("id") });
}
salaryacctAcctresultCheckAuth = (params) => {
const { taxAgentStore: { PageAndOptAuth } } = this.props;
const { isOpenDevolution } = PageAndOptAuth;
if (isOpenDevolution) {
salaryacctAcctresultCheckAuth(params).then(({ status, data }) => {
this.setState({ calculateAuth: data && status });
});
} else {
this.setState({ calculateAuth: true });
}
};
getColumns = (columns) => {
let newColumns = [...columns];
newColumns.map(item => {
let n = Number(item.dataIndex);
if (!isNaN(n)) { // 数字
item.render = (text, record) => {
const showDifference = record[`${item.dataIndex}_type`] === "number";
const { acctResultValue, excelResultValue } = record[item.dataIndex];
return (
<div>
<div>系统值{acctResultValue}</div>
<div>线下值{excelResultValue}</div>
{
showDifference &&
<div style={{ color: "red" }}>
差值{calculateCompares(acctResultValue, excelResultValue)}
</div>
}
</div>
);
};
} else {
item.fixed = "left";
}
});
return newColumns;
};
// 导入
handleImportClick() {
this.setState({
importModalVisible: true
});
}
// 分页变化
handleDataPageChange(value) {
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffEmployee, onlyDiffSalaryItem } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
current: value,
...this.pageInfo
};
fetchComparisonResultList(params);
}
handleShowSizeChange(pageInfo) {
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffEmployee, onlyDiffSalaryItem } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
...pageInfo
};
fetchComparisonResultList(params);
}
// 只显示有差异的人员 变化
onlyDiffEmployeeChange(value) {
let onlyDiffEmployee = value == 1 ? true : false;
this.setState({ onlyDiffEmployee });
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffSalaryItem } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
employeeName: this.state.searchValue,
current: 1
};
fetchComparisonResultList(params);
}
// 只显示有差异的薪资项目 变化
onlyDiffSalaryItemChange(value) {
let onlyDiffSalaryItem = value == 1 ? true : false;
this.setState({ onlyDiffSalaryItem });
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffEmployee } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
employeeName: this.state.searchValue,
current: 1
};
fetchComparisonResultList(params);
}
// 搜索
handleSearch(value) {
const { calculateStore: { fetchComparisonResultList } } = this.props;
const { onlyDiffEmployee, onlyDiffSalaryItem } = this.state;
let params = {
onlyDiffEmployee,
onlyDiffSalaryItem,
salaryAcctRecordId: this.id,
employeeName: value,
current: 1
};
fetchComparisonResultList(params);
}
// 导出
handleExportClick() {
window.open(
"/api/bs/hrmsalary/salaryacct/comparisonresult/export?salaryAcctRecordId=" + this.id
);
}
// 线下对比导入
handleComparisonFinish() {
this.pageInfo.current = 1;
this.pageInfo.pageSize = 10;
this.handleSearch(this.state.searchValue);
}
render() {
const {
calculateStore: {
comparisonResultPageInfo,
comparisonResultTableStore,
loading,
comparisonResultColumns
}
} = this.props;
const { importModalVisible, searchValue, calculateAuth } = this.state;
const renderRightOperation = () => {
return (
<div style={{ display: "inline-block" }}>
<Button type="primary" style={{ marginRight: "10px" }} onClick={() => this.handleImportClick()}>导入</Button>
<Button type="default" style={{ marginRight: "10px" }} onClick={() => this.handleExportClick()}>导出</Button>
<WeaInputSearch value={searchValue} placeholder="请输入姓名" onChange={(value) => {
this.setState({
searchValue: value
});
}} onSearch={(value) => {
this.handleSearch(value);
}}/>
</div>
);
};
const renderLeftOperation = () => {
return (
<div>
<WeaCheckbox content="只显示有差异的人员" value={this.state.onlyDiffEmployee ? 1 : 0}
onChange={(value) => {
this.onlyDiffEmployeeChange(value);
}}
/>
<WeaCheckbox content="只显示有差异的薪资项目" value={this.state.onlyDiffSalaryItem ? 1 : 0}
onChange={(value) => {
this.onlyDiffSalaryItemChange(value);
}}
/>
</div>
);
};
return (
<Authority ecId={`${this && this.props && this.props.ecId || ""}_Authority@lulowc`}
store={{ loading: false, hasRight: calculateAuth }}>
<div className="compareDetail">
<CustomTab
searchOperationItem={
renderRightOperation()
}
leftOperation={
renderLeftOperation()
}
/>
<div className="titleBarWrapper">
<div className="titleBar">
<span className="leftTitle">公式=</span>
<span className="rightTitle">系统值线下值<span style={{ color: "red" }}>差值</span></span>
</div>
</div>
<div className="tableWrapper">
<CustomPaginationTable
loading={loading}
dataSource={comparisonResultPageInfo.list ? comparisonResultPageInfo.list : []}
columns={this.getColumns(comparisonResultColumns ? comparisonResultColumns : [])}
scroll={{
x: this.getColumns(comparisonResultColumns ? comparisonResultColumns : []).length * 150,
y: `calc(100vh - 199px)`
}}
total={comparisonResultPageInfo.total}
current={comparisonResultPageInfo.pageNum}
pageSize={this.pageInfo.pageSize}
onPageChange={(value) => {
this.pageInfo.current = value;
this.handleDataPageChange(value);
}}
onShowSizeChange={(current, pageSize) => {
this.pageInfo = { current, pageSize };
this.handleShowSizeChange(this.pageInfo);
}}
/>
</div>
{
importModalVisible && <CompareDetailImportModal
visiable={importModalVisible}
id={this.id}
onFinish={() => {
this.handleComparisonFinish();
}}
onCancel={() => {
this.setState({
importModalVisible: false
});
}}
/>
}
</div>
</Authority>
);
}
}
// 计算差值
export const calculateCompares = (systemValue = 0, excelValue = 0) => {
const systemNum = Number(systemValue);
const excelNum = Number(excelValue);
return (systemNum - excelNum).toFixed(2);
};