From 4ec71f11cea79f13f9e57c50474325b600f26842 Mon Sep 17 00:00:00 2001
From: MustangDeng <670124965@qq.com>
Date: Wed, 30 Mar 2022 20:04:34 +0800
Subject: [PATCH] =?UTF-8?q?=E8=96=AA=E8=B5=84=E8=B4=A6=E5=A5=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pc4mobx/hrmSalary/apis/ledger.js | 82 ++++++-
.../hrmSalary/pages/ledger/calcRulesForm.js | 88 ++++++-
pc4mobx/hrmSalary/pages/ledger/columns.js | 11 +-
pc4mobx/hrmSalary/pages/ledger/index.js | 123 +++++++---
.../hrmSalary/pages/ledger/salaryItemForm.js | 9 +-
.../hrmSalary/pages/ledger/slideBaseForm.js | 39 +--
.../pages/ledger/step3/UserInfoSelect.js | 17 +-
.../pages/ledger/step4/RuleEditModal.js | 137 +++++++++++
.../pages/ledger/step5/ValidRuleEditModal.js | 64 +++++
.../hrmSalary/pages/ledger/validRulesForm.js | 103 +++++++-
pc4mobx/hrmSalary/stores/ledger.js | 224 +++++++++++++++++-
pc4mobx/hrmSalary/util/request.js | 13 +
12 files changed, 808 insertions(+), 102 deletions(-)
create mode 100644 pc4mobx/hrmSalary/pages/ledger/step4/RuleEditModal.js
create mode 100644 pc4mobx/hrmSalary/pages/ledger/step5/ValidRuleEditModal.js
diff --git a/pc4mobx/hrmSalary/apis/ledger.js b/pc4mobx/hrmSalary/apis/ledger.js
index bb27784b..59e62d18 100644
--- a/pc4mobx/hrmSalary/apis/ledger.js
+++ b/pc4mobx/hrmSalary/apis/ledger.js
@@ -1,15 +1,9 @@
import { WeaTools } from 'ecCom';
+import {postFetch} from '../util/request'
//薪资帐套列表
export const getLedgerList = params => {
- return fetch('/api/bs/hrmsalary/salarysob/list', {
- method: 'POST',
- mode: 'cors',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(params)
- }).then(res => res.json())
+ return postFetch("/api/bs/hrmsalary/salarysob/list", params)
}
//启用/禁用薪资帐套
@@ -51,7 +45,14 @@ export const deleteLedger = params => {
//薪资帐套基本信息表单
export const getLedgerBasicForm = params => {
- return WeaTools.callApi('/api/bs/hrmsalary/salarysob/basic/getForm', 'get', params);
+ return fetch('/api/bs/hrmsalary/salarysob/basic/getForm', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
}
//保存薪资帐套基本信息
@@ -143,7 +144,14 @@ export const getLedgerItemForm = params => {
//薪资帐套校验规则列表
export const getLedgerRuleList = params => {
- return WeaTools.callApi('/api/bs/hrmsalary/salarysob/checkrule/list', 'POST', params);
+ return fetch('/api/bs/hrmsalary/salarysob/checkrule/list', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
}
//薪资帐套校验规则表单
@@ -153,7 +161,14 @@ export const getLedgerRuleForm = params => {
//保存薪资帐套校验规则
export const saveLedgerRule = params => {
- return WeaTools.callApi('/api/bs/hrmsalary/salarysob/checkrule/save', 'POST', params);
+ return fetch('/api/bs/hrmsalary/salarysob/checkrule/save', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
}
//编辑薪资帐套校验规则公式
@@ -163,7 +178,14 @@ export const updateLedgerRuleFormula = params => {
//删除薪资帐套校验规则
export const deleteLedgerRule = params => {
- return WeaTools.callApi('/api/bs/hrmsalary/salarysob/checkrule/delete', 'POST', params);
+ return fetch('/api/bs/hrmsalary/salarysob/checkrule/delete', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
}
// 薪资项目可选列表
@@ -182,3 +204,39 @@ export const listSalaryItem = params => {
export const empFieldList = () => {
return WeaTools.callApi('/api/bs/hrmsalary/salarysob/empField/list', 'GET', {});
}
+
+// 调薪计薪规则可选的薪资项目列表
+export const listSalarySobItem = (params) => {
+ return fetch('/api/bs/hrmsalary/salarysob/adjustmentrule/listSalarySobItem', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
+}
+
+// 调薪计薪规则保存
+export const saveAdjustmentRule = (params) => {
+ return fetch('/api/bs/hrmsalary/salarysob/adjustmentrule/save', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
+}
+
+// 调薪计薪规则列表
+export const listAdjustmentRule = params => {
+ return fetch('/api/bs/hrmsalary/salarysob/adjustmentrule/list', {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
+}
diff --git a/pc4mobx/hrmSalary/pages/ledger/calcRulesForm.js b/pc4mobx/hrmSalary/pages/ledger/calcRulesForm.js
index 936b994e..29b34b27 100644
--- a/pc4mobx/hrmSalary/pages/ledger/calcRulesForm.js
+++ b/pc4mobx/hrmSalary/pages/ledger/calcRulesForm.js
@@ -1,19 +1,99 @@
import React from 'react'
import { Table, Icon } from 'antd'
-import { slideStep4Columns, dataSource} from './columns'
+import { slideStep4Columns} from './columns'
import "./index.less"
+import RuleEditModal from './step4/RuleEditModal'
+import { inject, observer } from 'mobx-react';
+@inject('ledgerStore')
+@observer
export default class CalRulesForm extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ modalVisible: false,
+ slideStep4Columns: slideStep4Columns.map(item => {
+ item = {...item}
+ if(item.key == "cz") {
+ item.render = (text, record) => {
+ return (
+ {this.handleDeleteItem(record)}}>删除
+ )
+ }
+ }
+ return item
+ })
+ }
+ }
+
+ componentWillMount() {
+ const { ledgerStore: { listAdjustmentRule }} = this.props;
+ listAdjustmentRule()
+ }
+
+ handleSave(params) {
+ const { ledgerStore: {sobItemRuleDataSource, setSobItemRuleDataSource}} = this.props;
+ let dataSource = [...sobItemRuleDataSource]
+ dataSource.push(params)
+ setSobItemRuleDataSource(dataSource)
+ }
+
+ handleDeleteItem(record) {
+ const { ledgerStore: {sobItemRuleDataSource, setSobItemRuleDataSource}} = this.props;
+ let dataSource = [...sobItemRuleDataSource]
+ setSobItemRuleDataSource(dataSource.filter(item => item.salaryItemId != record.key))
+ }
+
+ convertAdjustmentType(index) {
+ let nameList = ['取调整后薪资', '分段计薪', '取平均']
+ return nameList[index]
+ }
+
+ getSalaryItemName(salaryItemId) {
+ const { ledgerStore: {ruleOptionList}} = this.props;
+ let result = ""
+ ruleOptionList.map(item => {
+ if(item.key == salaryItemId) {
+ result = item.showname
+ }
+ })
+ return result;
+ }
+
+ convertDataSource(dataSoruce) {
+ let result = [...dataSoruce];
+ return result.map(item => {
+ let resultStr = "";
+ resultStr += `${item.dayOfMonth}号(含)之前调薪,${this.convertAdjustmentType(item.beforeAdjustmentType)};${item.dayOfMonth}之后调薪,${this.convertAdjustmentType(item.afterAdjustmentType)}`
+ return {
+ key: item.salaryItemId,
+ salaryItemId: item.salaryItemId,
+ salaryItemName: item.salaryItemName ? item.salaryItemName : this.getSalaryItemName(item.salaryItemId),
+ rule: resultStr
+ }
+ })
+
+ }
+
render() {
+ const { ledgerStore: {sobItemRuleDataSource}} = this.props;
+ let datas = this.convertDataSource(sobItemRuleDataSource)
return (
-
-
+ {this.setState({modalVisible: true})}}/>
-
+
+
+ {
+ this.state.modalVisible && this.setState({modalVisible: false})}
+ onSave={(params) => {this.handleSave(params)}}
+ />
+ }
)
}
diff --git a/pc4mobx/hrmSalary/pages/ledger/columns.js b/pc4mobx/hrmSalary/pages/ledger/columns.js
index 621c2460..75856e85 100644
--- a/pc4mobx/hrmSalary/pages/ledger/columns.js
+++ b/pc4mobx/hrmSalary/pages/ledger/columns.js
@@ -77,18 +77,17 @@ export const slideStep3Columns = [
export const slideStep4Columns = [
{
title: "薪资项目",
- dataIndex: 'title',
- key: 'title',
+ dataIndex: 'salaryItemName',
+ key: 'salaryItemName',
},
{
title: "计薪规则",
- dataIndex: 'title',
- key: 'title',
+ dataIndex: 'rule',
+ key: 'rule',
},
{
title: "操作",
- dataIndex: 'cz',
- key: 'cz',
+ key: 'cz'
},
]
diff --git a/pc4mobx/hrmSalary/pages/ledger/index.js b/pc4mobx/hrmSalary/pages/ledger/index.js
index d40ff84f..738d0979 100644
--- a/pc4mobx/hrmSalary/pages/ledger/index.js
+++ b/pc4mobx/hrmSalary/pages/ledger/index.js
@@ -38,20 +38,16 @@ export default class Ledger extends React.Component {
currentStep: 0,
selectedTab: 0,
currentReocrd: {},
- step1Request: {
- name: "",
- taxableItems: "1",
- salaryCycleType: "1",
- salaryCycleFromDay: "1",
- taxCycleType: "1",
- attendCycleType: "1",
- attendCycleFromDay: "1",
- socialSecurityCycleType: "1",
- description: ""
- }
+ searchValue: "",
+ step1Request: {}
}
}
+ handleSearch(value) {
+ const{ ledgerStore: {getTableDatas}} = this.props;
+ getTableDatas({name: value})
+ }
+
refereUser() {
this.setState({
editSlideVisible: true,
@@ -77,24 +73,27 @@ export default class Ledger extends React.Component {
}
- handleItemClick(record) {
+ handleItemClick(record, selectedTab = 0) {
+ const { ledgerStore: {setSalarySobId} } = this.props;
+ setSalarySobId(record.id)
this.setState({
+ selectedTab,
editSlideVisible: true,
request: record
})
-
- const { ledgerStore: {setSalarySobId} } = this.props;
- setSalarySobId(record.id)
-
}
// 编辑Slide保存按钮
handleEditSlideSave() {
- const { selectedTab } = this.state;
- const { ledgerStore: {saveLedgerItem}} = this.props;
- if(selectedTab == 2) {
+ const { selectedTab, step1Request } = this.state;
+ const { ledgerStore: {saveLedgerItem, saveAdjustmentRule, saveLedgerBasic, baseInfoRequest}} = this.props;
+ if(selectedTab == 0) {
+ saveLedgerBasic(baseInfoRequest)
+ } else if(selectedTab == 2) {
saveLedgerItem()
- }
+ } else if(selectedTab == 3) {
+ saveAdjustmentRule()
+ }
}
// 增加编辑功能,重写columns绑定事件
@@ -122,14 +121,29 @@ export default class Ledger extends React.Component {
onOperatesClick = (record, index, operate, flag) => {
const { ledgerStore: { deleteLedger }} = this.props;
switch(operate.index.toString()){
+ case "0": // 编辑
+ this.handleItemClick(record)
+ break;
case '1': // 复制
this.setState({
copyFormVisible: true,
currentReocrd: record
})
break;
+ case "3": // 关联人员
+ this.handleItemClick(record, 1)
case "4": // 删除
- deleteLedger([record.id])
+ Modal.confirm({
+ title: '信息确认',
+ content: '确认删除',
+ onOk:() => {
+ deleteLedger([record.id])
+ },
+ onCancel: () => {
+
+ },
+ });
+
break;
}
};
@@ -139,6 +153,12 @@ export default class Ledger extends React.Component {
doCopy(this.state.currentReocrd.id, value)
}
+ handleNew = () => {
+ const { ledgerStore: { initSlideData }} = this.props;
+ initSlideData();
+ this.setState({stepSlideVisible: true, currentStep: 0})
+ }
+
render() {
const { ledgerStore } = this.props;
const { loading, hasRight, form, condition, tableStore, showSearchAd, getTableDatas, doSearch, setShowSearchAd } = ledgerStore;
@@ -174,8 +194,8 @@ export default class Ledger extends React.Component {
const renderRightOperation = () => {
return (
-
-
+
+ {this.setState({searchValue: value})}} onSearch={(value) => {this.handleSearch(value)}}/>
)
}
@@ -198,12 +218,42 @@ export default class Ledger extends React.Component {
]
const handleStep1Save = () => {
- const { ledgerStore: {saveLedgerBasic} } = this.props;
- saveLedgerBasic(this.state.step1Request)
- nextStep()
+ const { step1Request } = this.state;
+ const { ledgerStore: {saveLedgerBasic, baseInfoRequest} } = this.props;
+ saveLedgerBasic(baseInfoRequest).then(() => {
+ nextStep();
+ })
}
-
+
+ const handleStep3Save = () => {
+ const { ledgerStore: {saveAdjustmentRule} } = this.props;
+ saveAdjustmentRule().then(() => {
+ nextStep()
+ })
+ }
+
+ const handleStepSave = () => {
+ const { currentStep } = this.state;
+ const { ledgerStore: { saveLedgerBasic, saveLedgerItem, saveAdjustmentRule, baseInfoRequest }} = this.props;
+ if(currentStep == 0) {
+ saveLedgerBasic(baseInfoRequest).then(() => {
+ nextStep();
+ })
+ } else if(currentStep == 1) {
+ nextStep()
+ }else if(currentStep == 2) {
+ saveLedgerItem().then(() => {
+ nextStep()
+ })
+ } else if(currentStep == 3) {
+ saveAdjustmentRule().then(() => {
+ nextStep()
+ })
+ } else if(currentStep == 4) {
+ this.setState({stepSlideVisible: false})
+ }
+ }
return (
@@ -249,21 +299,21 @@ export default class Ledger extends React.Component {
{
currentStep == 1 &&
-
+
}
{
(currentStep == 2 || currentStep == 3) &&
-
+
}
{
currentStep == 4 &&
-
+
}
@@ -273,7 +323,7 @@ export default class Ledger extends React.Component {
content={
{
- currentStep == 0 &&
{this.setState({step1Request: value})}}/>
+ currentStep == 0 &&
}
{
currentStep == 1 &&
@@ -315,25 +365,24 @@ export default class Ledger extends React.Component {
}
content={
{
- selectedTab == 0 && {this.setState({step1Request: value})}}/>
+ selectedTab == 0 &&
}
{
- selectedTab == 1 &&
+ selectedTab == 1 &&
}
{
- selectedTab == 2 &&
+ selectedTab == 2 &&
}
{
- selectedTab == 3 &&
+ selectedTab == 3 &&
}
{
- selectedTab == 4 &&
+ selectedTab == 4 &&
}
}
onClose={() => this.setState({editSlideVisible: false})}
showMask={true}
closeMaskOnClick={() => this.setState({editSlideVisible: false})} />
-
}
diff --git a/pc4mobx/hrmSalary/pages/ledger/salaryItemForm.js b/pc4mobx/hrmSalary/pages/ledger/salaryItemForm.js
index d3d8be94..2ebf1b22 100644
--- a/pc4mobx/hrmSalary/pages/ledger/salaryItemForm.js
+++ b/pc4mobx/hrmSalary/pages/ledger/salaryItemForm.js
@@ -18,11 +18,15 @@ export default class SalaryItemForm extends React.Component {
this.state = {
addCategoryVisible: false
}
-
const { ledgerStore: { empFieldList }} = this.props;
empFieldList();
}
+ componentWillMount() {
+ const {ledgerStore: {getLedgerItemForm}} = this.props;
+ getLedgerItemForm();
+ }
+
handleAddCategorySave(name) {
const {ledgerStore: {addItemGroup}} = this.props;
addItemGroup(name);
@@ -70,8 +74,6 @@ export default class SalaryItemForm extends React.Component {
-
-
{
itemGroups && itemGroups.map(item => {
@@ -83,7 +85,6 @@ export default class SalaryItemForm extends React.Component {
)
}
{
-
addCategoryVisible &&
{this.handleAddCategorySave(value)}} visible={addCategoryVisible} onCancel={() => {
setAddCategoryVisible(false)
diff --git a/pc4mobx/hrmSalary/pages/ledger/slideBaseForm.js b/pc4mobx/hrmSalary/pages/ledger/slideBaseForm.js
index 43f915f1..318c78c6 100644
--- a/pc4mobx/hrmSalary/pages/ledger/slideBaseForm.js
+++ b/pc4mobx/hrmSalary/pages/ledger/slideBaseForm.js
@@ -4,40 +4,41 @@ import { WeaSelect, WeaTextarea, WeaInput, WeaCheckbox } from "ecCom"
import "./index.less"
import TipLabel from '../../components/TipLabel'
import { daysOptions, cycleTypeOption } from './options'
+import { inject, observer } from 'mobx-react';
+@inject('ledgerStore')
+@observer
export default class SlideBaseForm extends React.Component {
constructor(props) {
super(props)
this.state = {
name: "",
- taxableItems: 1,
- request: {
- name: "",
- taxableItems: "1",
- salaryCycleType: "1",
- salaryCycleFromDay: "1",
- taxCycleType: "1",
- attendCycleType: "1",
- attendCycleFromDay: "1",
- socialSecurityCycleType: "1",
- description: ""
- }
-
+ taxableItems: 1
+ }
+ }
+ componentWillMount() {
+ const { edit } = this.props;
+ if(edit) {
+ const { ledgerStore: { getLedgerBasicForm }} = this.props;
+ getLedgerBasicForm()
}
}
handleChange(params) {
- let request = {...this.props.request, ...params}
- this.setState({request})
- this.props.onChange(request)
+ const { ledgerStore: {baseInfoRequest, setBaseInfoRequest}} = this.props;
+ let request= {...baseInfoRequest}
+ Object.keys(params).map(key => {
+ request[key] = params[key]
+ })
+ setBaseInfoRequest(request)
}
-
render() {
- const { request } = this.props;
+ const { request, ledgerStore } = this.props;
+ const { baseInfoRequest } = ledgerStore;
const { name, taxableItems, salaryCycleType, salaryCycleFromDay,
taxCycleType, attendCycleType, attendCycleFromDay, socialSecurityCycleType,
- description} = request
+ description} = baseInfoRequest
return (
diff --git a/pc4mobx/hrmSalary/pages/ledger/step3/UserInfoSelect.js b/pc4mobx/hrmSalary/pages/ledger/step3/UserInfoSelect.js
index cce381e9..4c0f8615 100644
--- a/pc4mobx/hrmSalary/pages/ledger/step3/UserInfoSelect.js
+++ b/pc4mobx/hrmSalary/pages/ledger/step3/UserInfoSelect.js
@@ -16,8 +16,8 @@ export default class UserInfoSelected extends React.Component {
}
handleSelectChange(value) {
- let list = [...this.state.list]
- const { ledgerStore: {empBrowserList}} = this.props;
+ const { ledgerStore: {empBrowserList, userSelectedList}} = this.props;
+ let list = [...userSelectedList]
let selectedItem = {}
empBrowserList.map(item => {
if(item.key == value) {
@@ -37,22 +37,25 @@ export default class UserInfoSelected extends React.Component {
message.warning("该信息已存在")
}
- const { ledgerStore: {empFields, addEmpFields}} = this.props;
+ const { ledgerStore: {empFields, addEmpFields, setUserSelectedList}} = this.props;
addEmpFields(value)
- this.setState({list, showSelect: false})
+ this.setState({showSelect: false})
+ setUserSelectedList(list)
+
}
handleItemDelete(item) {
- let list = [...this.state.list]
+ const { ledgerStore: {userSelectedList}} = this.props;
+ let list = [...userSelectedList]
this.setState({list: list.filter(i => item.key != i.key)})
}
render() {
- const { ledgerStore: {empBrowserList} } = this.props;
+ const { ledgerStore: {empBrowserList, userSelectedList} } = this.props;
return (
{
- this.state.list.map(item => (
+ userSelectedList.map(item => (
{
this.handleItemDelete(item)
}}/>
diff --git a/pc4mobx/hrmSalary/pages/ledger/step4/RuleEditModal.js b/pc4mobx/hrmSalary/pages/ledger/step4/RuleEditModal.js
new file mode 100644
index 00000000..6d54fc9a
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/ledger/step4/RuleEditModal.js
@@ -0,0 +1,137 @@
+import React from 'react'
+import { Row, Col, Radio, Button, Modal } from 'antd'
+import { WeaSelect, WeaHelpfulTip} from 'ecCom'
+import { inject, observer } from 'mobx-react';
+import {daysOptions} from "../options"
+
+
+@inject('ledgerStore')
+@observer
+export default class RuleEditModal extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ itemValue: "",
+ effectiveDate: "",
+ beforeAdjustmentType: 1,
+ afterAdjustmentType: 1
+ }
+ }
+
+ componentWillMount() {
+ const { ledgerStore: {listSalarySobItem}} = this.props;
+ listSalarySobItem();
+ }
+
+ beforeAdjustmentTypeChange(e) {
+ this.setState({beforeAdjustmentType: e.target.value})
+ }
+
+ afterAdjustmentTypeChange(e) {
+ this.setState({afterAdjustmentType: e.target.value})
+ }
+
+ handleSave() {
+
+ const { ledgerStore } = this.props;
+ const { ruleOptionList } = ledgerStore;
+ let salaryItemName = ""
+ ruleOptionList.map(item => {
+ if(item.key == this.state.itemValue) {
+ salaryItemName = item.showname
+ }
+ })
+ this.props.onSave({
+ salaryItemId:this.state.itemValue,
+ dayOfMonth:this.state.effectiveDate,
+ beforeAdjustmentType:this.state.beforeAdjustmentType,
+ afterAdjustmentType: this.state.afterAdjustmentType,
+ salaryItemName
+ })
+
+ this.props.onCancel()
+ }
+ render() {
+ const { ledgerStore } = this.props;
+ const { ruleOptionList } = ledgerStore;
+ const { beforeAdjustmentType, afterAdjustmentType } = this.state
+ return (
+ {this.props.onCancel()}} width={800}
+ footer={}
+ title="调薪计薪规则项"
+ >
+
+
+ 薪资项目
+
+ {
+ ruleOptionList.length > 0 &&
+ {this.setState({itemValue: value})} } />
+ }
+
+
+
+ 计薪规则
+
+
+
+ 如果:调薪生效日期在
+ {this.setState({effectiveDate: value})}}/>
+
+ (含)之前
+
+
+
+
+ 计薪规则为:
+ {this.beforeAdjustmentTypeChange(value)}} value={beforeAdjustmentType}>
+ 取调整后薪资
+ 分段计薪
+ 取平均
+
+
+
+
+ 否则:调薪生效日期在 {this.state.effectiveDate} 号之后
+
+
+ 计薪规则为:
+ {this.afterAdjustmentTypeChange(value)}} value={afterAdjustmentType}>
+ 取调整前薪资
+ 分段计薪
+ 取平均
+
+
+
+
+
+
+
+ )
+ }
+}
\ No newline at end of file
diff --git a/pc4mobx/hrmSalary/pages/ledger/step5/ValidRuleEditModal.js b/pc4mobx/hrmSalary/pages/ledger/step5/ValidRuleEditModal.js
new file mode 100644
index 00000000..18023039
--- /dev/null
+++ b/pc4mobx/hrmSalary/pages/ledger/step5/ValidRuleEditModal.js
@@ -0,0 +1,64 @@
+import React from 'react'
+import { Modal, Row, Col, Button } from 'antd'
+import { WeaInput } from 'ecCom'
+import { inject, observer } from 'mobx-react';
+
+@inject('ledgerStore')
+@observer
+export default class ValidRuleEditModal extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ name: "",
+ formulaId: "",
+ description: ""
+ }
+ }
+
+ handleSave() {
+ const { ledgerStore: {saveLedgerRule}} = this.props;
+ saveLedgerRule({
+ name: this.state.name,
+ formulaId: this.state.formulaId,
+ description: this.state.description
+ })
+ this.props.onCancel();
+ }
+
+ render() {
+ return (
+ {this.props.onCancel()}}
+ width={800} title="添加校验规则"
+ footer={
+
+
+ 薪资核算时,不符合校验规则将反馈为异常
+
+
+
+ }
+ >
+
+
+ 规则名称
+
+ {this.setState({name: value})}}/>
+
+
+
+ 校验规则
+
+ {this.setState({formulaId: value})}}/>
+
+
+
+ 备注
+
+ {this.setState({description: value})}}/>
+
+
+
+
+ )
+ }
+}
\ No newline at end of file
diff --git a/pc4mobx/hrmSalary/pages/ledger/validRulesForm.js b/pc4mobx/hrmSalary/pages/ledger/validRulesForm.js
index 034a1a57..aec1f23a 100644
--- a/pc4mobx/hrmSalary/pages/ledger/validRulesForm.js
+++ b/pc4mobx/hrmSalary/pages/ledger/validRulesForm.js
@@ -1,22 +1,115 @@
import React from 'react'
import { WeaInputSearch } from 'ecCom'
-import { Table, Icon } from 'antd'
+import { Table, Icon, message, Modal } from 'antd'
import { dataSource, slideStep5Columns} from './columns'
+import ValidRuleEditModal from './step5/ValidRuleEditModal'
+import { inject, observer } from 'mobx-react';
+@inject('ledgerStore')
+@observer
export default class ValidRulesForm extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ modalVisible: false,
+ selectedRowKeys: [],
+ searchValue: ""
+ }
+ }
+
+ componentWillMount() {
+ const { ledgerStore: {getLedgerRuleList} } = this.props;
+ getLedgerRuleList()
+ }
+
+ handleItemDelete(record) {
+ const { ledgerStore: {deleteLedgerRule}} = this.props;
+ deleteLedgerRule([record.id])
+ }
+
+ onSelectChange(selectedRowKeys) {
+ this.setState({ selectedRowKeys });
+ };
+
+ handleBatchDelete() {
+ const { ledgerStore: { deleteLedgerRule } } = this.props;
+ const { selectedRowKeys } = this.state;
+ if(selectedRowKeys.length == 0) {
+ message.warning("未选择条目")
+ return
+ }
+ Modal.confirm({
+ title: '信息确认',
+ content: '确认删除',
+ onOk:() => {
+ deleteLedgerRule(selectedRowKeys)
+ },
+ onCancel: () => {
+
+ },
+ });
+ }
+
+ handeSearch() {
+ const { ledgerStore: { getLedgerRuleList } } = this.props;
+ const { searchValue } = this.state;
+ getLedgerRuleList(searchValue)
+ }
+
render() {
+ const { ledgerStore } = this.props;
+ const { ledgerRuleList } = ledgerStore
+ const { selectedRowKeys } = this.state;
+ let columns = ledgerRuleList.columns ? ledgerRuleList.columns.filter(item => item.dataIndex != "id") : []
+
+ if(columns.length > 0) {
+ columns.push({
+ title: "操作",
+ key: 'cz',
+ render: (text, record) => (
+ {this.handleItemDelete(record)}}>删除
+ )
+ })
+ }
+
+
+ let dataSource = ledgerRuleList.list ? ledgerRuleList.list : []
+ dataSource.map(item => item.key = item.id)
+
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: this.onSelectChange.bind(this),
+ };
return (
-
+ {this.setState({searchValue: value})}}
+ onSearch={(value) => {this.handeSearch(value)}}/>
-
-
+ {
+ dataSource.length > 0 && {this.handleBatchDelete()}}/>
+ }
+ {this.setState({
+ modalVisible: true
+ })}}/>
-
+ {
+ ledgerRuleList.list &&
+ }
+
+ {
+ this.state.modalVisible &&
+
{this.setState({modalVisible: false})}}
+ />
+ }
)
diff --git a/pc4mobx/hrmSalary/stores/ledger.js b/pc4mobx/hrmSalary/stores/ledger.js
index dd52f595..366d550f 100644
--- a/pc4mobx/hrmSalary/stores/ledger.js
+++ b/pc4mobx/hrmSalary/stores/ledger.js
@@ -3,6 +3,7 @@ import { message } from 'antd';
import { WeaForm, WeaTableNew } from 'comsMobx';
import * as API from '../apis/ledger'; // 引入API接口文件
+import { tempateColumns } from '../pages/payroll/columns';
const { TableStore } = WeaTableNew;
@@ -30,6 +31,43 @@ export class LedgerStore {
@observable excludeIds = []
@observable addCategoryVisible = false; // 薪资项目-添加分类Modal
+ @observable ruleOptionList = []; // 第四步规则可选项目列表
+ @observable sobItemRuleDataSource = []; // 第四步规则列表
+ @observable ledgerRuleList = [];
+ @observable baseInfoRequest = {};
+ @observable userSelectedList = [];
+
+ @action
+ initSlideData = () => {
+ this.salarySobId = "";
+ this.includeType = 1
+ this.userTableStore = {}
+ this.addUserModalVisible = false
+ this.itemGroups = [
+ {
+ id:"default",
+ name: "未分类",
+ items: []
+ }
+ ];
+ this.empBrowserList = []
+ this.empFields = []
+ this.excludeIds = []
+ this.ruleOptionList = []
+ this.sobItemRuleDataSource = []; // 第四步规则列表
+ this.ledgerRuleList = [];
+ this.baseInfoRequest = {};
+ this.userSelectedList = [];
+ }
+
+ @action
+ setUserSelectedList = userSelectedList => this.userSelectedList = userSelectedList
+
+ @action
+ setBaseInfoRequest = baseInfoRequest => this.baseInfoRequest = baseInfoRequest
+
+ @action
+ setSobItemRuleDataSource = sobItemRuleDataSource => this.sobItemRuleDataSource = sobItemRuleDataSource
@action
setAddCategoryVisible = addCategoryVisible => this.addCategoryVisible = addCategoryVisible
@@ -124,6 +162,18 @@ export class LedgerStore {
doInit = () => {
// this.getCondition();
this.getTableDatas({});
+
+ this.setBaseInfoRequest({
+ name: "",
+ taxableItems: "1",
+ salaryCycleType: "1",
+ salaryCycleFromDay: "1",
+ taxCycleType: "1",
+ attendCycleType: "1",
+ attendCycleFromDay: "1",
+ socialSecurityCycleType: "1",
+ description: ""
+ })
}
// 获得高级搜索表单数据
@@ -191,13 +241,20 @@ export class LedgerStore {
//保存薪资帐套基本信息
@action
saveLedgerBasic = (params) => {
- API.saveLedgerBasic(params).then(res => {
- if(res.status) {
- message.success("保存成功")
- } else {
- message.error(res.errormsg || "保存失败")
- }
+ return new Promise((resolve, reject) => {
+ API.saveLedgerBasic(params).then(res => {
+ if(res.status) {
+ this.salarySobId = res.data;
+ resolve()
+ this.getTableDatas({})
+ message.success("保存成功")
+ } else {
+ reject(res.errormsg || "保存失败")
+ message.error(res.errormsg || "保存失败")
+ }
+ })
})
+
}
//删除薪资帐套
@@ -318,15 +375,166 @@ export class LedgerStore {
itemGroups: itemGroups.filter(item => item.id != "default"),
items: itemGroups.filter(item => item.id == 'default')[0].items
}
- API.saveLedgerItem(params).then(res => {
+ return new Promise((resolve, reject) => {
+ API.saveLedgerItem(params).then(res => {
+ if(res.status) {
+ resolve()
+ message.success("保存成功");
+ } else {
+ reject()
+ message.error(res.errormsg || "保存失败")
+ }
+ })
+ })
+
+ }
+
+ // 调薪计薪规则可选的薪资项目列表
+ @action
+ listSalarySobItem = () => {
+ let params = {
+ salarySobId: this.salarySobId,
+ excludeSalaryItemIds: this.sobItemRuleDataSource.map(item => item.salaryItemId)
+ }
+ API.listSalarySobItem(params).then(res => {
if(res.status) {
- message.success("保存成功");
+ this.ruleOptionList = res.data.map(item => {
+ return {
+ key: item.salaryItemId.toString(),
+ showname: item.salaryItemName,
+ selected: false
+ }
+ })
+ }
+ })
+
+ }
+
+ // 调薪计薪规则保存
+ @action
+ saveAdjustmentRule = () => {
+ let params = {
+ salarySobId:this.salarySobId,
+ ruleParams:this.sobItemRuleDataSource
+ }
+ return new Promise((resolve, reject) => {
+ API.saveAdjustmentRule(params).then(res => {
+ if(res.status) {
+ resolve()
+ message.success("保存成功")
+ } else {
+ reject()
+ message.error(res.errormsg || "获取失败")
+ }
+ })
+ })
+ }
+
+ @action
+ listAdjustmentRule = () => {
+ let params = {
+ salarySobId: this.salarySobId
+ }
+ API.listAdjustmentRule(params).then(res => {
+ if(res.status) {
+ this.sobItemRuleDataSource = res.data
+ }
+ })
+ }
+
+ // 保存薪资帐套校验规则
+ @action
+ saveLedgerRule = (params) => {
+ params.salarySobId = this.salarySobId;
+ API.saveLedgerRule(params).then(res => {
+ if(res.status) {
+ this.getLedgerRuleList()
+ message.success("保存成功")
} else {
message.error(res.errormsg || "保存失败")
}
})
}
+ //薪资帐套校验规则列表
+ @action
+ getLedgerRuleList = (name = "") => {
+ let params = {
+ salarySobId: this.salarySobId,
+ name
+ }
+ API.getLedgerRuleList(params).then(res => {
+ if(res.status) {
+ this.ledgerRuleList = res.data
+ } else {
+ message.error(res.errormsg || "获取数据失败")
+ }
+ })
+ }
+ //删除薪资帐套校验规则
+ @action
+ deleteLedgerRule = (ids) => {
+ API.deleteLedgerRule(ids).then(res => {
+ if(res.status) {
+ message.success("删除成功")
+ this.getLedgerRuleList();
+ } else {
+ message.error(res.errormsg || "删除失败")
+ }
+ })
+ }
+
+ // 获取基本信息
+ @action
+ getLedgerBasicForm = () => {
+ API.getLedgerBasicForm(this.salarySobId).then(res => {
+ if(res.status) {
+ let basicForm = res.data.basicForm
+ Object.keys(basicForm).map(key => {
+ basicForm[key] = basicForm[key].toString();
+ })
+ this.baseInfoRequest = basicForm
+ } else {
+ messsage.error(res.errormsg || "获取失败")
+ }
+ })
+ }
+
+ //薪资帐套薪资项目详情
+ @action
+ getLedgerItemForm = () => {
+ API.getLedgerItemForm({salarySobId: this.salarySobId}).then(res => {
+ if(res.status) {
+ this.empFields = res.data.empFields
+ this.itemGroups = res.data.itemGroups
+ let defaultItems = {
+ id:"default",
+ name: "未分类",
+ items:res.data.items
+ }
+ this.itemGroups.unshift(defaultItems)
+ API.empFieldList().then(ires => {
+ if(res.status) {
+ this.empBrowserList = ires.data.map(item => {return {showname: item.name, key: item.id, selected: false}})
+ this.userSelectedList = this.empFields.map(item => {
+ item = {...item}
+ item.key = item.fieldId
+ this.empBrowserList.map(bitem => {
+ if(bitem.key == item.fieldId) {
+ item.showname = bitem.showname
+ }
+ })
+ return item;
+ })
+ } else {
+ message.error(res.errormsg || "获取失败")
+ }
+ })
+ } else {
+ message.error(res.errormsg || "获取失败")
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/pc4mobx/hrmSalary/util/request.js b/pc4mobx/hrmSalary/util/request.js
index 2c6d6d3c..a1140138 100644
--- a/pc4mobx/hrmSalary/util/request.js
+++ b/pc4mobx/hrmSalary/util/request.js
@@ -1,4 +1,5 @@
export const formPost = (url, params) => {
+ url = url + "?__random__=" + (new Date()).valueOf();
let formdata = new URLSearchParams();
Object.keys(params).map(key => {
formdata.append(key, params[key])
@@ -10,4 +11,16 @@ export const formPost = (url, params) => {
},
body:formdata
}).then(res => res.json())
+}
+
+export const postFetch = (url, params) => {
+ url = url + "?__random__=" + (new Date()).valueOf();
+ return fetch(url, {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(params)
+ }).then(res => res.json())
}
\ No newline at end of file