salary-management-front/pc4mobx/hrmSalary/pages/dataAcquisition/otherDeduct/taxSetDialog.js

144 lines
6.2 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.

/*
* 其他免税扣除设置
*
* @Author: 黎永顺
* @Date: 2024/12/24
* @Wechat:
* @Email: 971387674@qq.com
* @description:
*/
import React, { Component } from "react";
import { WeaButtonIcon, WeaDialog, WeaLocaleProvider, WeaTable } from "ecCom";
import { message, Modal, Spin } from "antd";
import { postFetch } from "../../../util/request";
import DetailSettingsDialog from "./detailSettingsDialog";
const getLabel = WeaLocaleProvider.getLabel;
class TaxSetDialog extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: [], columns: [], loading: false, pageInfo: { current: 1, pageSize: 10, total: 0 },
selectedRowKeys: [], detailSettingsDialog: { visible: false, dataType: "", mainId: "", id: "", record: {} }
};
}
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible && nextProps.visible) {
this.setState({
detailSettingsDialog: { ...this.state.detailSettingsDialog, dataType: nextProps.dataType, mainId: nextProps.id }
}, () => this.getList(nextProps));
} else if (nextProps.visible !== this.props.visible && !nextProps.visible) {
this.setState({
dataSource: [],
columns: [],
loading: false,
pageInfo: { current: 1, pageSize: 10, total: 0 },
selectedRowKeys: [],
detailSettingsDialog: { visible: false }
});
}
}
getList = (props) => {
const { id, dataType, viewParams = {} } = props || this.props, { pageInfo, detailSettingsDialog } = this.state;
this.setState({ loading: true });
postFetch(`/api/bs/hrmsalary/otherDeduction/${dataType}List`, { ...pageInfo, ...viewParams, id })
.then(({ status, data }) => {
this.setState({ loading: false });
if (status) {
const { columns, list: dataSource, pageNum: current, pageSize, total } = data;
this.setState({
dataSource, pageInfo: { current, pageSize, total }, columns: _.map(columns, o => ({
...o,
width: o.dataIndex === "operate" && 120,
render: (text, record) => o.dataIndex === "operate" ? (<div className="space_div">
<a href="javascript:void(0);" onClick={() => this.setState({
detailSettingsDialog: { ...detailSettingsDialog, visible: true, id: record.id, record }
})}>{getLabel(111, "编辑")}</a>
<a href="javascript:void(0);"
onClick={() => this.handleDelete([record.id])}>{getLabel(111, "删除")}</a>
</div>) : (<span>{text}</span>)
}))
});
}
});
};
handleDelete = (ids = []) => {
const { selectedRowKeys } = this.state, { dataType, id: mainId } = this.props;
Modal.confirm({
title: getLabel(131329, "信息确认"),
content: getLabel(388758, "确认要删除吗?"),
onOk: () => {
postFetch(`/api/bs/hrmsalary/otherDeduction/delete${_.upperFirst(dataType)}`, { ids, mainId })
.then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(502230, "删除成功!"));
this.setState({ selectedRowKeys: _.difference(selectedRowKeys, ids) }, () => this.getList());
} else {
message.error(errormsg);
}
});
}
});
};
render() {
const { pageInfo, dataSource, loading, columns, selectedRowKeys, detailSettingsDialog } = this.state;
const { viewParams } = this.props;
const pagination = {
...pageInfo,
showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ["10", "20", "50", "100"],
onShowSizeChange: (current, pageSize) => {
this.setState({ pageInfo: { ...pageInfo, current: 1, pageSize } }, () => this.getList());
},
onChange: current => {
this.setState({ pageInfo: { ...pageInfo, current } }, () => this.getList());
}
};
const rowSelection = {
selectedRowKeys, onChange: (selectedRowKeys) => this.setState({ selectedRowKeys })
};
return (<WeaDialog {...this.props} initLoadCss className="sys-salary-wrapper" ref={dom => this.taxSetRef = dom}
title={`${getLabel(111, "附表明细")}${this.props.label}`}
style={{
width: "60vw", height: 600, minHeight: 200, minWidth: 380, maxHeight: "90%",
maxWidth: "90%", overflow: "hidden", transform: "translate(0px, 0px)"
}}>
<div className="sys-item-table-box">
<Spin spinning={loading && pageInfo.total === 0}>
{
_.isEmpty(viewParams) && <div className="sys-item-table-opts">
<WeaButtonIcon buttonType="add" type="primary" title={getLabel(111, "添加")}
onClick={() => this.setState({
detailSettingsDialog: { ...detailSettingsDialog, visible: true }
})}/>
<WeaButtonIcon buttonType="del" type="primary" title={getLabel(111, "删除")}
disabled={_.isEmpty(selectedRowKeys)} onClick={() => {
if (_.isEmpty(selectedRowKeys)) {
message.warning(getLabel(111, "请选择要删除的数据!"));
return;
}
this.handleDelete(selectedRowKeys);
}}/>
</div>
}
<WeaTable columns={!_.isEmpty(viewParams) ? _.filter(columns, o => o.dataIndex !== "operate") : columns}
dataSource={dataSource} pagination={pagination} bordered
rowSelection={rowSelection} loading={loading} rowKey="id"
scroll={{ y: this.taxSetRef ? this.taxSetRef.state.height - 164 : 600 }}/>
<DetailSettingsDialog {...detailSettingsDialog} onCancel={(callback) => this.setState({
detailSettingsDialog: { ...detailSettingsDialog, visible: false, id: "" }
}, () => callback && callback())} onSuccess={this.getList}/>
</Spin>
</div>
</WeaDialog>);
}
}
export default TaxSetDialog;