diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/categoryAddModal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/categoryAddModal.js new file mode 100644 index 00000000..2aef96cb --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/categoryAddModal.js @@ -0,0 +1,79 @@ +/* + * Author: 黎永顺 + * name: 复制账套 + * Description: + * Date: 2022/12/8 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { categoryConditions } from "../config"; +import { WeaDialog } from "ecCom"; +import { Button } from "antd"; +import { getSearchs } from "../../../util"; + +@inject("ledgerStore") +@observer +class CategoryAddModal extends Component { + constructor(props) { + super(props); + this.state = { + loading: false + }; + } + + componentDidMount() { + this.getFormFields(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) { + const { ledgerStore, name = "" } = nextProps; + const { categoryForm: form } = ledgerStore; + form.updateFields({ + name: { value: name } + }); + } + } + + getFormFields = () => { + const { ledgerStore } = this.props; + const { categoryForm: form } = ledgerStore; + form.initFormFields(categoryConditions); + }; + handleSubmit = () => { + const { ledgerStore, id, onSaveCategory, onCancel } = this.props; + const { categoryForm: form } = ledgerStore; + form.validateForm().then(f => { + if (f.isValid) { + const payload = form.getFormParams(); + onSaveCategory({ ...payload, id }); + onCancel(); + } else { + f.showErrors(); + } + }); + }; + + + render() { + const { onCancel, ledgerStore, ...extra } = this.props; + const { loading } = this.state; + const { categoryForm: form } = ledgerStore; + const buttons = [ + , + + ]; + return ( + + {getSearchs(form, categoryConditions, 1)} + + ); + } +} + +export default CategoryAddModal; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/index.less b/pc4mobx/hrmSalary/pages/ledgerPage/components/index.less index 0fc0fb8d..f4c29337 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/index.less +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/index.less @@ -148,3 +148,63 @@ } } } + +//薪资项目 +.ledgerSalaryItemWrapper { + .userInfoWrapper { + margin-top: 10px; + margin-bottom: 10px; + padding: 10px; + border: 1px solid #ebedf0; + border-radius: 5px; + display: flex; + align-items: center; + + .wea-sortable-grid-item { + display: inline-block; + border: none; + padding: 0; + } + } + + .categroyListWrapper { + .titleNormalWrapper { + display: flex; + justify-content: space-between; + align-items: center; + .titleWrapper, .titleBtnWrapper{ + display: flex; + align-items: center; + width: inherit; + } + .titleWrapper{ + i{ + font-size: 16px; + color: #333; + margin-left: 8px; + } + } + .titleBtnWrapper{ + .wea-button-icon{ + margin-left: 12px; + } + } + } + } + + .titleWrapper { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + + .titleLeft { + display: flex; + align-items: center; + + & > span { + margin-right: 8px; + } + } + } +} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAdjustRuleAddModal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAdjustRuleAddModal.js index 220ff5e2..38552ba7 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAdjustRuleAddModal.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAdjustRuleAddModal.js @@ -29,8 +29,9 @@ class LedgerAdjustRuleAddModal extends Component { } listSalarySobItem = (salarySobId) => { + const { salaryRuleItemsList } = this.props; const payload = { - excludeSalaryItemIds: [], + excludeSalaryItemIds: _.map(salaryRuleItemsList, item => item.salaryItemId), salarySobId }; listSalarySobItem(payload).then(({ status, data }) => { @@ -53,7 +54,7 @@ class LedgerAdjustRuleAddModal extends Component { } const items = { ...extraItems, - salaryItemName: this.state.salaryItemName, + salaryItemName: this.state.salaryItemName }; this.handleReset(); onSave([...salaryRuleItemsList, items]); diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js index 53aef91a..5aa85886 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerAssociatedPersonnel.js @@ -85,7 +85,7 @@ class LedgerAssociatedPersonnel extends Component { render() { const { selectedKey, searchValue, rowKeys, personalAddModal } = this.state; - const { taxAgentStore: { showOperateBtn }, editId } = this.props; + const { taxAgentStore: { showOperateBtn }, editId, saveSalarySobId } = this.props; const topTab = [ { title: "关联人员范围", @@ -129,7 +129,7 @@ class LedgerAssociatedPersonnel extends Component { /> this.personalScopeTableRef = dom} - searchKeyVal={{ key: "salarySobId", value: editId }} + searchKeyVal={{ key: "salarySobId", value: editId || saveSalarySobId }} APIFox={APIFox} tabActive={selectedKey} searchValue={searchValue} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js index e7382646..6d39fd12 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerBackCalculatedSalaryItem.js @@ -42,9 +42,9 @@ class LedgerBackCalculatedSalaryItem extends Component { } getAggregate = () => { - const { editId: salarySobId } = this.props; + const { editId: salarySobId, saveSalarySobId } = this.props; const { backCalcItems } = this.state; - getAggregate({ salarySobId }).then(({ status, data }) => { + getAggregate({ salarySobId: salarySobId || saveSalarySobId }).then(({ status, data }) => { if (status) { this.setState({ backCalcItems: _.map(backCalcItems, item => { diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryAdjustmentRules.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryAdjustmentRules.js index 706b0ff5..a1aad64c 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryAdjustmentRules.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryAdjustmentRules.js @@ -31,8 +31,8 @@ class LedgerSalaryAdjustmentRules extends Component { } listAdjustmentRule = () => { - const { editId: salarySobId } = this.props; - listAdjustmentRule({ salarySobId }).then(({ status, data }) => { + const { editId: salarySobId, saveSalarySobId } = this.props; + listAdjustmentRule({ salarySobId: salarySobId || saveSalarySobId }).then(({ status, data }) => { if (status) { this.setState({ dataSource: data @@ -46,12 +46,12 @@ class LedgerSalaryAdjustmentRules extends Component { }; handleAddAdjustRule = () => { const { adjustRuleAddModal } = this.state; - const { editId } = this.props; + const { editId, saveSalarySobId } = this.props; this.setState({ adjustRuleAddModal: { ...adjustRuleAddModal, visible: true, - salarySobId: editId + salarySobId: editId || saveSalarySobId } }); }; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js new file mode 100644 index 00000000..45bd3000 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItem.js @@ -0,0 +1,301 @@ +/* + * Author: 黎永顺 + * name: 薪资项目 + * Description: + * Date: 2022/12/13 + */ +import React, { Component } from "react"; +import LedgerSalaryItemBaseInfo from "./ledgerSalaryItemBaseInfo"; +import LedgerSalaryItemNormal from "./ledgerSalaryItemNormal"; +import { getLedgerItemForm } from "../../../apis/ledger"; +import "./index.less"; + +class LedgerSalaryItem extends Component { + constructor(props) { + super(props); + this.state = { + 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: itemGroups.length, + 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)) + }; + } + 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: data }; + } + 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); + }); + }; + + render() { + const { empFields, itemGroups } = this.state; + return ( +
+ + 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} + /> +
+ ); + } +} + +export default LedgerSalaryItem; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js new file mode 100644 index 00000000..0df63310 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemAddModal.js @@ -0,0 +1,150 @@ +import React from "react"; +import { Button, Switch } from "antd"; +import { WeaDialog, WeaInputSearch, WeaTable } from "ecCom"; +import { listSalaryItem } from "../../../apis/ledger"; + +export default class LedgerSalaryItemAddModal extends React.Component { + constructor(props) { + super(props); + this.state = { + loading: { + query: false + }, + name: "", + selectedRowKeys: [], + dataSource: [], + columns: [], + pageInfo: { + current: 1, + pageSize: 10, + total: 0 + } + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visivle && nextProps.visible) { + this.setState({ selectedRowKeys: [] }, () => { + this.listSalaryItem(); + }); + } + } + + listSalaryItem = () => { + const { itemGroups } = this.props; + const { name, pageInfo, loading } = this.state; + let excludeIds = []; + itemGroups.map(item => { + item.items && item.items.map(i => { + excludeIds.push(i.salaryItemId); + }); + }); + const payload = { + excludeIds, + name, + ...pageInfo + }; + this.setState({ loading: { ...loading, query: true } }); + listSalaryItem(payload).then(({ status, data }) => { + this.setState({ loading: { ...loading, query: false } }); + if (status) { + const { pageNum: current, pageSize, total, columns, list: dataSource } = data; + this.setState({ + pageInfo: { ...pageInfo, current, pageSize, total }, + dataSource, + columns + }); + } + }).catch(() => { + this.setState({ loading: { ...loading, query: false } }); + }); + }; + getSalaryItemAddColumns = () => { + const { columns } = this.state; + let newColumns = []; + newColumns = columns.map(column => { + let newColumn = column; + newColumn.render = (text, record, index) => { //前端元素转义 + let valueSpan = record[newColumn.dataIndex + "span"] !== undefined ? record[newColumn.dataIndex + "span"] : record[newColumn.dataIndex]; + switch (newColumn.dataIndex) { + case "useDefault": + case "useInEmployeeSalary": + return ; + default: + return
; + } + }; + return newColumn; + }); + return newColumns; + }; + + handleAdd = () => { + const { dataSource, selectedRowKeys } = this.state; + const { onAddSalaryItems, id, onCancel } = this.props; + let selectItems = []; + dataSource.map(item => { + item = { ...item }; + selectedRowKeys.map(key => { + if (item.id === key) { + item.salaryItemId = item.id; + item.key = item.id; + selectItems.push(item); + } + }); + }); + onCancel(); + onAddSalaryItems(id, selectItems); + }; + + render() { + const { onCancel, visible } = this.props; + const { name, selectedRowKeys, pageInfo, dataSource, loading } = this.state; + const pagination = { + ...pageInfo, + showTotal: total => `共 ${total} 条`, + showQuickJumper: true, + pageSizeOptions: ["10", "20", "50", "100"], + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => { + this.listSalaryItem(); + }); + } + }; + const rowSelection = { + selectedRowKeys, + onChange: (selectedRowKeys) => { + this.setState({ selectedRowKeys }, () => { + }); + } + }; + return ( + 添加]} + > +
+ this.setState({ name })} + onSearch={() => this.listSalaryItem()} + /> +
+ +
+ ); + } +} diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js new file mode 100644 index 00000000..7d399054 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemBaseInfo.js @@ -0,0 +1,103 @@ +/* + * Author: 黎永顺 + * name: 薪资项目-员工基本信息 + * Description: + * Date: 2022/12/13 + */ +import React, { Component } from "react"; +import { WeaHelpfulTip, WeaSearchGroup, WeaSelect, WeaSortable } from "ecCom"; +import { Button, Icon } from "antd"; +import { empFieldList } from "../../../apis/ledger"; + +class LedgerSalaryItemBaseInfo extends Component { + constructor(props) { + super(props); + this.state = { + empFieldListOptions: [] + }; + } + + componentDidMount() { + this.empFieldList(); + } + + empFieldList = () => { + empFieldList().then(({ status, data }) => { + if (status) { + const dataFilter = _.filter(data, it => !["taxAgentName", "username", "departmentName"].includes(it.id)); + this.setState({ + empFieldListOptions: _.map(dataFilter, it => ({ key: it.id, showname: it.name })) + }); + } + }); + }; + + handleAddEmpList = (key, showname) => { + const { dataSource, onChangeSortableList } = this.props; + const obj = { + canDelete: true, + fieldId: key, + fieldName: showname, + id: dataSource.length, + salarySobId: "", + sortedIndex: dataSource.length + }; + onChangeSortableList([...dataSource, obj]); + }; + handleDeleteEmplist = (item) => { + const { dataSource, onChangeSortableList } = this.props; + onChangeSortableList(_.xorWith(dataSource, [item], _.isEqual)); + }; + + render() { + const { dataSource, onChangeSortableList } = this.props; + const { empFieldListOptions } = this.state; + return ( + }> +
+ { + const { fieldName, canDelete } = item; + return
+ {fieldName} + { + canDelete && + this.handleDeleteEmplist(item)} + /> + } +
; + }} + className="wea-sortable-grid-item" + /> + +
+
+ ); + } +} + +export default LedgerSalaryItemBaseInfo; +const TitleComp = () => { + return
+
+ 员工基本信息 + +
+ +
; +}; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemNormal.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemNormal.js new file mode 100644 index 00000000..26f9a98d --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemNormal.js @@ -0,0 +1,252 @@ +/* + * Author: 黎永顺 + * name: 薪资项目-正常薪资所得 + * Description: + * Date: 2022/12/13 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaButtonIcon, WeaSearchGroup } from "ecCom"; +import { Button, Modal } from "antd"; +import CategoryAddModal from "./categoryAddModal"; +import LedgerSalaryItemAddModal from "./ledgerSalaryItemAddModal"; +import LedgerSalaryItemTable from "./ledgerSalaryItemTable"; +import "./index.less"; +import FormalFormModal from "../../salaryItem/formalFormModal"; + +@inject("ledgerStore") +@observer +class LedgerSalaryItemNormal extends Component { + constructor(props) { + super(props); + this.state = { + addCategoryItemsVisible: false, + categoryModal: { + visible: false, + title: "新增分类", + name: "", + id: "" + }, + editFormulModal: { + visible: false, + formulaId: "", + valueType: "", + dataType: "" + }, + //公式保存数据 + formnulField: {}, + formnulId: "" + }; + } + + componentWillUnmount() { + this.handleResetFormnul(); + } + + handleEditFormnul = (field, record) => { + const { valueType, formulaId, dateType: dataType, id } = record; + const { editFormulModal } = this.state; + this.setState({ + editFormulModal: { + ...editFormulModal, + visible: true, + valueType, formulaId, dataType + }, + formnulField: field, + formnulId: id + }); + }; + handleSaveFormnul = (data) => { + const { onSaveFormnul } = this.props; + const { formnulField, formnulId } = this.state; + const tmpV = _.cloneDeep(formnulField.items); + const formnulData = _.map(tmpV, it => { + if (it.id === formnulId) { + return { ...it, formulaId: data.id, formulaContent: data.formula }; + } + return { ...it }; + }); + onSaveFormnul(formnulField.id, formnulData); + }; + handleAddCategory = (name = "", id = "") => { + const { categoryModal } = this.state; + this.setState({ + categoryModal: { + ...categoryModal, + visible: true, + name, + title: name ? "编辑分类" : "新增分类", + id + } + }); + }; + handleDeleteCategory = (id) => { + const { onDeleteCategroy } = this.props; + Modal.confirm({ + title: "信息确认", + content: "确认要删除吗?", + onOk: () => { + onDeleteCategroy(id); + } + }); + }; + handleDeleteCategoryItems = (id, selectedRowKeys) => { + const { onDeleteCategroyItems } = this.props; + Modal.confirm({ + title: "信息确认", + content: "确认删除所选薪资项目吗?删除后此项目下的进位规则/保留小数位/公式内容会一起被清除!", + onOk: () => { + onDeleteCategroyItems(id, selectedRowKeys); + } + }); + }; + handleUpgo = (sortedIndex) => { + const { onUpgo } = this.props; + onUpgo(sortedIndex); + }; + handleDowngo = (sortedIndex) => { + const { onDowngo } = this.props; + onDowngo(sortedIndex); + }; + handleClose = () => { + const { ledgerStore } = this.props; + const { categoryForm: form } = ledgerStore; + const { categoryModal } = this.state; + this.setState({ + categoryModal: { + ...categoryModal, + visible: false, + title: "新增分类", + name: "", + id: "" + } + }, () => form.resetForm()); + }; + handleCloseFormnul = () => { + const { editFormulModal } = this.state; + this.setState({ + editFormulModal: { + ...editFormulModal, + visible: false, + formulaId: "", + valueType: "", dataType: "" + } + }); + }; + handleResetFormnul = () => { + this.setState({ + formnulField: {}, + formnulId: "" + }); + }; + + render() { + const { + dataSource, + onSaveCategory, + onDropCategoryItem, + onHandleItemhide, + onChangeSelectedRowKeys, + onAddSalaryItems + } = this.props; + const { categoryModal, addCategoryItemsVisible, editFormulModal } = this.state; + return ( + }> +
+ { + _.map(dataSource, field => { + const { items } = field; + return this.setState({ addCategoryItemsVisible: { visible: true, id } })} + onUpgo={this.handleUpgo} + onDowngo={this.handleDowngo} + /> + } + > + onDropCategoryItem(field, data)} + onHandleItemhide={(data) => onHandleItemhide(field, data)} + onChangeSelectedRowKeys={(data) => onChangeSelectedRowKeys(field, data)} + onEditFormnul={(data) => this.handleEditFormnul(field, data)} + /> + ; + }) + } + this.setState({ addCategoryItemsVisible: { visible: false, id: "" } })} + onAddSalaryItems={onAddSalaryItems} + /> + + {/*公式编辑*/} + { + editFormulModal.visible && + + } +
+
+ ); + } +} + +export default LedgerSalaryItemNormal; +const TitleNormalComp = (props) => { + const { + name, onEditCategory, onDeleteCategory, + sortedIndex, dataSourceLen, id, onUpgo, + onDowngo, selectedRowKeys = [], onDeleteCategoryItems, + onAddCategoryItems + } = props; + return
+
+ {name} + { + name !== "未分类" && + onEditCategory(name, id)}/> + } + { + name !== "未分类" && + onDeleteCategory(id)}/> + } + { + sortedIndex !== 0 && + onUpgo(sortedIndex)}/> + } + { + sortedIndex !== dataSourceLen - 1 && + onDowngo(sortedIndex)}/> + } +
+
+ onDeleteCategoryItems(id, selectedRowKeys)}/> + onAddCategoryItems(id)}/> +
+
; +}; + +const TitleComp = (props) => { + const { onAddCategory } = props; + return
+ 正常工资薪金所得 + +
; +}; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemTable.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemTable.js new file mode 100644 index 00000000..4498a36d --- /dev/null +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSalaryItemTable.js @@ -0,0 +1,135 @@ +/* + * Author: 黎永顺 + * name: 薪资项目-列表数据 + * Description: + * Date: 2022/12/13 + */ +import React, { Component } from "react"; +import { WeaCheckbox, WeaHelpfulTip, WeaTable } from "ecCom"; + +class LedgerSalaryItemTable extends Component { + constructor(props) { + super(props); + this.state = { + selectedRowKeys: [] + }; + } + + /* + * Author: 黎永顺 + * Description: 列表操作隐藏复选框 + * Params: + * Date: 2022/12/14 + */ + handleChangeItem = (value, id) => { + const { dataSource, onHandleItemhide } = this.props; + onHandleItemhide( + _.map([...dataSource], item => { + if (id === item.id) { + return { + ...item, + itemHide: String(value) + }; + } + return { ...item }; + }) + ); + }; + handleChangeAllItem = (value) => { + const { dataSource, onHandleItemhide } = this.props; + onHandleItemhide( + _.map([...dataSource], item => { + return { + ...item, + itemHide: String(value) + }; + }) + ); + }; + + render() { + const { dataSource, onDropCategoryItem, onChangeSelectedRowKeys, onEditFormnul } = this.props; + const { selectedRowKeys } = this.state; + const rowSelection = { + selectedRowKeys, + onChange: (selectedRowKeys) => this.setState({ selectedRowKeys }, () => { + onChangeSelectedRowKeys(this.state.selectedRowKeys); + }), + getCheckboxProps: record => ({ + disabled: !record.canDelete + }) + }; + const checkValue = _.every(dataSource, it => it.itemHide && it.itemHide === "1") ? "1" : "0"; + const columns = [ + { + title: "名称", + dataIndex: "name", + key: "name" + }, + { + title: + 核算公式 + } placement="bottom" width={200}/> + , + dataIndex: "formulaContent", + key: "formulaContent", + render: (text, record) => { + if (record.canEdit) { + return ( + + onEditFormnul(record)}> {text} + + ); + } else { + return {text} ; + } + } + }, + { + title: "个税申请表对应字段", + dataIndex: "taxDeclarationColumn", + key: "taxDeclarationColumn" + }, + { + title: + this.handleChangeAllItem(value)} + /> + 隐藏 + , + dataIndex: "itemHide", + key: "itemHide", + render: (text, record) => this.handleChangeItem(value, record.id)} + /> + } + ]; + return ( + ({ + index, + moveRow: record + })} + pagination={false} + onDrop={onDropCategoryItem} + draggable={true} + /> + ); + } +} + +export default LedgerSalaryItemTable; + +const HelpContent = () => { + return + 1、新建薪资账套时,核算公式与【薪资项目管理】菜单一致;
+ 2、取值方式为公式的薪资项目,核算公式显示为具体公式;点击公式可编辑公式,核算时,按照当前薪资项目的公式进行核算;
+ 3、薪资账套内的薪资项目的公式或SQL的修改或公式的修改,都不影响【薪资项目管理】菜单的薪资项目取值方式或公式,只对当前账套生效;
+
; +}; diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js index 02402512..cf486f21 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/components/ledgerSlide.js @@ -13,7 +13,8 @@ import LedgerBaseSetting from "./ledgerBaseSetting"; import LedgerAssociatedPersonnel from "./ledgerAssociatedPersonnel"; import LedgerSalaryAdjustmentRules from "./ledgerSalaryAdjustmentRules"; import LedgerBackCalculatedSalaryItem from "./ledgerBackCalculatedSalaryItem"; -import { saveAdjustmentRule, saveLedgerBasic } from "../../../apis/ledger"; +import LedgerSalaryItem from "./ledgerSalaryItem"; +import { saveAdjustmentRule, saveLedgerBasic, saveLedgerItem } from "../../../apis/ledger"; import "./index.less"; const Step = WeaSteps.Step; @@ -34,10 +35,19 @@ class LedgerSlide extends Component { current: 0, loading: false, baseSettingInfo: {}, - adjustRules: [] + adjustRules: [], + empFields: [], itemGroups: [], + saveSalarySobId: "" }; } + componentWillUnmount() { + alert(1111); + this.setState({ + saveSalarySobId: "" + }); + } + /* * Author: 黎永顺 * Description: 保存基本信息 @@ -57,13 +67,13 @@ class LedgerSlide extends Component { return false; } this.setState({ loading: true }); - saveLedgerBasic({ ...extra, description, id: editId }).then(({ status, errormsg }) => { + saveLedgerBasic({ ...extra, description, id: editId }).then(({ status, data, errormsg }) => { this.setState({ loading: false }); if (status) { const { onRefreshList } = this.props; message.success("保存成功"); onRefreshList(); - !editId && this.setState({ current: current + 1 }); + !editId && this.setState({ current: current + 1, saveSalarySobId: data }); } else { message.error(errormsg || "保存失败"); } @@ -76,9 +86,9 @@ class LedgerSlide extends Component { * Date: 2022/12/12 */ saveLedgerAdjustRule = () => { - const { adjustRules } = this.state; + const { adjustRules, saveSalarySobId } = this.state; const payload = { - salarySobId: this.props.editId, + salarySobId: this.props.editId || saveSalarySobId, ruleParams: adjustRules }; this.setState({ loading: true }); @@ -86,12 +96,37 @@ class LedgerSlide extends Component { this.setState({ loading: false }); if (status) { message.success("保存成功"); + this.handleClose(); } else { message.success(errormsg || "保存失败"); } }).catch(() => this.setState({ loading: false })); - } - ; + }; + /* + * Author: 黎永顺 + * Description: 薪资项目保存 + * Params: + * Date: 2022/12/14 + */ + saveLedgerItem = () => { + const { empFields, itemGroups, saveSalarySobId } = this.state; + const { editId: salarySobId } = this.props; + const payload = { + empFields, + itemGroups: _.filter(itemGroups, it => it.name !== "未分类"), + items: _.find(itemGroups, it => it.name === "未分类").items || [], + salarySobId: salarySobId || saveSalarySobId + }; + this.setState({ loading: true }); + saveLedgerItem(payload).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success("保存成功"); + } else { + message.error(errormsg || "保存失败"); + } + }).catch(() => this.setState({ loading: false })); + }; handleChangeSlideTab = (current) => { this.setState({ current: Number(current) }); }; @@ -107,22 +142,36 @@ class LedgerSlide extends Component { handleChangeSaveParams = (baseSettingInfo) => { this.setState({ baseSettingInfo }); }; + /* + * Author: 黎永顺 + * Description: 薪资项目保存数据 + * Params: + * Date: 2022/12/14 + */ + handleSaveSalaryItemParams = (empFields, itemGroups) => { + this.setState({ empFields, itemGroups }); + }; renderChildren = () => { - const { current } = this.state; + const { current, saveSalarySobId } = this.state; let CurrentDom = null; switch (current) { case 0: CurrentDom = ; break; case 1: - CurrentDom = ; + CurrentDom = ; + break; + case 2: + CurrentDom = ; break; case 3: - CurrentDom = ; + CurrentDom = ; break; case 4: CurrentDom = - this.setState({ adjustRules })}/>; + this.setState({ adjustRules })}/>; break; default: CurrentDom = null; @@ -148,23 +197,34 @@ class LedgerSlide extends Component { break; case 1: CurrentDom = !editId ? [ - , + , ] : []; break; case 2: CurrentDom = !editId ? [ - , + , , - - ] : []; + + ] : [ + + ]; break; case 3: CurrentDom = !editId ? [ + , , - + ] : []; break; case 4: diff --git a/pc4mobx/hrmSalary/pages/ledgerPage/config.js b/pc4mobx/hrmSalary/pages/ledgerPage/config.js index 6bd81428..b130f4f6 100644 --- a/pc4mobx/hrmSalary/pages/ledgerPage/config.js +++ b/pc4mobx/hrmSalary/pages/ledgerPage/config.js @@ -27,6 +27,24 @@ export const copyConditions = [ defaultshow: true } ]; +export const categoryConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["name"], + fieldcol: 14, + rules: "required|string", + label: "名称", + labelcol: 6, + value: "", + viewAttr: 3 + } + ], + defaultshow: true + } +]; export const baseSettingFormItem = [ { key: "name", @@ -720,7 +738,7 @@ export const roundingRules = [ key: "UP_EVEN", selected: false, showname: "向上求偶" - }, + } ]; export const keepDecimalPlaces = [ { diff --git a/pc4mobx/hrmSalary/stores/ledger.js b/pc4mobx/hrmSalary/stores/ledger.js index 618cae74..848c22fb 100644 --- a/pc4mobx/hrmSalary/stores/ledger.js +++ b/pc4mobx/hrmSalary/stores/ledger.js @@ -4,12 +4,14 @@ import { WeaForm, WeaTableNew } from "comsMobx"; import * as API from "../apis/ledger"; // 引入API接口文件 import { notNull } from "../util/validate"; +import { categoryConditions } from "../pages/ledgerPage/config"; const { TableStore } = WeaTableNew; export class LedgerStore { //重构薪资账套 - @observable copyForm = new WeaForm(); // nrew 一个form + @observable copyForm = new WeaForm(); // 复制form + @observable categoryForm = new WeaForm(); // 新增分类form /*******************************************************/