From 06254eb2b213006bc18034cae2333dac51f75c49 Mon Sep 17 00:00:00 2001 From: MustangDeng <670124965@qq.com> Date: Thu, 7 Apr 2022 18:35:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=96=AA=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/archive.js | 26 ++- .../hrmSalary/pages/ledger/slideRefereUser.js | 2 +- .../pages/salaryFile/changeSalaryModal.js | 166 +++++++++++++---- .../pages/salaryFile/editAgentModal.js | 39 ++-- pc4mobx/hrmSalary/pages/salaryFile/index.js | 5 +- .../pages/salaryFile/salaryItemChangeList.js | 50 ++++- pc4mobx/hrmSalary/stores/salaryFile.js | 176 ++++++++++++++---- 7 files changed, 376 insertions(+), 88 deletions(-) diff --git a/pc4mobx/hrmSalary/apis/archive.js b/pc4mobx/hrmSalary/apis/archive.js index 0be88382..3fd8ea55 100644 --- a/pc4mobx/hrmSalary/apis/archive.js +++ b/pc4mobx/hrmSalary/apis/archive.js @@ -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); } \ No newline at end of file diff --git a/pc4mobx/hrmSalary/pages/ledger/slideRefereUser.js b/pc4mobx/hrmSalary/pages/ledger/slideRefereUser.js index 62930955..f327b13b 100644 --- a/pc4mobx/hrmSalary/pages/ledger/slideRefereUser.js +++ b/pc4mobx/hrmSalary/pages/ledger/slideRefereUser.js @@ -34,7 +34,7 @@ export default class SlideRefereUser extends React.Component { onSelectChange = selectedRowKeys => { this.setState({ selectedRowKeys }); - }; + } handleTabDelete = () => { diff --git a/pc4mobx/hrmSalary/pages/salaryFile/changeSalaryModal.js b/pc4mobx/hrmSalary/pages/salaryFile/changeSalaryModal.js index 13204d90..fd38d8fa 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/changeSalaryModal.js +++ b/pc4mobx/hrmSalary/pages/salaryFile/changeSalaryModal.js @@ -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 = {item.title} item.render = (text, record) => { return ( - { - this.handleSalaryItemChange(record, value) - }}/> + this.handleSalaryItemChange(record, value)}> + { + salaryItemList && salaryItemList.map(item => ( + {item.showname} + )) + } + ) } - }else if(item.dataIndex == "after"){ + }else if(item.dataIndex == "adjustAfter"){ + item.title = {item.title} item.render = (text, record) => { return ( - { + { 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 ( {this.props.onCancel()}} footer={ { this.handleSave() }}>保存} > - - + + - 生效日期 + 生效日期 - + - 调整原因 + 调整原因 - { + {/* { this.state.inited && {this.handleChange({ adjustReason: value })}} /> - } + } */} + + this.handleChange({adjustReason: value})}> + { + salaryItemChangeForm.adjustReasonList && salaryItemChangeForm.adjustReasonList.map(item => ( + {item.showname} + )) + } + - + 说明 @@ -160,14 +260,14 @@ export default class ChangeSalaryModal extends React.Component { 调薪明细 - {this.handleAddItemClick()}}/> - + {this.handleRemoveClick()}}/> + {this.handleAddItemClick()}}/> { - this.state.inited && + this.state.inited && } diff --git a/pc4mobx/hrmSalary/pages/salaryFile/editAgentModal.js b/pc4mobx/hrmSalary/pages/salaryFile/editAgentModal.js index 56e65b61..ea17b1f8 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/editAgentModal.js +++ b/pc4mobx/hrmSalary/pages/salaryFile/editAgentModal.js @@ -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 { { this.state.initSelected && - { - this.handleChange({adjustReason: value}) - }}/> + this.handleChange({adjustReason: value})}> + { + this.getAdjustReasonList().map(item => ( + {item.showname} + )) + } + } @@ -127,9 +136,15 @@ export default class EditAgentModal extends React.Component { 调整后 { - this.state.initSelected && { - this.handleChange({taxAgentId: value}) - }} /> + this.state.initSelected && + this.handleChange({taxAgentId: value})}> + { + this.getTaxAgentList().map(item => ( + {item.showname} + )) + } + + } diff --git a/pc4mobx/hrmSalary/pages/salaryFile/index.js b/pc4mobx/hrmSalary/pages/salaryFile/index.js index 348e9d93..2ef91ae2 100644 --- a/pc4mobx/hrmSalary/pages/salaryFile/index.js +++ b/pc4mobx/hrmSalary/pages/salaryFile/index.js @@ -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 ( { + 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 ( + {this.handleEdit(record)}}>编辑 + ) + } + }) + } + return columns +} + render() { const { salaryFileStore } = this.props; const { singleSalaryItemList } = salaryFileStore return ( - + + { + this.state.changeSalaryVisible && {this.setState({changeSalaryVisible: false})}} + /> + } ) } diff --git a/pc4mobx/hrmSalary/stores/salaryFile.js b/pc4mobx/hrmSalary/stores/salaryFile.js index 93760bf5..b42ff9f8 100644 --- a/pc4mobx/hrmSalary/stores/salaryFile.js +++ b/pc4mobx/hrmSalary/stores/salaryFile.js @@ -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() + } + }) + }) + + } } \ No newline at end of file