调薪操作

This commit is contained in:
MustangDeng 2022-04-07 18:35:09 +08:00
parent 59dd3a95c7
commit 06254eb2b2
7 changed files with 376 additions and 88 deletions

View File

@ -47,7 +47,14 @@ export const getSalaryItemForm = params => {
//薪资档案-保存薪资项目调整
export const saveSalaryItem = params => {
return WeaTools.callApi('/api/bs/hrmsalary/salaryArchive/saveSalaryItem', 'POST', params);
return fetch('/api/bs/hrmsalary/salaryArchive/saveSalaryItem', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
}).then(res => res.json())
}
//薪资档案-获取个税扣缴义务人调整表单
@ -217,4 +224,21 @@ export const singleTaxAgentList = (params) => {
// 调整-义务扣缴人-通过薪资档案的个税扣缴义务人id获取个税扣缴义务人调整表单
export const getTaxAgentFormBySalaryArchiveTaxAgentId = (params) => {
return WeaTools.callApi('/api/bs/hrmsalary/salaryArchive/getTaxAgentFormBySalaryArchiveTaxAgentId', 'GET', params);
}
// 调整-薪资项目-获取调整前的值
export const getSalaryItemAdjustBeforeValue = (params) => {
return fetch('/api/bs/hrmsalary/salaryArchive/getSalaryItemAdjustBeforeValue', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
}).then(res => res.json())
}
// 调整-薪资项目-通过薪资档案的薪资项目id获取薪资项目调整表单
export const getSalaryItemFormByItemId = (params) => {
return WeaTools.callApi('/api/bs/hrmsalary/salaryArchive/getSalaryItemFormBySalaryArchiveItemId', 'GET', params);
}

View File

