salary-management-front/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.js

572 lines
18 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 { inject, observer } from "mobx-react";
import { Button, DatePicker, Dropdown, Menu, message, Modal } from "antd";
import { WeaLocaleProvider, WeaNewScroll, WeaTop } from "ecCom";
import { renderNoright } from "../../../util";
import Accountdialog from "./components/accountDialog";
import AbnormalDrawer from "./components/abnormalDrawer";
import moment from "moment";
import _ from "lodash";
import ProgressModal from "../../../components/progressModal";
import { getCalculateProgress } from "../../../apis/calculate";
import "./index.less";
import UnifiedTable from "../../../components/UnifiedTable";
const { getLabel } = WeaLocaleProvider;
const MonthPicker = DatePicker.MonthPicker;
@inject("standingBookStore", "taxAgentStore")
@observer
export default class StandingBook extends React.Component {
constructor(props) {
super(props);
this.state = {
value: "",
selectedKey: "0",
tableParams: {
startTime: moment(new Date()).startOf("year").format("YYYY-MM"),
endTime: moment(new Date()).startOf("month").format("YYYY-MM")
},
current: 1,
dialogProps: {
title: "",
visible: false,
options: [],
isAdmin: false
},
drawerProps: {
title: "",
visible: false
},
tableData: {
list: [],
columns: [],
total: 0
},
dbnormalTableData: {
list: [],
total: 0
},
adminData: {
isDefaultOpen: false,
isAdminEnable: false,
isChief: false,
isOpenDevolution: false
},
progressVisible: false,
progress: 0
};
this.payload = {};
this.pageInfo = { current: 1, pageSize: 10 };
}
componentDidMount() {
this.init();
}
init = () => {
const { current, dialogProps } = this.state;
const {
taxAgentStore: { getPermission, fetchTaxAgentOption },
standingBookStore: { getAdminTaxAgentList }
} = this.props;
getPermission().then(({ status, data }) => {
if (status) {
this.setState({ adminData: data });
if (data.isOpenDevolution) {
getAdminTaxAgentList().then((data) => {
let taxAgentList = data.map(item => {
let result = {};
result.showname = item.name;
result.key = item.id + "";
result.selected = false;
return result;
});
this.setState({
dialogProps: {
...dialogProps,
options: taxAgentList,
isAdmin: true
}
});
});
} else {
fetchTaxAgentOption().then(({ data }) => {
let taxAgentList = data.map(item => {
let result = {};
result.showname = item.content;
result.key = item.id + "";
result.selected = false;
return result;
});
this.setState({
dialogProps: {
...dialogProps,
options: taxAgentList
}
});
});
}
this.getCommonList({ ...this.state.tableParams, current });
}
});
};
getCommonList = (payload = {}) => {
const { getCommonList } = this.props.standingBookStore;
getCommonList({ ...payload }).then(({ list, columns, total, pageNum }) => {
columns = _.map(columns, (it) => {
if (it.dataIndex === "billMonth") {
it = {
...it,
render: (text, r) => {
const { billMonth, creator } = r;
return (
<a
href="javascript:void(0);"
className="linkTo"
onClick={() => this.handleGoDetail(billMonth, "detail", r.paymentOrganizationId, creator)}>
{text}
</a>
);
}
};
}
return { ...it };
});
if (!this.state.adminData.isDefaultOpen || (this.state.adminData.isDefaultOpen && this.state.adminData.isAdminEnable)) {
columns = [
...columns,
{
title: "操作",
dataIndex: "operate",
width: 150,
key: "operate",
render: (text, r) => {
const { billStatus, billMonth, creator } = r;
return (
<React.Fragment>
{billStatus === "0" && (
<a
href="javascript:void(0);"
style={{ marginRight: 10 }}
onClick={() => this.handleGoDetail(billMonth, "", r.paymentOrganizationId, creator)}>
核算
</a>
)}
{billStatus === "0" && (
<a
href="javascript:void(0);"
style={{ marginRight: 10 }}
onClick={() => this.handleOperate({
key: "archive",
billMonth,
paymentOrganizationId: r.paymentOrganizationId,
creator
})}>
归档
</a>
)}
{billStatus === "1" && (
<a
href="javascript:void(0);"
style={{ marginRight: 10 }}
onClick={() => this.handleOperate({
key: "view",
billMonth,
paymentOrganizationId: r.paymentOrganizationId,
creator
})}>
查看
</a>
)}
{billStatus === "1" && (
<a
href="javascript:void(0);"
onClick={() => this.socialSecurityBenefitsRecalculate({ id: r.id })}>
重新核算
</a>
)}
{billStatus === "0" && (
<Dropdown
overlay={
<Menu
onClick={({ key }) =>
this.handleOperate({
key,
billMonth,
paymentOrganizationId: r.paymentOrganizationId,
creator
})
}>
<Menu.Item key="delete">删除</Menu.Item>
</Menu>
}>
<i className="icon-coms-more" style={{ marginLeft: 10 }}/>
</Dropdown>
)}
</React.Fragment>
);
}
}
];
}
this.setState({
tableData: {
list,
columns,
total
},
current: pageNum
});
});
};
socialSecurityBenefitsRecalculate = (params) => {
const { socialSecurityBenefitsRecalculate } = this.props.standingBookStore;
socialSecurityBenefitsRecalculate(params).then(() => {
message.success("重新核算成功");
this.init();
}).catch(err => {
message.error(err);
});
};
// 异常详情列表
inspectList = (payload) => {
const { inspectList } = this.props.standingBookStore;
this.payload = payload;
inspectList({ ...payload }).then(({ list, total }) => {
this.setState({
dbnormalTableData: {
list,
total
}
});
});
};
// 异常详情分页回调
handlePageChange(value) {
const { inspectList } = this.props.standingBookStore;
inspectList({ ...this.payload, current: value }).then(({ list, total }) => {
this.setState({
dbnormalTableData: {
list,
total
}
});
});
}
handleGoDetail = (billMonth, detail, paymentOrganization, creator) => {
if (detail) {
window.open(
`/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBookDetail?type=${detail}&billMonth=${billMonth}&paymentOrganization=${paymentOrganization}&creator=${creator}`
);
} else {
window.open(
`/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBookDetail?billMonth=${billMonth}&paymentOrganization=${paymentOrganization}&creator=${creator}`
);
}
};
handleOperate = (payload) => {
const { siaccountFile, siaccountDelete, deleteLoading } =
this.props.standingBookStore;
const { key, billMonth, paymentOrganizationId, creator } = payload;
switch (key) {
case "archive":
Modal.confirm({
title: "确认信息",
content: "确认要归档吗?",
onOk: () => {
siaccountFile({ billMonth, paymentOrganization: paymentOrganizationId }).then((res) => {
const { current } = this.state;
this.getCommonList({ ...this.state.tableParams, current });
});
},
onCancel: () => {
}
});
break;
case "detail":
this.inspectList({ billMonth });
this.setState({
drawerProps: {
...this.state.drawerProps,
title: "核算异常",
visible: true
}
});
break;
case "delete":
Modal.confirm({
title: "确认信息",
content: "确认删除本条数据吗?",
confirmLoading: deleteLoading,
onOk: () => {
siaccountDelete({ billMonth, paymentOrganization: paymentOrganizationId }).then(() => {
message.success("删除成功");
this.getCommonList({
...this.state.tableParams,
current: this.state.current
});
});
},
onCancel: () => {
}
});
break;
case "view":
this.handleGoDetail(billMonth, "detail", paymentOrganizationId, creator);
break;
default:
break;
}
};
handleOk = async (formVal) => {
const { save } = this.props.standingBookStore;
const { billMonth, ...extra } = formVal;
const payload = {
billMonth: moment(billMonth).format("YYYY-MM"),
...extra
};
const { data: saveData } = await save(payload);
this.setState({
progressVisible: true
}, () => {
this.timer = setInterval(() => {
getCalculateProgress(moment(billMonth).format("YYYY-MM")).then(({ status, data }) => {
if (status) {
if (!data.status) {
clearInterval(this.timer);
this.setState({
progressVisible: false,
progress: 0
});
return;
}
if (this.state.progress !== 100) {
this.setState({
progress: (Number(data.progress).toFixed(2)) * 100
});
} else {
clearInterval(this.timer);
this.setState({
progressVisible: false,
progress: 0
}, () => {
message.success("核算成功");
this.handleClose();
this.getCommonList({
...this.state.tableParams,
current: this.state.current
});
this.handleGoDetail(moment(billMonth).format("YYYY-MM"), "", extra.paymentOrganization ? extra.paymentOrganization : "", saveData);
});
}
} else {
clearInterval(this.timer);
this.setState({
progressVisible: false,
progress: 0
});
}
}).catch(() => {
clearInterval(this.timer);
this.setState({
progressVisible: false,
progress: 0
});
});
}, 600);
});
};
handleClose = () => {
this.setState({
dialogProps: {
...this.state.dialogProps,
title: "",
visible: false
}
});
};
handleChangeMonth = (type, val) => {
this.setState({
tableParams: {
...this.state.tableParams,
[type]: val && moment(val).format("YYYY-MM")
}
});
this.getCommonList({
...this.state.tableParams,
[type]: val && moment(val).format("YYYY-MM"),
current: this.state.current
});
};
handleShowSizeChange(pageInfo) {
this.getCommonList({
...this.state.tableParams,
...pageInfo
});
}
render() {
const { standingBookStore, taxAgentStore: { showOperateBtn } } = this.props;
const {
inspectLoading,
loading,
hasRight,
tableStore
} = standingBookStore;
const { list, columns, total } = this.state.tableData;
const { startTime, endTime } = this.state.tableParams;
const { dialogProps, drawerProps } = this.state;
const abnormalColumns = _.map(
_.filter(tableStore.columns, (it) => it.hide && it.hide === "false"),
(item) => ({ ...item, width: item.oldWidth })
);
if (!hasRight && !loading) return renderNoright();
const rightBtns = [
// 右键菜单
<Button
type="primary"
onClick={() => {
this.setState({
dialogProps: {
...this.state.dialogProps,
title: "核算",
visible: true
}
});
}}>
核算
</Button>
];
const pagination = {
...this.pageInfo,
total: total,
showTotal: (total) => `${total}`,
pageSizeOptions: ["10", "20", "50", "100"],
showSizeChanger: true,
showQuickJumper: true,
onShowSizeChange: (current, pageSize) => {
this.pageInfo = { ...this.pageInfo, current, pageSize };
this.handleShowSizeChange(this.pageInfo);
},
onChange: (current) => {
this.pageInfo = { ...this.pageInfo, current };
this.handleShowSizeChange(this.pageInfo);
}
};
return (
<div className="standingbookWrapper">
<WeaTop
title="社保福利台账" // 文字
icon={<i className="icon-coms-fa"/>} // 左侧图标
iconBgcolor="#F14A2D" // 左侧图标背景色
buttons={showOperateBtn ? rightBtns : []}
>
<div className="billDateWrapper">
<div>账单月份</div>
<MonthPicker
value={startTime}
format="YYYY-MM"
disabledDate={(current) => {
return current && endTime && current.getTime() > new Date(endTime).getTime();
}}
onChange={(val) => this.handleChangeMonth("startTime", val)}
/>
<span className="to"></span>
<MonthPicker
value={endTime}
format="YYYY-MM"
disabledDate={(current) => {
return current && startTime && current.getTime() < new Date(startTime).getTime();
}}
onChange={(val) => this.handleChangeMonth("endTime", val)}
/>
</div>
<div className="tableWrapper">
<WeaNewScroll height="100%">
<UnifiedTable
loading={loading}
columns={_.filter(columns, (it) => it.dataIndex !== "id").map(item => {
if (item.dataIndex !== "operate" && item.dataIndex !== "billStatus") {
return {
...item,
width: 150,
render: (text) => {
return <span className="ellipsis" title={text}>{text}</span>;
}
};
}
if (item.dataIndex === "billStatus") {
return {
...item,
render: (_, record) => {
return <span
className="ellipsis">{record.billStatus === "1" ? getLabel(18800, "已归档") : getLabel(17999, "未归档")}</span>;
}
};
}
return { ...item };
})}
dataSource={list}
pagination={pagination}
xWidth={columns.length * 120}
/>
</WeaNewScroll>
</div>
{dialogProps.visible && (
<Accountdialog
{...dialogProps}
onCancel={() => this.handleClose()}
onOk={this.handleOk}
loading={loading}
/>
)}
{/*核算进度条*/}
{
this.state.progressVisible &&
<ProgressModal
visible={this.state.progressVisible}
onCancel={() => {
this.setState({ progressVisible: false, progress: 0 });
}}
progress={this.state.progress}
/>
}
{drawerProps.visible && (
<AbnormalDrawer
{...drawerProps}
onClose={() => {
this.setState({
drawerProps: {
...this.state.drawerProps,
title: "",
visible: false
}
});
}}
columns={abnormalColumns}
dataSource={this.state.dbnormalTableData.list}
total={this.state.dbnormalTableData.total}
onPageChange={(value) => {
this.handlePageChange(value);
}}
// onOk={this.handleOk}
loading={inspectLoading}
/>
)}
</WeaTop>
</div>
);
}
}