Merge branch 'feature/v2-社保福利档案调差退差-1208' into develop
This commit is contained in:
commit
4413484c0a
|
|
@ -266,6 +266,37 @@ export const getPaymentById = ({ id }) => {
|
|||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
}
|
||||
}).then(res => res.json());
|
||||
};
|
||||
//获取社保福利项列表
|
||||
export const compensationCategoryType = ({ id }) => {
|
||||
return fetch(`/api/bs/hrmsalary/siaccount/compensationCategoryType?id=${id}`, {
|
||||
method: "GET",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
//获取调差列表
|
||||
export const getCompensationList = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/compensationList", params);
|
||||
};
|
||||
//获取可调差的人员列表
|
||||
export const getEmployeeListToCompensation = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/getEmployeeListToCompensation", params);
|
||||
};
|
||||
//获取当前调差行-公司方支出总计
|
||||
export const getCompensationComTotal = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/compensationComTotal", params);
|
||||
};
|
||||
//社保调差保存
|
||||
export const compensationSave = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/compensationSave", params);
|
||||
};
|
||||
//撤回调差数据
|
||||
export const compensationBack = (params) => {
|
||||
return postFetch("/api/bs/hrmsalary/siaccount/compensationBack", params);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,428 @@
|
|||
/*
|
||||
* 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: []
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getCompensationList().then(r => {
|
||||
});
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
}
|
||||
|
||||
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 (
|
||||
<WeaSelect
|
||||
showSearch
|
||||
optionFilterProp="children"
|
||||
options={targetOptions}
|
||||
value={record.target}
|
||||
style={{ width: "100%" }}
|
||||
viewAttr={3}
|
||||
onChange={v => this.handleChangeTableItem("target", v, index)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "welfareType":
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "welfareType",
|
||||
render: (text, record, index, onEdit) => (
|
||||
<WeaSelect
|
||||
options={[{ key: "1", showname: "社保" }]}
|
||||
value={record.welfareType}
|
||||
viewAttr={3}
|
||||
onChange={v => this.handleChangeTableItem("welfareType", v, index)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "categoryType":
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "categoryType",
|
||||
render: (text, record, index, onEdit) => (
|
||||
<WeaSelect
|
||||
multiple
|
||||
options={record.categoryTypeOptions || []}
|
||||
value={record.categoryType}
|
||||
viewAttr={3}
|
||||
onChange={v => this.handleChangeTableItem("categoryType", v, index)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "countryTotal":
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "countryTotal",
|
||||
render: (text, record, index, onEdit) => (
|
||||
<WeaInputNumber
|
||||
precision={2}
|
||||
value={record.countryTotal}
|
||||
viewAttr={3}
|
||||
onChange={v => this.handleChangeTableItem("countryTotal", v, index)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "companyTotal":
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "companyTotal",
|
||||
render: (text, record, index, onEdit) => (
|
||||
<WeaInputNumber
|
||||
precision={2}
|
||||
disabled
|
||||
value={record.companyTotal}
|
||||
onChange={v => this.handleChangeTableItem("companyTotal", v, index)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "adjustmentTotal":
|
||||
item.title = <span>
|
||||
<span>{item.title}</span>
|
||||
<WeaHelpfulTip
|
||||
width={200}
|
||||
title="国家核算金额(单位) - 公司核算金额(单位)"
|
||||
placement="topLeft"
|
||||
/>
|
||||
</span>;
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "adjustmentTotal",
|
||||
render: (text, record, index, onEdit) => (
|
||||
<WeaInputNumber
|
||||
precision={2}
|
||||
disabled
|
||||
value={record.adjustmentTotal}
|
||||
onChange={v => this.handleChangeTableItem("adjustmentTotal", v, index)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
];
|
||||
break;
|
||||
case "adjustTo":
|
||||
item.com = [
|
||||
{
|
||||
width: 220,
|
||||
type: "custom",
|
||||
key: "adjustTo",
|
||||
render: (text, record, index, onEdit) => {
|
||||
return (
|
||||
<WeaSelect
|
||||
options={record.adjustToOptions || []}
|
||||
value={record.adjustTo}
|
||||
viewAttr={3}
|
||||
onChange={v => 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 });
|
||||
};
|
||||
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(child.countryTotal) - 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.getCompensationList().then(r => {
|
||||
});
|
||||
} else {
|
||||
message.error(errormsg || "撤回失败");
|
||||
}
|
||||
});
|
||||
},
|
||||
onCancel: () => {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Modal.confirm({
|
||||
title: "信息确认",
|
||||
content: "确定保存吗?保存后数据将即时更新到台账!",
|
||||
onOk: () => {
|
||||
const { adjustToOptions, categoryTypeOptions, key, target, ...extraParams } = record;
|
||||
const month = getQueryString("billMonth");
|
||||
const paymentOrg = getQueryString("paymentOrganization");
|
||||
const bool = _.every(Object.keys(record), child => !!record[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 } = data;
|
||||
message.success(dataMsg || "保存成功");
|
||||
this.getCompensationList().then(r => {
|
||||
});
|
||||
} 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 (
|
||||
<WeaTableEdit
|
||||
deleteConfirm
|
||||
showCopy={false}
|
||||
columns={
|
||||
[
|
||||
...columns,
|
||||
{
|
||||
dataIndex: "operate",
|
||||
title: "操作",
|
||||
key: "operate",
|
||||
width: 80,
|
||||
render: (text, record) => {
|
||||
const { status } = record;
|
||||
return <a href="javascript: void(0);"
|
||||
onClick={() => this.handleClick(record)}>{status ? "撤回" : "保存"}</a>;
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
datas={dataSource}
|
||||
onChange={this.handleChangeCom}
|
||||
selectedRowKeys={selectedRowKeys}
|
||||
getRowSelection={this.getRowSelection}
|
||||
tableProps={{ x: 800 }}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default AdjustTable;
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 调差
|
||||
* Description:
|
||||
* Date: 2022/12/5
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaSlideModal } from "ecCom";
|
||||
import { Button, message, Modal } from "antd";
|
||||
import SlideModalTitle from "../../../../components/slideModalTitle";
|
||||
import AdjustTable from "./adjustTable";
|
||||
import "./index.less";
|
||||
import { getQueryString } from "../../../../util/url";
|
||||
import { compensationSave } from "../../../../apis/standingBook";
|
||||
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class AdjustmentSlide extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
current: 0,
|
||||
loading: false,
|
||||
taxAgentId: ""
|
||||
};
|
||||
this.adjustTableRef = null;
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible) {
|
||||
}
|
||||
}
|
||||
|
||||
handleSave = () => {
|
||||
let { dataSource, targetOptions } = this.adjustTableRef.state;
|
||||
dataSource = _.filter(dataSource, it => !it.id);
|
||||
const billMonth = getQueryString("billMonth");
|
||||
const paymentOrganization = getQueryString("paymentOrganization");
|
||||
let bool = true;
|
||||
_.map(dataSource, item => {
|
||||
bool = _.every(Object.keys(item), child => !!item[child]);
|
||||
});
|
||||
if (_.isEmpty(dataSource)) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: "请添加调差项!"
|
||||
});
|
||||
return;
|
||||
} else if (!bool) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: "必要信息不完整,红色*为必填项!"
|
||||
});
|
||||
return;
|
||||
}
|
||||
const payload = _.map(dataSource, item => {
|
||||
const { adjustToOptions, categoryTypeOptions, target, ...extraParams } = item;
|
||||
return {
|
||||
...extraParams,
|
||||
employeeId: target,
|
||||
target: _.find(targetOptions, child => child.employeeId == target).target,
|
||||
billMonth,
|
||||
paymentOrganization
|
||||
};
|
||||
});
|
||||
this.setState({ loading: true });
|
||||
compensationSave(payload).then(({ status, data, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { data: dataMsg } = data;
|
||||
message.success(dataMsg || "保存成功");
|
||||
this.adjustTableRef.getCompensationList().then(r => {
|
||||
});
|
||||
} else {
|
||||
message.error(errormsg || "保存失败");
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
renderCustomOperate = () => {
|
||||
return [
|
||||
<Button type="primary" onClick={this.handleSave}>保存全部</Button>
|
||||
];
|
||||
};
|
||||
|
||||
render() {
|
||||
const { title, visible, onCancel, taxAgentStore: { showOperateBtn } } = this.props;
|
||||
const { loading } = this.state;
|
||||
return (
|
||||
<WeaSlideModal
|
||||
className="adjustmentWrapper"
|
||||
visible={visible}
|
||||
top={0}
|
||||
width={100}
|
||||
height={100}
|
||||
direction="right"
|
||||
measure="%"
|
||||
title={
|
||||
<SlideModalTitle
|
||||
subtitle={title}
|
||||
tabs={[]}
|
||||
loading={loading}
|
||||
showOperateBtn={showOperateBtn}
|
||||
editable={false}
|
||||
customOperate={this.renderCustomOperate()}
|
||||
/>
|
||||
}
|
||||
content={<AdjustTable ref={dom => this.adjustTableRef = dom}/>}
|
||||
onClose={onCancel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default AdjustmentSlide;
|
||||
|
||||
|
|
@ -93,3 +93,47 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//退差人员选择框
|
||||
.regSelectWrapper {
|
||||
}
|
||||
|
||||
//调差抽屉
|
||||
.adjustmentWrapper {
|
||||
.wea-slide-modal-title {
|
||||
height: initial;
|
||||
line-height: initial;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.rodal-close {
|
||||
z-index: 99;
|
||||
top: 10px !important;
|
||||
}
|
||||
|
||||
.wea-table-edit table {
|
||||
table-layout: fixed;
|
||||
|
||||
.text-elli {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (min-width: 1260px) {
|
||||
.adjustmentWrapper {
|
||||
.reqTopWrapper .wea-new-top-req-title > div:first-child > div {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1060px) and (max-width: 1260px) {
|
||||
.adjustmentWrapper {
|
||||
.reqTopWrapper .wea-new-top-req-title > div:first-child > div {
|
||||
max-width: calc(100% - 96px) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import { calcPageNo, getSearchs } from "../../../../util";
|
|||
import { getQueryString } from "../../../../util/url";
|
||||
import ProgressModal from "../../../../components/progressModal";
|
||||
import AcctResultImportModal from "../../../calculateDetail/acctResult/importModal/acctResultImportModal";
|
||||
import AdjustmentSlide from "./adjustmentSlide";
|
||||
import _ from "lodash";
|
||||
import "./index.less";
|
||||
|
||||
|
|
@ -30,6 +31,10 @@ export default class NormalIndex extends Component {
|
|||
title: "",
|
||||
visible: false
|
||||
},
|
||||
adjustSlide: {
|
||||
title: "调差",
|
||||
visible: false
|
||||
},
|
||||
tableData: {
|
||||
list: [],
|
||||
columns: [],
|
||||
|
|
@ -44,6 +49,7 @@ export default class NormalIndex extends Component {
|
|||
}
|
||||
};
|
||||
this.timer = null;
|
||||
this.timerDelete = null;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
|
@ -61,6 +67,9 @@ export default class NormalIndex extends Component {
|
|||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
}
|
||||
if (this.timerDelete) {
|
||||
clearInterval(this.timerDelete);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
|
|
@ -270,14 +279,46 @@ export default class NormalIndex extends Component {
|
|||
title: "确认信息",
|
||||
content: "确认删除勾选的数据吗?",
|
||||
onOk: () => {
|
||||
this.setState({
|
||||
progressVisible: true
|
||||
}, () => {
|
||||
this.timerDelete = setInterval(() => {
|
||||
if (this.state.progress !== 100) {
|
||||
this.setState({
|
||||
progress: this.state.progress + 10
|
||||
});
|
||||
} else {
|
||||
clearInterval(this.timerDelete);
|
||||
this.setState({
|
||||
progressVisible: false,
|
||||
progress: 0
|
||||
}, () => {
|
||||
message.success("删除成功");
|
||||
selectedKey === "1"
|
||||
? this.getNormalList({
|
||||
billMonth,
|
||||
paymentOrganization,
|
||||
current: calcPageNo(this.state.tableData.total, this.state.current, 10, includes.length)
|
||||
})
|
||||
: this.getSupplementaryList({
|
||||
billMonth,
|
||||
current: calcPageNo(this.state.tableData.total, this.state.current, 10, includes.length),
|
||||
paymentOrganization
|
||||
});
|
||||
});
|
||||
}
|
||||
}, 800);
|
||||
});
|
||||
|
||||
siaccountCommonDelete({
|
||||
billMonth,
|
||||
includes,
|
||||
ids,
|
||||
paymentOrganization
|
||||
}).then(() => {
|
||||
clearInterval(this.timerDelete);
|
||||
message.success("删除成功");
|
||||
this.setState({ selectedRowKeys: [] });
|
||||
this.setState({ selectedRowKeys: [], progressVisible: false, progress: 0 });
|
||||
selectedKey === "1"
|
||||
? this.getNormalList({
|
||||
billMonth,
|
||||
|
|
@ -290,6 +331,7 @@ export default class NormalIndex extends Component {
|
|||
paymentOrganization
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
onCancel: () => {
|
||||
}
|
||||
|
|
@ -331,7 +373,7 @@ export default class NormalIndex extends Component {
|
|||
this.timer = setInterval(() => {
|
||||
if (this.state.progress !== 100) {
|
||||
this.setState({
|
||||
progress: this.state.progress + 20
|
||||
progress: this.state.progress + 10
|
||||
});
|
||||
} else {
|
||||
clearInterval(this.timer);
|
||||
|
|
@ -352,7 +394,7 @@ export default class NormalIndex extends Component {
|
|||
current: this.state.current
|
||||
});
|
||||
}
|
||||
}, 800);
|
||||
}, 1000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -370,7 +412,7 @@ export default class NormalIndex extends Component {
|
|||
|
||||
render() {
|
||||
const { remarks, billMonth, selectedKey, paymentOrganization } = this.props;
|
||||
const { selectedRowKeys, addProps, date, importParams } = this.state;
|
||||
const { selectedRowKeys, addProps, adjustSlide, importParams } = this.state;
|
||||
const {
|
||||
loading,
|
||||
form,
|
||||
|
|
@ -489,6 +531,14 @@ export default class NormalIndex extends Component {
|
|||
<Button type="primary" onClick={() => {
|
||||
this.handleCommonAccountClick();
|
||||
}}>核算</Button>
|
||||
<Button type="ghost" onClick={() => {
|
||||
this.setState({
|
||||
adjustSlide: {
|
||||
...adjustSlide,
|
||||
visible: true
|
||||
}
|
||||
});
|
||||
}}>调差</Button>
|
||||
</React.Fragment>
|
||||
}
|
||||
{
|
||||
|
|
@ -501,6 +551,7 @@ export default class NormalIndex extends Component {
|
|||
}
|
||||
{/*核算进度条*/}
|
||||
<ProgressModal
|
||||
title={selectedKey === "3" ? "正在删除请稍后" : "正在核算请稍后"}
|
||||
visible={this.state.progressVisible}
|
||||
onCancel={() => {
|
||||
this.setState({ progressVisible: false, progress: 0 });
|
||||
|
|
@ -573,6 +624,17 @@ export default class NormalIndex extends Component {
|
|||
scroll={{ x: 1200, y: "calc(100vh - 233px)" }}
|
||||
/>
|
||||
</Spin>
|
||||
<AdjustmentSlide
|
||||
{...adjustSlide}
|
||||
onCancel={() => {
|
||||
this.setState({
|
||||
adjustSlide: {
|
||||
...adjustSlide,
|
||||
visible: false
|
||||
}
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { WeaDatePicker, WeaDialog, WeaFormItem, WeaSearchGroup, WeaSelect } from "ecCom";
|
||||
import { Button, Modal } from "antd";
|
||||
import { Select } from "../../../ruleConfig";
|
||||
import RegSelect from "./regSelect";
|
||||
import * as API from "../../../../apis/standingBook";
|
||||
|
||||
class RegAddEmployee extends Component {
|
||||
|
|
@ -77,12 +77,6 @@ class RegAddEmployee extends Component {
|
|||
handleSave = () => {
|
||||
const { baseInfo, returnPersonInfo, selectPersonInfo } = this.state;
|
||||
const { onSave } = this.props;
|
||||
const payload = {
|
||||
recessionMonthList: baseInfo.billMonth.split(","),
|
||||
projects: baseInfo.itemsAll ? ["0"] : baseInfo.items.split(","),
|
||||
includes: returnPersonInfo.employee.split(","),
|
||||
excludes: selectPersonInfo.employee.split(",")
|
||||
};
|
||||
if (_.isEmpty(baseInfo.billMonth) || _.isEmpty(baseInfo.items) || _.isEmpty(returnPersonInfo.employee)) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
|
|
@ -90,6 +84,12 @@ class RegAddEmployee extends Component {
|
|||
});
|
||||
return;
|
||||
}
|
||||
const payload = {
|
||||
recessionMonthList: baseInfo.billMonth.split(","),
|
||||
projects: baseInfo.itemsAll ? ["0"] : baseInfo.items.split(","),
|
||||
includes: returnPersonInfo.employee,
|
||||
excludes: selectPersonInfo.employee
|
||||
};
|
||||
onSave(payload);
|
||||
};
|
||||
|
||||
|
|
@ -143,38 +143,26 @@ class RegAddEmployee extends Component {
|
|||
];
|
||||
const returnPersonItems = [
|
||||
{
|
||||
com: Select({
|
||||
multiple: true,
|
||||
label: "对象",
|
||||
viewAttr: 3,
|
||||
showSearch: true,
|
||||
options: returnPersonInfo.employeeOptions,
|
||||
value: returnPersonInfo.employee,
|
||||
onChange: ({ selected }) => {
|
||||
this.setState({ returnPersonInfo: { ...returnPersonInfo, employee: selected } });
|
||||
}
|
||||
})
|
||||
com: <RegSelect
|
||||
label="对象"
|
||||
viewAttr={3}
|
||||
onChange={({ selected }) => this.setState({ returnPersonInfo: { ...returnPersonInfo, employee: selected } })}
|
||||
/>
|
||||
}
|
||||
];
|
||||
const selectPersonItems = [
|
||||
{
|
||||
com: Select({
|
||||
multiple: true,
|
||||
label: "选择人员",
|
||||
viewAttr: 2,
|
||||
showSearch: true,
|
||||
options: selectPersonInfo.employeeOptions,
|
||||
value: selectPersonInfo.employee,
|
||||
onChange: ({ selected }) => {
|
||||
this.setState({ selectPersonInfo: { ...selectPersonInfo, employee: selected } });
|
||||
}
|
||||
})
|
||||
com: <RegSelect
|
||||
label="选择人员"
|
||||
viewAttr={2}
|
||||
onChange={({ selected }) => this.setState({ selectPersonInfo: { ...selectPersonInfo, employee: selected } })}
|
||||
/>
|
||||
}
|
||||
];
|
||||
return (
|
||||
<WeaDialog
|
||||
{...this.props}
|
||||
style={{ width: 900 }}
|
||||
style={{ width: 900, height: 600 }}
|
||||
hasScroll
|
||||
buttons={buttons}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 退差人员选择弹框
|
||||
* Description:
|
||||
* Date: 2022/11/25
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { Button, Tag } from "antd";
|
||||
import { WeaDialog, WeaFormItem, WeaInputSearch, WeaTable } from "ecCom";
|
||||
import * as API from "../../../../apis/standingBook";
|
||||
import "./index.less";
|
||||
|
||||
class RegSelect extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
userName: "",
|
||||
visible: false,
|
||||
loading: false,
|
||||
selectedRowKeys: [],
|
||||
selectedRow: [],
|
||||
dataSource: [],
|
||||
pageInfo: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
total: 0
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
getEmployeeListByTaxAgent = (params = {}) => {
|
||||
const { pageInfo } = this.state;
|
||||
const payload = {
|
||||
...pageInfo,
|
||||
...params
|
||||
};
|
||||
this.setState({ loading: true });
|
||||
API.getEmployeeListByTaxAgent(payload).then(({ status, data }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
const { list: dataSource, pageNum, pageSize, total } = data;
|
||||
this.setState({
|
||||
dataSource,
|
||||
pageInfo: { ...pageInfo, pageNum, pageSize, total }
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleSave = () => {
|
||||
const { onChange } = this.props;
|
||||
this.setState({
|
||||
visible: false
|
||||
}, () => {
|
||||
const { selectedRowKeys } = this.state;
|
||||
onChange({ selected: selectedRowKeys });
|
||||
});
|
||||
};
|
||||
handleClose = (key) => {
|
||||
const { onChange } = this.props;
|
||||
const { selectedRow } = this.state;
|
||||
this.setState({
|
||||
selectedRow: _.filter(selectedRow, it => it.employeeId !== key)
|
||||
}, () => {
|
||||
const { selectedRow } = this.state;
|
||||
this.setState({
|
||||
selectedRowKeys: _.map(selectedRow, it => it.employeeId)
|
||||
});
|
||||
onChange({ selected: _.map(selectedRow, it => it.employeeId) });
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { visible, loading, dataSource, pageInfo, selectedRowKeys, selectedRow, userName } = this.state;
|
||||
const { label, viewAttr } = this.props;
|
||||
const pagination = {
|
||||
current: pageInfo.pageNum,
|
||||
pageSize: pageInfo.pageSize,
|
||||
total: pageInfo.total,
|
||||
showTotal: total => `共 ${total} 条`,
|
||||
showQuickJumper: true,
|
||||
onChange: (current) => {
|
||||
this.setState({ pageInfo: { ...pageInfo, pageNum: current } }, () => {
|
||||
this.getEmployeeListByTaxAgent();
|
||||
});
|
||||
}
|
||||
};
|
||||
const rowSelection = {
|
||||
selectedRowKeys: selectedRowKeys,
|
||||
onChange: (selectedRowKeys) => this.setState({ selectedRowKeys }),
|
||||
onSelect: (record, selected) => {
|
||||
if (selected) {
|
||||
this.setState({ selectedRow: [...selectedRow, record] });
|
||||
} else {
|
||||
this.setState({ selectedRow: _.xorWith(selectedRow, [record], _.isEqual) });
|
||||
}
|
||||
},
|
||||
onSelectAll: (selected, selectedRows, changeRows) => {
|
||||
this.setState({ selectedRow: _.xorWith(selectedRow, changeRows, _.isEqual) });
|
||||
}
|
||||
};
|
||||
const buttons = [
|
||||
<Button type="primary" onClick={this.handleSave}>保存</Button>,
|
||||
<Button type="ghost" onClick={() => this.setState({ visible: false })}>取消</Button>
|
||||
];
|
||||
return (
|
||||
<div className="regSelectWrapper">
|
||||
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }}>
|
||||
{selectedRow.map(tag =>
|
||||
<Tag key={tag.employeeId} closable onClose={() => this.handleClose(tag.employeeId)}>
|
||||
{tag.username}
|
||||
</Tag>
|
||||
)}
|
||||
<Button
|
||||
size="small"
|
||||
type="dashed"
|
||||
onClick={() => this.setState({ visible: true }, () => this.getEmployeeListByTaxAgent())}
|
||||
>添加人员</Button>
|
||||
{
|
||||
_.isEmpty(selectedRow) && viewAttr === 3 &&
|
||||
<span className="wea-required-e9" style={{ verticalAlign: "middle" }}>
|
||||
<img src="/images/BacoError_wev9.png" alt=""/>
|
||||
</span>
|
||||
}
|
||||
</WeaFormItem>
|
||||
<WeaDialog
|
||||
onCancel={() => this.setState({ visible: false })}
|
||||
title="人员"
|
||||
visible={visible}
|
||||
loading={loading}
|
||||
style={{ width: 680, height: 500 }}
|
||||
hasScroll
|
||||
buttons={buttons}
|
||||
>
|
||||
<div style={{ display: "flex", justifyContent: "flex-end", margin: 10 }}>
|
||||
<WeaInputSearch
|
||||
value={userName}
|
||||
placeholder="请输入姓名"
|
||||
onChange={(userName) => this.setState({ userName })}
|
||||
onSearch={() => this.getEmployeeListByTaxAgent({ userName })}
|
||||
/>
|
||||
</div>
|
||||
<WeaTable
|
||||
rowKey="employeeId"
|
||||
columns={[
|
||||
{
|
||||
title: "姓名",
|
||||
dataIndex: "username",
|
||||
key: "username"
|
||||
}
|
||||
]}
|
||||
dataSource={dataSource}
|
||||
loading={loading.query}
|
||||
pagination={pagination}
|
||||
rowSelection={rowSelection}
|
||||
/>
|
||||
</WeaDialog>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default RegSelect;
|
||||
Loading…
Reference in New Issue