@ -34,7 +34,7 @@ export default class SlideRefereUser extends React.Component {
onSelectChange = selectedRowKeys => {
this.setState({ selectedRowKeys });
};
}
handleTabDelete = () => {

View File

@ -1,7 +1,9 @@
import React from 'react'
import { Row, Col, Table, Modal, Icon } from 'antd'
import { Row, Col, Table, Modal, Icon, Button, Select, message } from 'antd'
const { Option } = Select
import { WeaInput, WeaSelect, WeaDatePicker } from "ecCom"
import { changeSalaryModalColumns, dataSource } from './columns'
import RequiredLabelTip from '../../components/requiredLabelTip'
import "./index.less"
import { inject, observer } from 'mobx-react';
import moment from 'moment'
@ -13,12 +15,13 @@ export default class ChangeSalaryModal extends React.Component {
super(props)
this.state = {
inited: false,
selectedRowKeys: [],
salaryArchiveItems: [
{
key: "1",
salaryItem: "",
before: "",
after: ""
salaryBefore: "",
adjustAfter: ""
}
],
request: {
@ -40,11 +43,31 @@ export default class ChangeSalaryModal extends React.Component {
// 表格中薪资项目选择项下拉,改变事件
handleSalaryItemChange(item, value) {
const {salaryFileStore: {getSalaryItemAdjustBeforeValue}} = this.props;
const { salaryArchiveItems} = this.state;
// alert("item.id : "+ item.id)
// alert(JSON.stringify({salaryArchiveId: this.props.currentId, salaryItemId: item.id}))
getSalaryItemAdjustBeforeValue({salaryArchiveId: this.props.currentId, salaryItemId: value}).then((data) => {
let dataSource = [ ...salaryArchiveItems ]
dataSource.map(i => {
if(i.key == item.key) {
i.salaryItem = value;
i.salaryBefore = data
}
})
this.setState({
salaryArchiveItems: dataSource
})
})
}
// 调整后表格字段变化回调
handleSalaryAfterItemChange(item, value) {
const { salaryArchiveItems } = this.state;
let dataSource = [ ...salaryArchiveItems ]
dataSource.map(i => {
if(i.key == item.key) {
i.salaryItem = value;
i.adjustAfter = value;
}
})
this.setState({
@ -52,12 +75,6 @@ export default class ChangeSalaryModal extends React.Component {
})
}
// 调整后表格字段变化回调
handleSalaryAfterItemChange(record, value) {
const { } = this.state;
}
// 解析Columns
getColumns() {
const {salaryFileStore: {salaryItemChangeForm} } = this.props;
@ -66,17 +83,23 @@ export default class ChangeSalaryModal extends React.Component {
return columns.map(item => {
item = {...item}
if(item.dataIndex == "salaryItem") {
item.title = <span>{item.title}<RequiredLabelTip /></span>
item.render = (text, record) => {
return (
<WeaSelect options={salaryItemList} style={{width: "150px"}} value={text} onChange={(value) => {
this.handleSalaryItemChange(record, value)
}}/>
<Select defaultValue={text} style={{ width: 150 }} onChange={(value) => this.handleSalaryItemChange(record, value)}>
{
salaryItemList && salaryItemList.map(item => (
<Option value={item.key}>{item.showname}</Option>
))
}
</Select>
)
}
}else if(item.dataIndex == "after"){
}else if(item.dataIndex == "adjustAfter"){
item.title = <span>{item.title}<RequiredLabelTip /></span>
item.render = (text, record) => {
return (
<WeaInput type="number" style={{width: '150px'}} value={text} onChange={(value) => {
<WeaInput type={"number"} style={{width: '150px'}} value={text} onChange={(value) => {
this.handleSalaryAfterItemChange(record, value)
}}/>
)
@ -86,36 +109,105 @@ export default class ChangeSalaryModal extends React.Component {
})
}
// 添加按钮点击回调
handleAddItemClick() {
const { } = this.props;
const { salaryArchiveItems } = this.state;
let result = [...salaryArchiveItems]
let lastKey = "1";
if(result.length > 0) {
lastKey = parseInt(result[result.length - 1].key) + 1
}
result.push({
key: lastKey + "",
salaryItem: "",
adjustBefore: "",
adjustAfter: ""
})
this.setState({
salaryArchiveItems: result
})
}
componentWillMount() {
const { salaryFileStore: {getSalaryItemForm}, currentId} = this.props;
getSalaryItemForm(currentId).then(() => {this.setState({
inited: true
})})
const { salaryFileStore: {salaryItemChangeForm, getSalaryItemForm, getSalaryItemFormByItemId}, currentId, recordId} = this.props;
if(recordId) {
getSalaryItemFormByItemId(recordId).then(data => {
let request = {...this.state.request}
request.effectiveTime = data.effectiveTime
request.adjustReason = data.adjustReason
request.description = data.description
this.setState({
salaryArchiveItems: data.dataSource,
inited: true,
request
})
})
} else {
getSalaryItemForm(currentId).then(() => {this.setState({
inited: true
})})
}
}
// 保存
handleSave() {
const { salaryFileStore: {saveSalaryItem, fetchSingleSalaryItemList}} = this.props;
let saveRequest = {...this.state.request}
const { salaryArchiveItems } = this.state;
if(salaryArchiveItems.length == 0) {
message.warning("请添加调薪明细")
return
}
saveRequest.salaryArchiveItems = salaryArchiveItems.map(item => {
let result = {}
result.salaryItemId = item.salaryItem
result.adjustValue = item.adjustAfter
return result
})
saveSalaryItem(saveRequest).then(() => {
fetchSingleSalaryItemList({salaryArchiveId: this.props.currentId})
this.props.onCancel()
})
}
onSelectChange = selectedRowKeys => {
this.setState({ selectedRowKeys });
}
// 批量删除回调
handleRemoveClick = () => {
const { selectedRowKeys, salaryArchiveItems } = this.state;
let result = [...salaryArchiveItems]
if(selectedRowKeys.length == 0) {
message.warning("未选择条目")
}
this.setState({
salaryArchiveItems: result.filter(item => selectedRowKeys.indexOf(item.key) < 0)
})
}
render() {
const { salaryFileStore: {salaryItemChangeForm} } = this.props;
const { request, salaryArchiveItems } = this.state;
const { request, salaryArchiveItems, selectedRowKeys } = this.state;
const { effectiveTime, adjustReason, description } = request
const rowSelection = {
selectedRowKeys,
onChange: this.onSelectChange,
};
return (
<Modal title="调薪" width={800} visible={this.props.visible} onClose={() => {this.props.onCancel()}}
footer={<Button type="primary" onClick={() => {
this.handleSave()
}}>保存</Button>}
>
<div className="changeSalaryModal">
<Row className="itemWrapper">
<div className="changeSalaryModal" style={{padding: "10px 20px"}}>
<Row className="itemWrapper" style={{lineHeight: '47px'}}>
<Col span={6}>
生效日期
生效日期<RequiredLabelTip />
</Col>
<Col span={18}>
<WeaDatePicker
@ -126,22 +218,30 @@ export default class ChangeSalaryModal extends React.Component {
/>
</Col>
</Row>
<Row className="itemWrapper">
<Row className="itemWrapper" style={{lineHeight: "47px"}}>
<Col span={6}>
调整原因
调整原因<RequiredLabelTip />
</Col>
<Col span={18}>
{
{/* {
this.state.inited && <WeaSelect
options={salaryItemChangeForm.adjustReasonList}
style={{width: "200px"}}
value={adjustReason}
onChange={(value) => {this.handleChange({ adjustReason: value })}}
/>
}
} */}
<Select defaultValue={adjustReason} value={adjustReason} style={{ width: 200 }} onChange={(value) => this.handleChange({adjustReason: value})}>
{
salaryItemChangeForm.adjustReasonList && salaryItemChangeForm.adjustReasonList.map(item => (
<Option value={item.key}>{item.showname}</Option>
))
}
</Select>
</Col>
</Row>
<Row className="itemWrapper">
<Row className="itemWrapper" style={{lineHeight: '47px'}}>
<Col span={6}>
说明
</Col>
@ -160,14 +260,14 @@ export default class ChangeSalaryModal extends React.Component {
<div className="contentTitleWrapper" style={{height: "40px",lineHeight: "40px"}}>
<span className="contentTitle" style={{fontSize: "14px", color: "#666"}}>调薪明细</span>
<div className="rightIconWrapper" style={{display: "inline-block", float: "right"}}>
<Icon type="minus-square" style={{color: "#2db7f5", cursor: "pointer", marginRight: "15px"}} onClick={() => {this.handleAddItemClick()}}/>
<Icon type="plus-square" style={{color: "#2db7f5", cursor: "pointer"}}/>
<Icon type="minus-square" style={{color: "#2db7f5", cursor: "pointer", marginRight: "15px"}} onClick={() => {this.handleRemoveClick()}}/>
<Icon type="plus-square" style={{color: "#2db7f5", cursor: "pointer"}} onClick={() => {this.handleAddItemClick()}}/>
</div>
</div>
<div className="tableWrapper">
{
this.state.inited && <Table dataSource={salaryArchiveItems} columns={this.getColumns()}/>
this.state.inited && <Table rowSelection={rowSelection} dataSource={salaryArchiveItems} columns={this.getColumns()}/>
}
</div>
</div>

View File

@ -1,10 +1,12 @@
import React from 'react'
import { Modal, Row, Col, Button } from "antd"
import { Modal, Row, Col, Button, Select } from "antd"
const { Option } = Select
import { WeaDatePicker, WeaSelect } from "ecCom"
import { inject, observer } from 'mobx-react';
import moment from 'moment'
import RequiredLabelTip from '../../components/requiredLabelTip';
@inject("salaryFileStore")
@observer
export default class EditAgentModal extends React.Component {
@ -47,8 +49,9 @@ export default class EditAgentModal extends React.Component {
}
handleSave() {
const { salaryFileStore: {saveTaxAgent}} = this.props;
const { salaryFileStore: {saveTaxAgent, fetchSingleTaxAgentList}} = this.props;
saveTaxAgent(this.state.request).then(() => {
fetchSingleTaxAgentList({salaryArchiveId: this.props.currentId})
this.props.onCancel()
})
}
@ -63,12 +66,14 @@ export default class EditAgentModal extends React.Component {
componentWillMount() {
const { salaryFileStore: {salaryArchiveTaxAgentForm, getTaxAgentForm, fetchSingleTaxAgentList, getTaxAgentFormByTaxAgentId}} = this.props;
let request = {...this.state.request}
if(this.props.recordId) { // 点击条目进入
getTaxAgentFormByTaxAgentId(this.props.recordId).then(() => {
getTaxAgentFormByTaxAgentId(this.props.recordId).then((data) => {
request.taxAgentId = data.adjustAfter != undefined ? data.adjustAfter + "": ""
// request.taxAgentId = "13"
request.adjustReason = data.adjustReason != undefined ? data.adjustReason : ""
this.setState({
// taxAgentId: "25",
taxAgentId: salaryArchiveTaxAgentForm.ad1justAfter != undefined ? salaryArchiveTaxAgentForm.adjustAfter + "": "",
adjustReason:salaryArchiveTaxAgentForm.adjustReason != undefined ? salaryArchiveTaxAgentForm.adjustReason : ""
request
}, () => {
this.setState({
initSelected: true
@ -111,9 +116,13 @@ export default class EditAgentModal extends React.Component {
<Col span={16}>
{
this.state.initSelected &&
<WeaSelect style={{width:"200px"}} options={this.getAdjustReasonList()} value={adjustReason} onChange={(value) => {
this.handleChange({adjustReason: value})
}}/>
<Select defaultValue={adjustReason} value={adjustReason} style={{ width: 200 }} onChange={(value) => this.handleChange({adjustReason: value})}>
{
this.getAdjustReasonList().map(item => (
<Option value={item.key}>{item.showname}</Option>
))
}
</Select>
}
</Col>
</Row>
@ -127,9 +136,15 @@ export default class EditAgentModal extends React.Component {
<Col span={8}>调整后<RequiredLabelTip /></Col>
<Col span={16}>
{
this.state.initSelected && <WeaSelect style={{width: '200px'}} options={this.getTaxAgentList()} value={taxAgentId} onChange={(value) => {
this.handleChange({taxAgentId: value})
}} />
this.state.initSelected &&
<Select defaultValue={taxAgentId} value={taxAgentId} style={{ width: 200 }} onChange={(value) => this.handleChange({taxAgentId: value})}>
{
this.getTaxAgentList().map(item => (
<Option value={item.key}>{item.showname}</Option>
))
}
</Select>
}
</Col>
</Row>

View File

@ -116,7 +116,8 @@ export default class SalaryFile extends React.Component {
// 显示调整个税扣缴义务人表单
handSildeOptionMenuClick(e) {
this.setState({editAgentVisible: true})
const { salaryFileStore: {setEditAgentVisible}} = this.props;
setEditAgentVisible(true)
}
// 查看 Slide 头部操作按钮
@ -135,7 +136,6 @@ export default class SalaryFile extends React.Component {
this.setState({ selectedRowKeys });
};
render() {
const { salaryFileStore } = this.props;
const { loading, hasRight, form, condition, tableStore, showSearchAd, getTableDatas, doSearch, setShowSearchAd } = salaryFileStore;
@ -251,7 +251,6 @@ export default class SalaryFile extends React.Component {
onChange: this.onSelectChange,
};
return (
<div className="mySalaryBenefitsWrapper">
<WeaRightMenu

View File

@ -1,25 +1,71 @@
import React from 'react';
import { Table } from 'antd'
import { inject, observer } from 'mobx-react';
import ChangeSalaryModal from './changeSalaryModal'
@inject('salaryFileStore')
@observer
export default class SalaryItemChangeList extends React.Component {
constructor(props) {
super(props)
this.state = {
changeSalaryVisible: false,
recordId: ""
}
}
componentWillMount() {
const { salaryFileStore: { fetchSingleSalaryItemList }} = this.props;
const { salaryFileStore: { fetchSingleSalaryItemList }, id} = this.props;
fetchSingleSalaryItemList({salaryArchiveId: this.props.id})
}
handleEdit(record) {
this.setState({
recordId: record.id
}, () => {
this.setState({
changeSalaryVisible: true
})
})
}
// 获取Columns
getColumns() {
const { salaryFileStore: {singleSalaryItemList} } = this.props;
let columns = []
if(singleSalaryItemList.columns) {
columns = [...singleSalaryItemList.columns]
}
if(columns.length > 0) {
columns.push({
title: '操作',
key: "cz",
dataIndex: "cz",
render: (text, record) => {
return (
<a onClick={() => {this.handleEdit(record)}}>编辑</a>
)
}
})
}
return columns
}
render() {
const { salaryFileStore } = this.props;
const { singleSalaryItemList } = salaryFileStore
return (
<div>
<Table dataSource={singleSalaryItemList.list ? singleSalaryItemList.list: []} columns={singleSalaryItemList.columns ? singleSalaryItemList.columns: []} />
<Table dataSource={singleSalaryItemList.list ? singleSalaryItemList.list: []} columns={this.getColumns()} />
{
this.state.changeSalaryVisible && <ChangeSalaryModal
currentId={this.props.id}
recordId={this.state.recordId}
visible={this.state.changeSalaryVisible}
onCancel={() => {this.setState({changeSalaryVisible: false})}}
/>
}
</div>
)
}

View File

@ -210,46 +210,65 @@ export class salaryFileStore {
})
}
convertForm = (resData) => {
let salaryItemChangeForm = {}
salaryItemChangeForm.adjustReasonList = resData.salaryArchiveItemForm.adjustReasonList.map(item => {
item = {...item}
item.key = item.id;
item.showname = item.content
item.selected = false
return item
})
salaryItemChangeForm.salaryItemList = resData.salaryArchiveItemDetail.salaryItemList.map(item => {
item = {...item}
item.key = item.id;
item.showname = item.content
item.selected = false
return item
})
salaryItemChangeForm.columns = resData.salaryArchiveItemDetail.columns.map(item => {
let result = {}
result.title = item
if(item == "薪资项目") {
result.dataIndex = "salaryItem"
result.key = "salaryItem"
}
if(item == "调整前") {
result.dataIndex = "salaryBefore"
result.key = "salaryBefore"
}
if(item == "调整后") {
result.dataIndex = "adjustAfter"
result.key = "adjustAfter"
}
return result
})
salaryItemChangeForm.dataSource = resData.salaryArchiveItemDetail.list.map((item, index) => {
item = {...item}
item.key = (index + 1).toString()
return item
})
let effectiveTime = resData.salaryArchiveItemForm.effectiveTime
if(effectiveTime) {
salaryItemChangeForm.effectiveTime = moment(new Date(effectiveTime)).format("YYYY-MM-DD")
}
salaryItemChangeForm.description = resData.salaryArchiveItemForm.description
salaryItemChangeForm.adjustReason = resData.salaryArchiveItemForm.adjustReason
return salaryItemChangeForm
}
// 薪资档案-获取薪资项目调整表单
@action
getSalaryItemForm = (id) => {
return new Promise((resolve, reject) => {
API.getSalaryItemForm({salaryArchiveItemId: id}).then(res => {
if(res.status) {
this.salaryItemChangeForm = {}
this.salaryItemChangeForm.adjustReasonList = res.data.salaryArchiveItemForm.adjustReasonList.map(item => {
item = {...item}
item.key = item.id;
item.showname = item.content
item.selected = false
return item
})
this.salaryItemChangeForm.salaryItemList = res.data.salaryArchiveItemDetail.salaryItemList.map(item => {
item = {...item}
item.key = item.id;
item.showname = item.content
item.selected = false
return item
})
this.salaryItemChangeForm.columns = res.data.salaryArchiveItemDetail.columns.map(item => {
let result = {}
result.title = item
if(item == "薪资项目") {
result.dataIndex = "salaryItem"
result.key = "salaryItem"
}
if(item == "调整前") {
result.dataIndex = "before"
result.key = "before"
}
if(item == "调整后") {
result.dataIndex = "after"
result.key = "after"
}
return result
})
this.salaryItemChangeForm = this.convertForm(res.data)
resolve()
} else {
message.error(res.errormsg || "获取失败")
@ -301,7 +320,6 @@ export class salaryFileStore {
API.singleTaxAgentList(params).then(res => {
if(res.status) {
this.singleTaxAgentList = res.data
} else {
message.error(res.errormsg || "获取失败")
}
@ -325,7 +343,7 @@ export class salaryFileStore {
let form = res.data.salaryArchiveTaxAgentForm
form.effectiveTime = moment(new Date(form.effectiveTime)).format("YYYY-MM-DD")
this.salaryArchiveTaxAgentForm = form
resolve()
resolve(form)
} else {
message.error(res.errormsg || "获取失败")
reject()
@ -335,4 +353,90 @@ export class salaryFileStore {
}
validateSaveSalaryForm = (params) => {
if(!notNull(params.salaryArchiveId)) {
message.error("档案id不能为空")
return false
}
if(!notNull(params.effectiveTime)) {
message.error("生效日期不能为空")
return false
}
if(!notNull(params.adjustReason)) {
message.error("调整原因不能为空")
return false
}
if(!params.salaryArchiveItems || params.salaryArchiveItems.length == 0 ) {
message.error("调整明细不能为空")
return false
}
for(let i = 0; i < params.salaryArchiveItems.length; i++) {
if(!notNull(params.salaryArchiveItems[i].salaryItemId)) {
message.error("薪资项目不能为空")
return false;
}
if(!notNull(params.salaryArchiveItems[i].adjustValue)) {
message.error("调整后不能为空")
return false;
}
}
return true;
}
// 保存调薪
@action
saveSalaryItem = (params) => {
if(!this.validateSaveSalaryForm(params)) {
return
}
return new Promise((resolve, reject) => {
API.saveSalaryItem(params).then(res => {
if(res.status) {
message.success("保存成功")
resolve()
} else {
message.error(res.errormsg || "保存失败")
reject()
}
})
})
}
// 调整=薪资项目调整-获取调整前的值
@action
getSalaryItemAdjustBeforeValue = (params) => {
return new Promise((resolve, reject) => {
API.getSalaryItemAdjustBeforeValue(params).then(res => {
if(res.status) {
resolve(res.data)
} else {
message.error(res.errormsg || "获取失败")
reject(res.errormsg)
}
})
})
}
// 调整-薪资项目-编辑获取表单
@action
getSalaryItemFormByItemId = (id) => {
return new Promise((resolve, reject) => {
API.getSalaryItemFormByItemId({salaryArchiveItemId: id}).then(res => {
if(res.status) {
this.salaryItemChangeForm = this.convertForm(res.data)
resolve(this.salaryItemChangeForm)
} else {
message.error(res.errormsg || "获取失败")
reject()
}
})
})
}
}