diff --git a/pc4mobx/hrmSalary/apis/calculate.js b/pc4mobx/hrmSalary/apis/calculate.js index c03ac28a..371a8763 100644 --- a/pc4mobx/hrmSalary/apis/calculate.js +++ b/pc4mobx/hrmSalary/apis/calculate.js @@ -333,6 +333,17 @@ export const fileSalaryAcct = (params) => { } }).then(res => res.json()); }; +// 薪资记录-回算 +export const backCalculate = (params) => { + return fetch("/api/bs/hrmsalary/salaryacct/backCalculate", { + method: "POST", + mode: "cors", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then(res => res.json()); +}; // 薪资记录-重新核算 export const reAccounting = (params) => { diff --git a/pc4mobx/hrmSalary/pages/calculate/index.js b/pc4mobx/hrmSalary/pages/calculate/index.js index ff83ab84..34bf91b0 100644 --- a/pc4mobx/hrmSalary/pages/calculate/index.js +++ b/pc4mobx/hrmSalary/pages/calculate/index.js @@ -152,6 +152,14 @@ export default class Calculate extends React.Component { }); } + // 回算 + handleBackCalculate = (record) => { + const { calculateStore: { backCalculate } } = this.props; + backCalculate(record.id).then(() => { + this.handleSearch(this.state.searchValue); + }); + }; + // 查看详情回调 handleDetail(record) { window.open( @@ -222,6 +230,8 @@ export default class Calculate extends React.Component { this.handleReaccount(record); } else if (cz.text == "查看") { this.handleDetail(record); + } else if (cz.text == "回算") { + this.handleBackCalculate(record); } }}> {cz.text} diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/editSalaryDetail.js b/pc4mobx/hrmSalary/pages/calculateDetail/editSalaryDetail.js index 385fa87b..e268ac5f 100644 --- a/pc4mobx/hrmSalary/pages/calculateDetail/editSalaryDetail.js +++ b/pc4mobx/hrmSalary/pages/calculateDetail/editSalaryDetail.js @@ -1,13 +1,22 @@ import React from "react"; -import { WeaHelpfulTip, WeaInput } from "ecCom"; +import { WeaHelpfulTip, WeaInput, WeaTab } from "ecCom"; +import IssuedAndReissueTable from "./issuedAndReissueTable"; import { Col, Row } from "antd"; import { inject, observer } from "mobx-react"; +import { toJS } from "mobx"; import cs from "classnames"; import "./index.less"; @inject("calculateStore") @observer export default class EditSalaryDetail extends React.Component { + constructor(props) { + super(props); + this.state = { + selectedKey: "0" + }; + } + componentWillMount() { const { calculateStore: { acctresultDetail } } = this.props; acctresultDetail(this.props.id); @@ -62,6 +71,17 @@ export default class EditSalaryDetail extends React.Component { render() { const { calculateStore: { acctresultDetailForm } } = this.props; + const { selectedKey } = this.state; + const topTab = [ + { + title: "正常工资薪金所得", + viewcondition: "0" + }, + { + title: "已发补发", + viewcondition: "1" + } + ]; return (
@@ -84,39 +104,45 @@ export default class EditSalaryDetail extends React.Component { }
- -
-
- 输入项 -
- - { - acctresultDetailForm.inputItems && acctresultDetailForm.inputItems.map((item, index) => { - const len = acctresultDetailForm.inputItems.length; - return ( - - - {item.salaryItemName} - { - this.handleItemValueChange(item.salaryItemName, value, true); - }}/> - - - ); - }) - } - + { + !_.isEmpty(toJS(acctresultDetailForm.issuedAndReissueItems)) && + this.setState({ selectedKey: v })} + /> + } + { + selectedKey === "0" && +
+
+ 输入项 +
+ + { + acctresultDetailForm.inputItems && acctresultDetailForm.inputItems.map((item, index) => { + const len = acctresultDetailForm.inputItems.length; + return ( + + + {item.salaryItemName} + { + this.handleItemValueChange(item.salaryItemName, value, true); + }}/> + + + ); + }) + } + +
-
-
- - -
-
+
公式项 -
- - { - acctresultDetailForm.formulaItems && acctresultDetailForm.formulaItems.map((item, index) => { - const len = acctresultDetailForm.formulaItems.length; - return ( - - - {item.salaryItemName} - { - this.handleItemValueChange(item.salaryItemName, value, false); - }}/> - - - ); - }) - } - +
+ + { + acctresultDetailForm.formulaItems && acctresultDetailForm.formulaItems.map((item, index) => { + const len = acctresultDetailForm.formulaItems.length; + return ( + + + {item.salaryItemName} + { + this.handleItemValueChange(item.salaryItemName, value, false); + }}/> + + + ); + }) + } + +
-
+ } + { + selectedKey === "1" && + + }
); } diff --git a/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js b/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js new file mode 100644 index 00000000..ddeea850 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/calculateDetail/issuedAndReissueTable.js @@ -0,0 +1,70 @@ +/* + * Author: 黎永顺 + * name: 已发补发列表 + * Description: + * Date: 2022/12/14 + */ +import React, { Component } from "react"; +import { WeaHelpfulTip, WeaInputNumber, WeaTable } from "ecCom"; + +class IssuedAndReissueTable extends Component { + render() { + const { dataSource } = this.props; + const columns = [ + { + dataIndex: "salaryItemName", + title: "薪资项目", + render: (text) => { + return {text}; + } + }, + { + dataIndex: "resultValue", + title: + 项目值 + + , + render: (text, record) => { + const { canEdit } = record; + return { + console.log(value); + }} + />; + } + }, + { + dataIndex: "salaryBackItemFormula", + title: + 核算公式 + + , + render: (text, record) => { + return {_.isNil(text) ? "输入" : text}; + } + } + ]; + return ( + + ); + } +} + +export default IssuedAndReissueTable; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/LedgerBackCalculatedSalaryItemTable.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/LedgerBackCalculatedSalaryItemTable.js index 5fa8bfdd..3788b5f9 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/LedgerBackCalculatedSalaryItemTable.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/LedgerBackCalculatedSalaryItemTable.js @@ -19,20 +19,22 @@ class LedgerBackCalculatedSalaryItemTable extends Component { visible: false, title: "编辑薪资项目", id: "", - salaryItemId: "" + salaryItemId: "", + backCalcType: "" } }; } handleEditBackCalc = (record) => { - const { id, salaryItemId } = record; + const { id, salaryItemId, backCalcType } = record; const { backCalcEditSlide } = this.state; this.setState({ backCalcEditSlide: { ...backCalcEditSlide, visible: true, id, - salaryItemId + salaryItemId, + backCalcType } }); }; @@ -44,7 +46,8 @@ class LedgerBackCalculatedSalaryItemTable extends Component { ...backCalcEditSlide, visible: false, id: "", - salaryItemId: "" + salaryItemId: "", + backCalcType: "" } }, () => { isRefresh && onRefresh(); @@ -53,7 +56,7 @@ class LedgerBackCalculatedSalaryItemTable extends Component { render() { const { backCalcEditSlide } = this.state; - const { taxAgentStore: { showOperateBtn }, dataSource, editId } = this.props; + const { taxAgentStore: { showOperateBtn }, dataSource, editId, saveSalarySobId, key } = this.props; const columns = [ { dataIndex: "name", @@ -76,7 +79,8 @@ class LedgerBackCalculatedSalaryItemTable extends Component { render: (text, record, index) => { const { canEdit } = record; return (showOperateBtn && canEdit) ? - this.handleEditBackCalc(record)}>编辑 : ; + this.handleEditBackCalc(record)}>编辑 : + ; } } ]; @@ -90,7 +94,7 @@ class LedgerBackCalculatedSalaryItemTable extends Component { /> diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalcEditSlide.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalcEditSlide.js index f6f13e6b..6386dbff 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalcEditSlide.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalcEditSlide.js @@ -27,7 +27,8 @@ class LedgerBackCalcEditSlide extends Component { backCalcEditFormulModal: { visible: false, valueType: "", - dataType: "" + dataType: "", + backCalcType: "" } }; } @@ -72,13 +73,15 @@ class LedgerBackCalcEditSlide extends Component { }).catch(() => this.setState({ loading: false })); }; handleEditFormnul = () => { + const { backCalcType } = this.props; const { backCalcEditFormulModal, valueType, dataType } = this.state; this.setState({ backCalcEditFormulModal: { ...backCalcEditFormulModal, visible: true, valueType, - dataType: _.lowerCase(dataType) + dataType: _.lowerCase(dataType), + backCalcType } }); }; @@ -89,7 +92,8 @@ class LedgerBackCalcEditSlide extends Component { ...backCalcEditFormulModal, visible: false, valueType: "", - dataType: "" + dataType: "", + backCalcType: "" } }); }; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js index 6d39fd12..80764a70 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js @@ -77,7 +77,7 @@ class LedgerBackCalculatedSalaryItem extends Component { > ); }) diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js index 29f4af17..538a1b92 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBaseSetting.js @@ -11,6 +11,7 @@ import { inject, observer } from "mobx-react"; import { baseSettingFormItem } from "../config"; import { getLedgerBasicForm } from "../../../apis/ledger"; import { getAddMonthYearMonth, getCurrentYearMonth, getSubtractMonthYearMonth } from "../../../util/date"; +import moment from "moment"; import "./index.less"; @inject("taxAgentStore") diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js index 45bd3000..6af6af3a 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js @@ -7,6 +7,7 @@ import React, { Component } from "react"; import LedgerSalaryItemBaseInfo from "./ledgerSalaryItemBaseInfo"; import LedgerSalaryItemNormal from "./ledgerSalaryItemNormal"; +import LedgerSalaryItemPreviewModal from "./ledgerSalaryItemPreviewModal"; import { getLedgerItemForm } from "../../../apis/ledger"; import "./index.less"; @@ -14,6 +15,7 @@ class LedgerSalaryItem extends Component { constructor(props) { super(props); this.state = { + previewVisible: false, //预览标识 empFields: [], //员工基本信息 itemGroups: [] //正常工资薪金所得项 }; @@ -125,7 +127,8 @@ class LedgerSalaryItem extends Component { if (item.id === id) { return { ...item, - items: _.filter(item.items, it => !selectedRowKeys.includes(it.id)) + items: _.filter(item.items, it => !selectedRowKeys.includes(it.id)), + selectedRowKeys: [] }; } return { ...item }; @@ -271,13 +274,29 @@ class LedgerSalaryItem extends Component { }); }; + /* + * Author: 黎永顺 + * Description: 员工基本信息-预览 + * Params: + * Date: 2022/12/14 + */ + handlePreview = () => { + this.setState({ previewVisible: true }); + }; + render() { - const { empFields, itemGroups } = this.state; + const { empFields, itemGroups, previewVisible } = this.state; return (
+ this.setState({ previewVisible: false })} /> this.ledgerSalaryItemNormalRef = dom} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js index 0df63310..d669d295 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js @@ -83,12 +83,13 @@ export default class LedgerSalaryItemAddModal extends React.Component { const { dataSource, selectedRowKeys } = this.state; const { onAddSalaryItems, id, onCancel } = this.props; let selectItems = []; - dataSource.map(item => { + dataSource.map((item, index) => { item = { ...item }; selectedRowKeys.map(key => { if (item.id === key) { item.salaryItemId = item.id; item.key = item.id; + item.sortedIndex = index; selectItems.push(item); } }); diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js index 7d399054..6961ded8 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js @@ -50,10 +50,10 @@ class LedgerSalaryItemBaseInfo extends Component { }; render() { - const { dataSource, onChangeSortableList } = this.props; + const { dataSource, onChangeSortableList, onPreview } = this.props; const { empFieldListOptions } = this.state; return ( - }> + }>
{ +const TitleComp = (props) => { + const { onPreview } = props; return
员工基本信息 @@ -98,6 +99,6 @@ const TitleComp = () => { placement="topLeft" />
- +
; }; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemPreviewModal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemPreviewModal.js new file mode 100644 index 00000000..281d2257 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemPreviewModal.js @@ -0,0 +1,63 @@ +import React from "react"; +import { WeaDialog, WeaTable } from "ecCom"; + +export default class LedgerSalaryItemPreviewModal extends React.Component { + getColumns = () => { + const { empFields, itemGroups } = this.props; + let columns = []; + let length = 0; + empFields.map(item => { + columns.push({ + title: item.fieldName, + key: item.fieldId, + width: 150 + }); + length++; + }); + + itemGroups.map(item => { + if (item.id !== "default") { + let columnItem = { + title: item.name, + children: item.items.map(i => { + return { + title: i.name, + key: i.id, + width: 150 + }; + length++; + }) + }; + columns.push(columnItem); + } + }); + + itemGroups.map(item => { + if (item.id === "default") { + item.items.map(i => { + columns.push({ + title: i.name, + key: i.id, + width: 150 + }); + length++; + }); + } + }); + return { columns, length }; + }; + + render() { + const { onCancel, visible } = this.props; + return ( + + + + ); + } +} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js index cf486f21..09b1f1cc 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js @@ -42,7 +42,6 @@ class LedgerSlide extends Component { } componentWillUnmount() { - alert(1111); this.setState({ saveSalarySobId: "" }); diff --git a/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js b/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js index b087cb77..262ead27 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js @@ -38,8 +38,8 @@ export default class FormalFormModal extends React.Component { detailFormual(this.props.formulaId).then(data => { this.setState({ value: data.formula, - validateType: data.validateType, returnType: data.returnType, + validateType: data.validateType }); this.parameters = data.parameters; this.referenceType = data.referenceType; @@ -72,8 +72,8 @@ export default class FormalFormModal extends React.Component { if (this.props.valueType == "3") { groupParams = { "referenceType": "sql" }; } else if (this.props.valueType === "FORMULA") { - groupParams = { "referenceType": "backCalc" }; - this.referenceType = "backCalc"; + groupParams = this.props.backCalcType === "issuedItems" ? { "referenceType": "backCalc" } : {}; + this.referenceType = "formula"; this.setState({ value: this.props.formulaContent }); @@ -196,7 +196,7 @@ export default class FormalFormModal extends React.Component { module: "salary", useFor: "salaryitem", returnType: this.props.dataType || this.state.returnType, - validateType: this.props.dataType|| this.state.validateType, + validateType: this.props.dataType || this.state.returnType, extendParam: JSON.stringify(this.state.extendParam), formula: this.state.value, parameters: this.parameters, diff --git a/pc4mobx/hrmSalary/stores/calculate.js b/pc4mobx/hrmSalary/stores/calculate.js index c1f420ff..63b5b235 100644 --- a/pc4mobx/hrmSalary/stores/calculate.js +++ b/pc4mobx/hrmSalary/stores/calculate.js @@ -3,6 +3,7 @@ import { message } from "antd"; import { WeaForm, WeaTableNew } from "comsMobx"; import * as API from "../apis/calculate"; +import { backCalculate } from "../apis/calculate"; const { TableStore } = WeaTableNew; @@ -466,7 +467,21 @@ export class calculateStore { } }); }); - + }; + // 薪资记录-回算 + @action + backCalculate = (salaryAcctRecordId) => { + return new Promise((resolve, reject) => { + API.backCalculate({ salaryAcctRecordId }).then(res => { + if (res.status) { + message.success("回算成功"); + resolve(); + } else { + message.error(res.errormsg || "回算失败"); + reject(); + } + }); + }); }; // 薪资结果-编辑表单保存