import React, { Component } from "react"; import { inject, observer } from "mobx-react"; import { WeaSearchGroup } from "ecCom"; import { Button, Dropdown, Menu, message, Modal } from "antd"; import DataTables from "../dataTables"; import Layout from "../layout"; import { getSearchCondition, getSpecialAddDeduction, specialAddDeductionCreateData, specialAddDeductionDeleteAllData, specialAddDeductionDeleteSelectData, specialAddDeductionEditData, specialAddDeductionImportData, specialAddDeductionPreview } from "../../../apis/special"; import { removePropertyCondition } from "../../../util/response"; import { DataCollectionSelect } from "../cumDeduct"; import ImportFormCom from "../cumDeduct/components/importFormCom"; import { condition } from "./components/condition"; import AddItems from "../addItems"; import TableRecord from "../components/tableRecord"; import { specialModalColumns } from "../cumDeduct/columns"; import { convertToUrlString } from "../../../util/url"; @inject("taxAgentStore", "specialAddStore") @observer class Index extends Component { constructor(props) { super(props); this.state = { taxAgentId: "", innerWidth: window.innerWidth, saveLoading: false, slidePayload: { visible: false, title: "", children: null, data: {} }, importPayload: { visible: false, importOpts: { taxAgentId: "" }, importFormComponent: null, step: 0, templateLink: "/api/bs/hrmsalary/specialAddDeduction/downloadTemplate", importResult: {}, slideDataSource: [] }, exportPayloadUrl: "", exportPayloadType: false, advanceCondition: null }; this.tableRef = null; this.addItemRef = null; this.tableRecordRef = null; } componentDidMount() { this.getAdvanceCondition(); } /* * Author: 黎永顺 * Description: 数据采集-信息保存 * Params: * Date: 2023/2/20 */ handleSaveDeduction = (payload) => { const { slidePayload } = this.state; const { data } = slidePayload; const { id } = data; this.setState({ saveLoading: true }); if (!_.isEmpty(data)) { specialAddDeductionEditData({ ...payload, id }).then(({ status, errormsg }) => { this.setState({ saveLoading: false }); if (status) { message.success("编辑成功"); this.handleCloseSlide(); this.tableRef.getTableDate(); } else { message.error(errormsg || "编辑失败"); } }); } else { specialAddDeductionCreateData(payload).then(({ status, errormsg }) => { this.setState({ saveLoading: false }); if (status) { message.success("新增成功"); this.handleCloseSlide(); this.tableRef.getTableDate(); } else { message.error(errormsg || "新增失败"); } }); } }; /* * Author: 黎永顺 * Description: 导入数据采集数据 * Params: * Date: 2023/2/20 */ handleImportFile = (params) => { specialAddDeductionImportData(params).then(({ status, data }) => { if (status) { const { importPayload } = this.state; this.setState({ importPayload: { ...importPayload, importResult: data } }); } }); }; /* * Author: 黎永顺 * Description: 导入数据采集-数据查看 * Params: * Date: 2023/2/20 */ handlePreviewImport = (params) => { specialAddDeductionPreview(params).then(({ status, data, errormsg }) => { if (status) { const { preview = [] } = data; const { importPayload } = this.state; this.setState({ importPayload: { ...importPayload, slideDataSource: preview } }); } else { message.error(errormsg || "预览失败"); } }); }; /* * Author: 黎永顺 * Description: 高级搜素框-表单项 * Params: * Date: 2023/2/20 */ getAdvanceCondition = () => { const { specialAddStore: { advanceForm } } = this.props; getSearchCondition().then(({ status, data }) => { if (status) { this.setState({ advanceCondition: removePropertyCondition(data.condition) }); advanceForm.initFormFields(removePropertyCondition(data.condition)); } }); }; /* * Author: 黎永顺 * Description: 一键清空 * Params: * Date: 2023/2/20 */ specialAddDeductionDeleteAllData = () => { const { taxAgentId } = this.state; const payload = { taxAgentId }; Modal.confirm({ title: "信息确认", content: `确定清空所有专项附加扣除数据吗?若数据已参与核算,已参与核算的数据不会受影响,点击核算将会按当前列表最新数据重新核算。`, onOk: () => { specialAddDeductionDeleteAllData(payload).then(({ status, errormsg }) => { if (status) { message.success("删除成功"); this.tableRef.getTableDate(); } else { message.error(errormsg || "删除失败"); } }); } }); }; /* * Author: 黎永顺 * Description: 删除所选 * Params: * Date: 2023/2/20 */ specialAddDeductionDeleteSelectData = (record = {}) => { const { selectedRowKeys: ids } = this.tableRef.state; const { id, departmentName, username } = record; if (ids.length === 0 && !id) { message.warning("请选择表格数据"); return; } const payload = { ids: !id ? ids : [id] }; Modal.confirm({ title: "信息确认", content: !id ? "确定删除所选数据吗?若数据已参与核算,已参与核算的数据不会受影响,点击核算将会按当前列表最新数据重新核算。" : `确定删除${departmentName}${username}的累计专项附加扣除数据吗?若数据已参与核算,已参与核算的数据不会受影响,点击核算将会按当前列表最新数据重新核算。`, onOk: () => { specialAddDeductionDeleteSelectData(payload).then(({ status, errormsg }) => { if (status) { message.success("删除成功"); this.tableRef.getTableDate(); this.tableRef.handleClearRows(); } else { message.error(errormsg || "删除失败"); } }); } }); }; /* * Author: 黎永顺 * Description:数据采集-导出全部 * Params: * Date: 2023/2/20 */ handleExportAll = () => { const { specialAddStore: { advanceForm } } = this.props; const { taxAgentId, exportPayloadType } = this.state; this.setState({ exportPayloadType: !exportPayloadType, exportPayloadUrl: `${window.location.origin}/api/bs/hrmsalary/specialAddDeduction/export?ids=&taxAgentId=${taxAgentId}&${convertToUrlString(advanceForm.getFormParams())}` }); }; /* * Author: 黎永顺 * Description:数据采集-导出选中 * Params: * Date: 2023/2/20 */ handleExportSelect = () => { const { selectedRowKeys: ids } = this.tableRef.state; const { taxAgentId, exportPayloadType } = this.state; if (ids.length === 0) { message.warning("请选择需要导出的数据"); return; } this.setState({ exportPayloadType: !exportPayloadType, exportPayloadUrl: `${window.location.origin}/api/bs/hrmsalary/specialAddDeduction/export?ids=${ids.join(",")}&taxAgentId=${taxAgentId}` }); }; /* * Author: 黎永顺 * Description: 筛选组件 * Params: * Date: 2023/2/17 */ getScreen = () => { const { taxAgentStore: { taxAgentOption } } = this.props; const { taxAgentId } = this.state; const items = [ { com: DataCollectionSelect({ label: "个税扣缴义务人", value: taxAgentId, onChange: this.screenChange, options: [{ key: "", showname: "全部" }, ...taxAgentOption], key: "taxAgentId" }) } ]; return ; }; screenChange = ({ key, value }) => { const { specialAddStore: { advanceForm } } = this.props; this.setState({ [key]: value }, () => this.tableRef.getTableDate({ ...advanceForm.getFormParams(), current: 1 })); }; /* * Author: 黎永顺 * Description: 顶部操作按钮 * Params: * Date: 2023/2/17 */ getTopBtns = () => { return [ , , 批量删除 一键清空 导出选中 导出全部 } > ]; }; handleDataMenuClick = ({ key: keyFunc }) => this[keyFunc](); /* * Author: 黎永顺 * Description:新增数据采集-专项附加扣除 * Params: screenParams规则:日期必须放在数组最后一位,人员信息必须第一位 * Date: 2023/2/20 */ handleAddData = (title = "新建", editId = {}) => { const { taxAgentStore, specialAddStore: { addForm } } = this.props; const { slidePayload } = this.state; const { taxAgentOption } = taxAgentStore; addForm.initFormFields(condition); this.setState({ slidePayload: { ...slidePayload, visible: true, title, data: editId, children: title.length <= 2 ? this.addItemRef = dom} taxAgentOption={taxAgentOption} form={addForm} isSpecial editId={editId} condition={condition} /> : this.tableRecordRef = dom} className="accumulated" taxAgentOption={taxAgentOption} url="/api/bs/hrmsalary/specialAddDeduction/getDetailList" record={editId} screenParams={["specialAddDeductionId"]} /> } }); }; /* * Author: 黎永顺 * Description:列表操作 * Params: * Date: 2023/2/20 */ handleTableOperate = ({ key }, record) => { const { id } = record; key === "handleAddData" ? getSpecialAddDeduction({ id }).then(({ status, data }) => { if (status) this[key]("编辑", data); }) : this.specialAddDeductionDeleteSelectData(record); }; handleCloseSlide = () => { const { slidePayload } = this.state; this.setState({ slidePayload: { ...slidePayload, visible: false, title: "", chidren: null, data: {} } }); this.tableRecordRef && this.tableRecordRef.handleResetSelectKeys(); this.handleDebounce = null; }; handleSaveData = () => { const { specialAddStore: { addForm } } = this.props; const { baseInfo } = this.addItemRef.state; const bool = _.every(_.pick(baseInfo, ["taxAgentId", "employeeId"]), v => !!v); if (!bool) { Modal.warning({ title: "信息确认", content: "必要信息不完整,红色*为必填项!" }); return; } const payload = { ..._.pick(baseInfo, ["taxAgentId", "employeeId", "taxAgentName"]), ...addForm.getFormParams() }; this.handleSaveDeduction(payload); }; handleAdSearch = () => { const { specialAddStore: { advanceForm } } = this.props; this.tableRef.getTableDate({ ...advanceForm.getFormParams(), current: 1 }); }; handleResize = (innerWidth) => this.setState({ innerWidth }); /* * Author: 黎永顺 * Description: 数据采集-导入相关 * Params: * Date: 2023/2/20 */ handleOpenImport = () => { const { importPayload } = this.state; const { importOpts } = importPayload; const { taxAgentStore: { taxAgentOption } } = this.props; this.setState({ importPayload: { ...importPayload, visible: true, step: 0, importResult: {}, slideDataSource: [], importFormComponent: } }); }; handleCloseImport = (doSearch = false) => { const { importPayload } = this.state; this.setState({ importPayload: { ...importPayload, visible: false, importFormComponent: null, step: 0, importOpts: { taxAgentId: "" }, importResult: {}, slideDataSource: [] } }, () => doSearch && this.tableRef.getTableDate()); }; handleChangeImportForm = (key, value) => { const { importPayload } = this.state; const { importOpts } = importPayload; this.setState({ importPayload: { ...importPayload, importOpts: { ...importOpts, [key]: value } } }); }; handleImportSetStep = (step) => { const { importPayload } = this.state; this.setState({ importPayload: { ...importPayload, step } }); }; render() { const { taxAgentStore: { showOperateBtn }, specialAddStore: { advanceForm } } = this.props; const { taxAgentId, slidePayload, saveLoading, exportPayloadUrl, advanceCondition, importPayload, exportPayloadType } = this.state; const tablePayload = { taxAgentId }; return ( this.tableRef = dom} url="/api/bs/hrmsalary/specialAddDeduction/list" payload={tablePayload} isSpecial showOperateBtn={showOperateBtn} onTableOperate={this.handleTableOperate} onViewDetails={(record) => this.handleAddData("专项附加扣除记录", record)} form={advanceForm} /> ); } } export default Index;