diff --git a/pc4mobx/hrmSalary/apis/payroll.js b/pc4mobx/hrmSalary/apis/payroll.js
index 80011331..8cf120c9 100644
--- a/pc4mobx/hrmSalary/apis/payroll.js
+++ b/pc4mobx/hrmSalary/apis/payroll.js
@@ -350,3 +350,11 @@ export const sendRangeSave = (params) => {
export const sendRangeDelete = (params) => {
return postFetch('/api/bs/hrmsalary/salaryBill/send/range/delete', params);
}
+//工资单模板-获取模板可用的分组
+export const getAvailableSalaryGroupSet = (params) => {
+ return postFetch('/api/bs/hrmsalary/salaryBill/template/getAvailableSalaryGroupSet', params);
+}
+//工资单模板-获取模板分组下可用的薪资项目
+export const getAvailableSalaryItemSet = (params) => {
+ return postFetch('/api/bs/hrmsalary/salaryBill/template/getAvailableSalaryItemSet', params);
+}
diff --git a/pc4mobx/hrmSalary/pages/payroll/index.js b/pc4mobx/hrmSalary/pages/payroll/index.js
index f026277b..e098f240 100644
--- a/pc4mobx/hrmSalary/pages/payroll/index.js
+++ b/pc4mobx/hrmSalary/pages/payroll/index.js
@@ -101,7 +101,7 @@ export default class Payroll extends React.Component {
// 模板搜索
handleTemplateSearch() {
const { templateSearchValue, templateSelect } = this.state;
- let params = { name: templateSearchValue, salarySobId: templateSelect,current: 1 };
+ let params = { name: templateSearchValue, salarySobId: templateSelect, current: 1 };
const { payrollStore: { getPayrollTemplateList } } = this.props;
getPayrollTemplateList(params);
}
@@ -344,8 +344,8 @@ export default class Payroll extends React.Component {
});
return;
}
- if(templateBaseData.replenishName === templateBaseData.name){
- message.error("工资单模板名称和补发工资单模板名称不可相同")
+ if (templateBaseData.replenishName === templateBaseData.name) {
+ message.error("工资单模板名称和补发工资单模板名称不可相同");
return;
}
this.setState({
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/index.less b/pc4mobx/hrmSalary/pages/payroll/stepForm/index.less
index f1356562..6c8e324c 100644
--- a/pc4mobx/hrmSalary/pages/payroll/stepForm/index.less
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/index.less
@@ -197,3 +197,8 @@
}
}
}
+.salaryItemModalWrapper{
+ .modalContent{
+ padding: 16px;
+ }
+}
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemModal.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemModal.js
new file mode 100644
index 00000000..7a6e5557
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemModal.js
@@ -0,0 +1,35 @@
+/*
+ * Author: 黎永顺
+ * name: 工资单模板-新增编辑薪资项目项
+ * Description:
+ * Date: 2023/2/2
+ */
+import React, { Component } from "react";
+import { WeaDialog } from "ecCom";
+import { Button } from "antd";
+
+class SalaryItemModal extends Component {
+ render() {
+ const { visible, title, onCancel, onConfirm } = this.props;
+ const buttons = [
+ ,
+
+ ];
+ return (
+
+ {this.props.children}
+
+ );
+ }
+}
+
+export default SalaryItemModal;
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js
index 41a0af9a..b2865829 100644
--- a/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/salaryItemSettings.js
@@ -6,26 +6,38 @@
*/
import React, { Component } from "react";
import { toJS } from "mobx";
-import { WeaSortable } from "ecCom";
+import { WeaFormItem, WeaInput, WeaSelect, WeaSortable } from "ecCom";
import { Icon, Modal } from "antd";
+import SalaryItemModal from "./salaryItemModal";
+import { getAvailableSalaryGroupSet, getAvailableSalaryItemSet } from "../../../apis/payroll";
class SalaryItemSettings extends Component {
constructor(props) {
super(props);
this.state = {
- dataList: []
+ dataList: [],
+ checkedValue: "",
+ modalPayload: {
+ visible: false,
+ title: "",
+ groupId: "",
+ groupName: "",
+ options: []
+ }
};
}
- componentDidMount() {
- this.setState({
- dataList: _.map(toJS(this.props.dataSource), item => {
- return {
- ...item,
- id: item.groupId
- };
- })
- });
+ componentWillReceiveProps(nextProps, nextContext) {
+ if (nextProps.dataSource !== this.props.dataSource) {
+ this.setState({
+ dataList: _.map(toJS(nextProps.dataSource), item => {
+ return {
+ ...item,
+ id: item.groupId
+ };
+ })
+ });
+ }
}
/*
@@ -39,7 +51,7 @@ class SalaryItemSettings extends Component {
title: "信息确认",
content: "确认删除",
onOk: () => {
- let resultSalaryItemSet = [...toJS(this.props.dataSource)];
+ let resultSalaryItemSet = [...this.state.dataList];
resultSalaryItemSet.map((sourceGroup, index) => {
if (sourceGroup.groupId === group.groupId) {
resultSalaryItemSet.splice(index, 1);
@@ -60,7 +72,7 @@ class SalaryItemSettings extends Component {
* Date: 2023/2/2
*/
handleDeleteSalaryItem = (group, item) => {
- let resultSalaryItemSet = [...toJS(this.props.dataSource)];
+ let resultSalaryItemSet = [...this.state.dataList];
resultSalaryItemSet.map(sourceGroup => {
if (sourceGroup.groupId === group.groupId) {
sourceGroup.items.map((sourceItem, index) => {
@@ -76,10 +88,133 @@ class SalaryItemSettings extends Component {
this.props.onChangeSalaryItem(resultSalaryItemSet);
});
};
+ handleCloseModal = () => {
+ const { modalPayload } = this.state;
+ this.setState({
+ checkedValue: "",
+ modalPayload: {
+ ...modalPayload,
+ visible: false,
+ title: "",
+ groupId: "",
+ groupName: "",
+ options: []
+ }
+ });
+ };
+ handleOpenModal = (record, title, isItem) => {
+ if (title === "分类名称编辑") {
+ const { modalPayload } = this.state;
+ this.setState({
+ modalPayload: {
+ ...modalPayload,
+ visible: true,
+ title,
+ groupId: record.groupId,
+ groupName: record.groupName
+ }
+ });
+ } else {
+ isItem ? this.getAvailableSalaryItemSet(record, title) : this.getAvailableSalaryGroupSet(record, title);
+ }
+ };
+ getAvailableSalaryItemSet = (record, title) => {
+ const payload = {
+ salarySobId: this.props.salarySobId,
+ existSalaryItemIds: _.map(record.items, it => it.id),
+ groupId: record.groupId,
+ isReplenish: this.props.isReplenish
+ };
+ getAvailableSalaryItemSet(payload).then(({ status, data }) => {
+ if (status) {
+ const { modalPayload } = this.state;
+ this.setState({
+ modalPayload: {
+ ...modalPayload,
+ visible: true,
+ title,
+ groupId: record.groupId,
+ options: _.map(data, it => ({ ...it, showname: it.name, key: it.salaryItemId }))
+ }
+ });
+ }
+ });
+ };
+ getAvailableSalaryGroupSet = (salarySobId, title) => {
+ const { dataList } = this.state;
+ const payload = {
+ salarySobId,
+ existSalaryGroupIds: _.map(dataList, it => it.groupId),
+ isReplenish: this.props.isReplenish
+ };
+ getAvailableSalaryGroupSet(payload).then(({ status, data }) => {
+ if (status) {
+ const { modalPayload } = this.state;
+ this.setState({
+ modalPayload: {
+ ...modalPayload,
+ visible: true,
+ title,
+ options: _.map(data, it => ({ ...it, showname: it.groupName, key: it.groupId }))
+ }
+ });
+ }
+ });
+ };
+ handleChangeClassName = (groupName) => {
+ const { modalPayload } = this.state;
+ this.setState({
+ modalPayload: {
+ ...modalPayload,
+ groupName
+ }
+ });
+ };
+ /*
+ * Author: 黎永顺
+ * Description:添加薪资项目项
+ * Params:
+ * Date: 2023/2/2
+ */
+ handleConfirm = () => {
+ const { modalPayload, checkedValue, dataList } = this.state;
+ const { options = [], groupId, groupName } = modalPayload;
+ if (groupName) {
+ this.setState({
+ dataList: _.map(dataList, it => {
+ if (it.groupId === groupId) {
+ return {
+ ...it,
+ groupName
+ };
+ }
+ return { ...it };
+ })
+ }, () => {
+ this.props.onChangeSalaryItem(this.state.dataList);
+ this.handleCloseModal();
+ });
+ } else {
+ this.setState({
+ dataList: groupId ? _.map(dataList, it => {
+ if (it.groupId === groupId) {
+ return {
+ ...it,
+ items: [...it.items, ..._.filter(options, child => checkedValue.split(",").includes(child.salaryItemId))]
+ };
+ }
+ return { ...it };
+ }) : [...dataList, ..._.filter(options, child => checkedValue.split(",").includes(child.groupId))]
+ }, () => {
+ this.props.onChangeSalaryItem(this.state.dataList);
+ this.handleCloseModal();
+ });
+ }
+ };
render() {
const { onChangeSalaryItem } = this.props;
- const { dataList } = this.state;
+ const { dataList, modalPayload, checkedValue } = this.state;
return (
{item.groupName}
- alert(1)}/>
+ this.handleOpenModal(item, "分类名称编辑")}/>
this.handleDeleteClick(item)}/>
- alert(2)}/>
+ this.handleOpenModal(item, "请选择薪资项目", true)}/>
{
@@ -127,6 +262,23 @@ class SalaryItemSettings extends Component {
}}
className="wea-sortable-salary-item"
/>
+
+
+ {
+ modalPayload.title === "分类名称编辑" ?
+
+
+
+ : this.setState({ checkedValue: v })}
+ />
+ }
+
+
);
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js
index ae73027d..88788eb3 100644
--- a/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js
@@ -1,7 +1,8 @@
import React from "react";
-import { Modal, Radio, Switch } from "antd";
+import { Radio, Switch } from "antd";
import { WeaButtonIcon, WeaFormItem, WeaInput, WeaSearchGroup } from "ecCom";
import { inject, observer } from "mobx-react";
+import { toJS } from "mobx";
import BackgroundUpload from "../components/backgroundUpload";
import SalaryItemSettings from "./salaryItemSettings";
import "./index.less";
@@ -38,27 +39,11 @@ export default class ShowSettingForm extends React.Component {
setSalaryItemSet(resultSet);
};
- handleDeleteItem = (group, item) => {
- const { payrollStore: { salaryItemSet, setSalaryItemSet } } = this.props;
- let resultSalaryItemSet = [...salaryItemSet];
- resultSalaryItemSet.map(sourceGroup => {
- if (sourceGroup.groupId === group.groupId) {
- sourceGroup.items.map((sourceItem, index) => {
- if (sourceItem.id === item.id) {
- sourceGroup.items.splice(index, 1);
- }
- });
- }
- });
- setSalaryItemSet(resultSalaryItemSet);
- };
-
-
render() {
const { payrollStore, id } = this.props;
const salaryTemplateShowSetStorage = id ? "{}" : window.localStorage.getItem("salary-showset") || "{}";
const { salaryTemplateShowSet } = payrollStore;
- const { salaryItemSet } = payrollStore;
+ const { salaryItemSet, templateBaseData } = payrollStore;
const {
theme,
background,
@@ -142,64 +127,19 @@ export default class ShowSettingForm extends React.Component {
title={
薪资项目设置
-
+ this.salaryItemSettingsRef.handleOpenModal(toJS(templateBaseData).salarySob, "添加分类")}/>
}
- items={[]}
- needTigger
- showGroup
+ items={[]} needTigger showGroup
>
this.salaryItemSettingsRef = dom}
dataSource={salaryItemSet}
onChangeSalaryItem={this.handleChangeSalaryItem}
+ salarySobId={toJS(templateBaseData).salarySob}
+ isReplenish={true}
/>
- {/*{*/}
- {/* salaryItemSet.map((group, index) => (*/}
- {/* */}
- {/*
{group.groupName}*/}
- {/* {*/}
- {/* index < salaryItemSet.length - 1 &&*/}
- {/* {*/}
- {/* this.handleDownClick(index);*/}
- {/* }}*/}
- {/* />*/}
- {/* }*/}
- {/* {*/}
- {/* index > 0 &&*/}
- {/* {*/}
- {/* this.handleUpClick(index);*/}
- {/* }}*/}
- {/* />*/}
- {/* }*/}
- {/* {*/}
- {/* this.handleDeleteClick(index);*/}
- {/* }}*/}
- {/* />*/}
- {/*
*/}
- {/*
*/}
- {/* {group.items.map(item => (*/}
- {/* {item.name}*/}
- {/* {*/}
- {/* this.handleDeleteItem(group, item);*/}
- {/* }}*/}
- {/* />*/}
- {/* */}
- {/* ))}*/}
- {/*
*/}
- {/*
*/}
- {/* ))*/}
- {/*}*/}
);
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js
index af2ea5de..ad0fabfe 100644
--- a/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js
+++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js
@@ -1,119 +1,40 @@
import React from "react";
-import { Icon, Modal } from "antd";
-import { WeaSearchGroup } from "ecCom";
+import { WeaButtonIcon, WeaSearchGroup } from "ecCom";
import { inject, observer } from "mobx-react";
import { toJS } from "mobx";
import "./index.less";
+import SalaryItemSettings from "./salaryItemSettings";
@inject("payrollStore")
@observer
export default class TemplateSettingForm extends React.Component {
-
- handleDownClick = (index) => {
- const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
- let downItem = replenishSalaryTemplateSalaryItemSet[index + 1];
- let thisItem = replenishSalaryTemplateSalaryItemSet[index];
- let resultSet = [...replenishSalaryTemplateSalaryItemSet];
- resultSet[index] = downItem;
- resultSet[index + 1] = thisItem;
+ handleChangeSalaryItem = (resultSet) => {
+ const { payrollStore: { setReplenishSalaryTemplateSalaryItemSet } } = this.props;
setReplenishSalaryTemplateSalaryItemSet(resultSet);
};
- handleUpClick = (index) => {
- const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
- let upItem = replenishSalaryTemplateSalaryItemSet[index - 1];
- let thisItem = replenishSalaryTemplateSalaryItemSet[index];
- let resultSet = [...replenishSalaryTemplateSalaryItemSet];
- resultSet[index] = upItem;
- resultSet[index - 1] = thisItem;
- setReplenishSalaryTemplateSalaryItemSet(resultSet);
- };
-
- handleDeleteItem = (group, item) => {
- const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
- let resultSalaryItemSet = [...replenishSalaryTemplateSalaryItemSet];
- resultSalaryItemSet.map(sourceGroup => {
- if (sourceGroup.id === group.id) {
- sourceGroup.items.map((sourceItem, index) => {
- if (sourceItem.id === item.id) {
- sourceGroup.items.splice(index, 1);
- }
- });
- }
- });
- setReplenishSalaryTemplateSalaryItemSet(resultSalaryItemSet);
- };
-
- handleDeleteClick = (index) => {
- Modal.confirm({
- title: "信息确认",
- content: "确认删除",
- onOk: () => {
- const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
- let resultSalaryItemSet = [...replenishSalaryTemplateSalaryItemSet];
- resultSalaryItemSet.splice(index, 1);
- setReplenishSalaryTemplateSalaryItemSet(resultSalaryItemSet);
- },
- onCancel: () => {
- }
- });
- };
-
render() {
const { payrollStore } = this.props;
- const { replenishSalaryTemplateSalaryItemSet } = payrollStore;
+ const { replenishSalaryTemplateSalaryItemSet, templateBaseData } = payrollStore;
return (
-
- {
- !_.isEmpty(toJS(replenishSalaryTemplateSalaryItemSet)) &&
- replenishSalaryTemplateSalaryItemSet.map((group, index) => (
-
-
{group.groupName}
- {
- index < replenishSalaryTemplateSalaryItemSet.length - 1 &&
- {
- this.handleDownClick(index);
- }}
- />
- }
- {
- index > 0 &&
- {
- this.handleUpClick(index);
- }}
- />
- }
- {
- this.handleDeleteClick(index);
- }}
- />
-
-
- {group.items.map(item => (
- {item.name}
- {
- this.handleDeleteItem(group, item);
- }}
- />
-
- ))}
-
-
- ))
+
+ 薪资项目设置
+ this.salaryItemSettingsRef.handleOpenModal(toJS(templateBaseData).salarySob, "添加分类")}/>
+
}
+ items={[]} needTigger showGroup>
+ this.salaryItemSettingsRef = dom}
+ dataSource={replenishSalaryTemplateSalaryItemSet}
+ onChangeSalaryItem={this.handleChangeSalaryItem}
+ salarySobId={toJS(templateBaseData).salarySob}
+ isReplenish={true}
+ />
);