import React, { Component } from "react"; import { inject, observer } from "mobx-react"; import { WeaLocaleProvider, WeaSearchGroup, WeaTools } 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 } 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 { convertToUrlString } from "../../../util/url"; const getKey = WeaTools.getKey; const getLabel = WeaLocaleProvider.getLabel; @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, templateLink: "/api/bs/hrmsalary/specialAddDeduction/downloadTemplate", importResult: {}, previewUrl: "/api/bs/hrmsalary/specialAddDeduction/preview" }, exportPayloadUrl: "", exportPayloadType: false, advanceCondition: null, targetid: "" }; 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 */ 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; const conditions = _.map(condition, (it, idx) => { if (idx === 0) { return { ...it, title: getLabel(82743, "基础信息"), items: _.map(it.items, o => { if (getKey(o) === "taxAgentId") { return { ...o, label: getLabel(o.lanId, o.label), options: taxAgentOption, viewAttr: _.isEmpty(editId) ? 3 : 1 }; } return { ...o, label: getLabel(o.lanId, o.label), viewAttr: _.isEmpty(editId) ? 3 : 1 }; }) }; } else if (idx === 1) { return { ...it, title: getLabel(83871, "数据采集"), items: _.map(it.items, o => ({ ...o, label: getLabel(o.lanId, o.label) })) }; } }); addForm.initFormFields(conditions); this.setState({ slidePayload: { ...slidePayload, visible: true, title, data: editId, children: title.length <= 2 ? this.addItemRef = dom} taxAgentOption={taxAgentOption} form={addForm} isSpecial editId={editId} condition={conditions} /> : 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); }) : key === "log" ? this.setState({ targetid: id }) : this.specialAddDeductionDeleteSelectData(record); }; handleCloseSlide = () => { const { slidePayload } = this.state; this.setState({ slidePayload: { ...slidePayload, visible: false, title: "", children: null, data: {} } }); this.tableRecordRef && this.tableRecordRef.handleResetSelectKeys(); this.handleDebounce = null; this.props.specialAddStore.initAddForm(); }; handleSaveData = () => { const { specialAddStore: { addForm }, taxAgentStore: { taxAgentOption } } = this.props; addForm.validateForm().then(f => { if (f.isValid) { const payload = { ...addForm.getFormParams(), taxAgentName: _.find(taxAgentOption, it => it.key === addForm.getFormParams().taxAgentId).showname }; this.handleSaveDeduction(payload); } else { Modal.warning({ title: "信息确认", content: "必要信息不完整,红色*为必填项!" }); } }); }; 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 } } }); }; render() { const { taxAgentStore: { showOperateBtn }, specialAddStore: { advanceForm } } = this.props; const { taxAgentId, slidePayload, saveLoading, exportPayloadUrl, advanceCondition, importPayload, exportPayloadType, targetid } = this.state; const tablePayload = { taxAgentId }; return ( this.setState({ targetid: "" })} > 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;