329 lines
9.2 KiB
JavaScript
329 lines
9.2 KiB
JavaScript
/*
|
|
* Author: 黎永顺
|
|
* name: 薪资项目
|
|
* Description:
|
|
* Date: 2022/12/13
|
|
*/
|
|
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";
|
|
|
|
class LedgerSalaryItem extends Component {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
previewVisible: false, //预览标识
|
|
empFields: [], //员工基本信息
|
|
itemGroups: [] //正常工资薪金所得项
|
|
};
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.getLedgerItemForm();
|
|
}
|
|
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 薪资项目以及员工基本信息查询
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
getLedgerItemForm = () => {
|
|
const { editId: salarySobId, saveSalarySobId } = this.props;
|
|
getLedgerItemForm({ salarySobId: salarySobId || saveSalarySobId }).then(({ status, data }) => {
|
|
if (status) {
|
|
const { empFields, itemGroups, items } = data;
|
|
const obj = {
|
|
id: itemGroups.length,
|
|
itemHide: null,
|
|
items,
|
|
name: "未分类",
|
|
salarySobId,
|
|
sortedIndex: itemGroups.length
|
|
};
|
|
this.setState({ empFields, itemGroups: [...itemGroups, obj] }, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
}
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 员工基本信息排序
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleChangeSortableList = (empFields) => {
|
|
this.setState({ empFields }, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description:编辑保存性子项目分类
|
|
* Params:
|
|
* Date: 2022/12/13
|
|
*/
|
|
handleSaveCateGory = (payload) => {
|
|
const { itemGroups } = this.state;
|
|
if (payload.id) {
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, it => {
|
|
if (it.id === payload.id) {
|
|
return { ...it, name: payload.name };
|
|
}
|
|
return { ...it };
|
|
})
|
|
});
|
|
} else {
|
|
const obj = {
|
|
id: new Date().getTime(),
|
|
itemHide: null,
|
|
items: [],
|
|
name: payload.name
|
|
};
|
|
this.setState({
|
|
itemGroups: _.map([obj, ...itemGroups], (it, idx) => ({ ...it, sortedIndex: idx }))
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
}
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 删除分类
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleDeleteCategroy = (id) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.filter(itemGroups, it => it.id !== id)
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 删除分类项下的列表数据
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleDeleteCategroyItems = (id, selectedRowKeys) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, item => {
|
|
if (item.id === id) {
|
|
return {
|
|
...item,
|
|
items: _.filter(item.items, it => !selectedRowKeys.includes(it.id)),
|
|
selectedRowKeys: []
|
|
};
|
|
}
|
|
return { ...item };
|
|
})
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 修改信息项目分类的顺序-向上移动
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleUpgo = (index) => {
|
|
const { itemGroups } = this.state;
|
|
let newItemGroups = [...itemGroups];
|
|
if (index !== 0) {
|
|
newItemGroups[index] = newItemGroups.splice(index - 1, 1, newItemGroups[index])[0];
|
|
} else {
|
|
newItemGroups.push(newItemGroups.shift());
|
|
}
|
|
this.setState({
|
|
itemGroups: _.map(newItemGroups, (it, idx) => ({
|
|
...it,
|
|
sortedIndex: idx
|
|
}))
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 修改信息项目分类的顺序-向下移动
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleDowngo = (index) => {
|
|
const { itemGroups } = this.state;
|
|
let newItemGroups = [...itemGroups];
|
|
if (index !== newItemGroups.length - 1) {
|
|
newItemGroups[index] = newItemGroups.splice(index + 1, 1, newItemGroups[index])[0];
|
|
} else {
|
|
newItemGroups.unshift(newItemGroups.splice(index, 1)[0]);
|
|
}
|
|
this.setState({
|
|
itemGroups: _.map(newItemGroups, (it, idx) => ({
|
|
...it,
|
|
sortedIndex: idx
|
|
}))
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 移動分类下的列表数据\切换薪资分类-隐藏复选框
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleDropCategroyItem = (filed, data) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, it => {
|
|
if (filed.id === it.id) {
|
|
return {
|
|
...it,
|
|
items: _.map(data, (child, childIndex) => {
|
|
return {
|
|
...child,
|
|
sortedIndex: childIndex
|
|
};
|
|
})
|
|
};
|
|
}
|
|
return { ...it };
|
|
})
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 薪资分类选中复选框
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleChangeSelectedRowKeys = (filed, data) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, it => {
|
|
if (filed.id === it.id) {
|
|
return { ...it, selectedRowKeys: data };
|
|
}
|
|
return { ...it };
|
|
})
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 薪资项目-新增项
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleAddSalaryItems = (id, items) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, it => {
|
|
if (id === it.id) {
|
|
return { ...it, items: [...it.items, ...items] };
|
|
}
|
|
return { ...it };
|
|
})
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 保存薪资项目公式
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handleSaveFormnul = (id, items) => {
|
|
const { itemGroups } = this.state;
|
|
this.setState({
|
|
itemGroups: _.map(itemGroups, it => {
|
|
if (id === it.id) {
|
|
return { ...it, items };
|
|
}
|
|
return { ...it };
|
|
})
|
|
}, () => {
|
|
const { empFields, itemGroups } = this.state;
|
|
const { onSaveSalaryItem } = this.props;
|
|
onSaveSalaryItem(empFields, itemGroups);
|
|
});
|
|
};
|
|
|
|
/*
|
|
* Author: 黎永顺
|
|
* Description: 员工基本信息-预览
|
|
* Params:
|
|
* Date: 2022/12/14
|
|
*/
|
|
handlePreview = () => {
|
|
this.setState({ previewVisible: true });
|
|
};
|
|
|
|
render() {
|
|
const { empFields, itemGroups, previewVisible } = this.state;
|
|
return (
|
|
<div className="ledgerSalaryItemWrapper">
|
|
<LedgerSalaryItemBaseInfo
|
|
{...this.props} dataSource={empFields}
|
|
onChangeSortableList={this.handleChangeSortableList}
|
|
onPreview={this.handlePreview}
|
|
/>
|
|
<LedgerSalaryItemPreviewModal
|
|
visible={previewVisible}
|
|
empFields={empFields} itemGroups={itemGroups}
|
|
onCancel={() => this.setState({ previewVisible: false })}
|
|
/>
|
|
<LedgerSalaryItemNormal
|
|
ref={dom => this.ledgerSalaryItemNormalRef = dom}
|
|
{...this.props} dataSource={itemGroups}
|
|
onSaveCategory={this.handleSaveCateGory}
|
|
onDeleteCategroy={this.handleDeleteCategroy}
|
|
onDeleteCategroyItems={this.handleDeleteCategroyItems}
|
|
onUpgo={this.handleUpgo}
|
|
onDowngo={this.handleDowngo}
|
|
onDropCategoryItem={this.handleDropCategroyItem}
|
|
onHandleItemhide={this.handleDropCategroyItem}
|
|
onChangeSelectedRowKeys={this.handleChangeSelectedRowKeys}
|
|
onAddSalaryItems={this.handleAddSalaryItems}
|
|
onSaveFormnul={this.handleSaveFormnul}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default LedgerSalaryItem;
|