薪资账套页面重构
This commit is contained in:
parent
61b595404f
commit
a193ed6690
|
|
@ -268,3 +268,17 @@ export const listAdjustmentRule = params => {
|
|||
body: JSON.stringify(params)
|
||||
}).then(res => res.json());
|
||||
};
|
||||
|
||||
//获取回算薪资项目
|
||||
export const getAggregate = params => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/salarysob/backitem/getAggregate", "GET", params);
|
||||
};
|
||||
|
||||
//编辑回算薪资项目详情
|
||||
export const getBackitemForm = params => {
|
||||
return WeaTools.callApi("/api/bs/hrmsalary/salarysob/backitem/getForm", "GET", params);
|
||||
};
|
||||
//保存回算薪资项目详情
|
||||
export const salarysobBackitemSave = params => {
|
||||
return postFetch("/api/bs/hrmsalary/salarysob/backitem/save", params);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 回算薪资项目表格数据
|
||||
* Description:
|
||||
* Date: 2022/12/13
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaTable } from "ecCom";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import LedgerBackCalcEditSlide from "./ledgerBackCalcEditSlide";
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
class LedgerBackCalculatedSalaryItemTable extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
backCalcEditSlide: {
|
||||
visible: false,
|
||||
title: "编辑薪资项目",
|
||||
id: "",
|
||||
salaryItemId: ""
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
handleEditBackCalc = (record) => {
|
||||
const { id, salaryItemId } = record;
|
||||
const { backCalcEditSlide } = this.state;
|
||||
this.setState({
|
||||
backCalcEditSlide: {
|
||||
...backCalcEditSlide,
|
||||
visible: true,
|
||||
id,
|
||||
salaryItemId
|
||||
}
|
||||
});
|
||||
};
|
||||
handleClose = (isRefresh = false) => {
|
||||
const { backCalcEditSlide } = this.state;
|
||||
const { onRefresh } = this.props;
|
||||
this.setState({
|
||||
backCalcEditSlide: {
|
||||
...backCalcEditSlide,
|
||||
visible: false,
|
||||
id: "",
|
||||
salaryItemId: ""
|
||||
}
|
||||
}, () => {
|
||||
isRefresh && onRefresh();
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { backCalcEditSlide } = this.state;
|
||||
const { taxAgentStore: { showOperateBtn }, dataSource, editId } = this.props;
|
||||
const columns = [
|
||||
{
|
||||
dataIndex: "name",
|
||||
title: "薪资项目",
|
||||
render: (text) => {
|
||||
return <span className="tdEllipsis" title={text}>{text}</span>;
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex: "formulaContent",
|
||||
title: "核算公式",
|
||||
render: (text, record) => {
|
||||
return <span className="tdEllipsis" title={text}>{text}</span>;
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex: "",
|
||||
title: "操作",
|
||||
width: 80,
|
||||
render: (text, record, index) => {
|
||||
const { canEdit } = record;
|
||||
return (showOperateBtn && canEdit) ?
|
||||
<a href="javascript: void(0);" onClick={() => this.handleEditBackCalc(record)}>编辑</a> : <span></span>;
|
||||
}
|
||||
}
|
||||
];
|
||||
return (
|
||||
<div>
|
||||
<WeaTable
|
||||
rowKey="id"
|
||||
dataSource={dataSource}
|
||||
columns={columns}
|
||||
pagination={false}
|
||||
/>
|
||||
<LedgerBackCalcEditSlide
|
||||
{...backCalcEditSlide}
|
||||
editId={editId}
|
||||
showOperateBtn={showOperateBtn}
|
||||
onCancle={this.handleClose}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default LedgerBackCalculatedSalaryItemTable;
|
||||
|
|
@ -88,10 +88,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
.adjustRuleDetailWrapper{
|
||||
.adjustRuleDetailWrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.adjustSalaryFlex{
|
||||
|
||||
.adjustSalaryFlex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
|
|
@ -112,3 +113,38 @@
|
|||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 回算薪资项目
|
||||
.ledgerBackCalculatedSalaryItemWrapper {
|
||||
.titleWrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
& > span {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//回算薪资项目编辑弹框
|
||||
.backCalcSlideWrapper {
|
||||
.backCalcSlideCol {
|
||||
border: 1px solid #ebedf0;
|
||||
border-bottom: none;
|
||||
margin: 10px;
|
||||
|
||||
.wea-form-item {
|
||||
padding: 4px 10px;
|
||||
border-bottom: 1px solid #ebedf0;
|
||||
}
|
||||
}
|
||||
|
||||
.textareaBox {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
& > .wea-textarea-normal {
|
||||
z-index: -11;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaDialog, WeaFormItem, WeaHelpfulTip, WeaSearchGroup, WeaSelect } from "ecCom";
|
||||
import { Button, Radio } from "antd";
|
||||
import { Button, Modal, Radio } from "antd";
|
||||
import { monthDays } from "../config";
|
||||
import { listSalarySobItem } from "../../../apis/ledger";
|
||||
import "./index.less";
|
||||
|
|
@ -15,7 +15,7 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
beforeAdjustmentType: 4,
|
||||
beforeAdjustmentType: 2,
|
||||
afterAdjustmentType: 1,
|
||||
salaryItemId: "",
|
||||
salaryItemName: "",
|
||||
|
|
@ -25,11 +25,10 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.salarySobId) this.listSalarySobItem();
|
||||
if (nextProps.visible !== this.props.visible && nextProps.salarySobId) this.listSalarySobItem(nextProps.salarySobId);
|
||||
}
|
||||
|
||||
listSalarySobItem = () => {
|
||||
const { salarySobId } = this.props;
|
||||
listSalarySobItem = (salarySobId) => {
|
||||
const payload = {
|
||||
excludeSalaryItemIds: [],
|
||||
salarySobId
|
||||
|
|
@ -37,11 +36,42 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
listSalarySobItem(payload).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
salaryItemOptions: _.map(data, it => ({ key: it.id, showname: it.content }))
|
||||
salaryItemOptions: _.map(data, it => ({ key: it.salaryItemId.toString(), showname: it.salaryItemName }))
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleSave = () => {
|
||||
const { salaryRuleItemsList, onSave } = this.props;
|
||||
const { salaryItemOptions, ...extraItems } = this.state;
|
||||
if (_.isEmpty(extraItems.salaryItemId)) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: "必要信息不完整,红色*为必填项!"
|
||||
});
|
||||
return;
|
||||
}
|
||||
const items = {
|
||||
...extraItems,
|
||||
salaryItemName: this.state.salaryItemName,
|
||||
};
|
||||
this.handleReset();
|
||||
onSave([...salaryRuleItemsList, items]);
|
||||
};
|
||||
handleReset = () => {
|
||||
this.setState({
|
||||
beforeAdjustmentType: 2,
|
||||
afterAdjustmentType: 1,
|
||||
salaryItemId: "",
|
||||
salaryItemName: "",
|
||||
dayOfMonth: "1",
|
||||
salaryItemOptions: []
|
||||
}, () => {
|
||||
const { onCancel } = this.props;
|
||||
onCancel();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const {
|
||||
|
|
@ -51,34 +81,37 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
beforeAdjustmentType,
|
||||
afterAdjustmentType
|
||||
} = this.state;
|
||||
const { onCancel, title, visible } = this.props;
|
||||
const buttons = [<Button type="primary">保存</Button>];
|
||||
const { title, visible } = this.props;
|
||||
const buttons = [<Button type="primary" onClick={this.handleSave}>保存</Button>];
|
||||
return (
|
||||
<WeaDialog
|
||||
initLoadCss
|
||||
className="adjustRuleModalWrapper"
|
||||
title={title}
|
||||
visible={visible}
|
||||
style={{ width: 780 }}
|
||||
style={{ width: 750 }}
|
||||
buttons={buttons}
|
||||
onCancel={onCancel}
|
||||
onCancel={this.handleReset}
|
||||
>
|
||||
<WeaSearchGroup col={1} needTigger title="" showGroup>
|
||||
<WeaFormItem label="薪资项目" labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
|
||||
<WeaSearchGroup col={1} needTigger title="" showGroup center>
|
||||
<WeaFormItem label="薪资项目" labelCol={{ span: 4 }} wrapperCol={{ span: 20 }}
|
||||
style={{ tableLayout: "fixed" }}>
|
||||
<WeaSelect
|
||||
multiple
|
||||
viewAttr={3}
|
||||
value={salaryItemId}
|
||||
style={{ width: "100%" }}
|
||||
options={salaryItemOptions}
|
||||
value={salaryItemId}
|
||||
onChange={(salaryItemId, salaryItemName) => this.setState({ salaryItemId, salaryItemName })}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label={<AdjustTitle/>} labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} colon={false}>
|
||||
<WeaFormItem label={<AdjustTitle/>} labelCol={{ span: 4 }} wrapperCol={{ span: 20 }} colon={false}>
|
||||
<div className="adjustRuleDetailWrapper">
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>如果:调薪生效日期在</span>
|
||||
<WeaSelect
|
||||
viewAttr={3}
|
||||
style={{ width: 60 }}
|
||||
style={{ width: 60, margin: "0 6px" }}
|
||||
value={dayOfMonth}
|
||||
options={monthDays}
|
||||
onChange={(dayOfMonth) => this.setState({ dayOfMonth })}
|
||||
|
|
@ -87,9 +120,8 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
</div>
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>计薪规则为:</span>
|
||||
<Radio.Group onChange={(value) => {
|
||||
console.log(value);
|
||||
}} value={beforeAdjustmentType}>
|
||||
<Radio.Group onChange={(e) => this.setState({ beforeAdjustmentType: e.target.value })}
|
||||
value={beforeAdjustmentType}>
|
||||
<Radio value={2}>取调整后薪资</Radio>
|
||||
<Radio value={4}>分段计薪<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
|
|
@ -106,12 +138,11 @@ class LedgerAdjustRuleAddModal extends Component {
|
|||
</Radio>
|
||||
</Radio.Group>
|
||||
</div>
|
||||
<div>否则:调薪生效日期在{dayOfMonth}号之后</div>
|
||||
<div style={{ marginBottom: 10 }}>否则:调薪生效日期在{dayOfMonth}号之后</div>
|
||||
<div className="adjustSalaryFlex">
|
||||
<span>计薪规则为:</span>
|
||||
<Radio.Group onChange={(value) => {
|
||||
console.log(value);
|
||||
}} value={afterAdjustmentType}>
|
||||
<Radio.Group onChange={(e) => this.setState({ afterAdjustmentType: e.target.value })}
|
||||
value={afterAdjustmentType}>
|
||||
<Radio value={1}>取调整前薪资</Radio>
|
||||
<Radio value={4}>分段计薪<WeaHelpfulTip
|
||||
style={{ marginLeft: "10px" }}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,196 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 编辑回算薪资项目
|
||||
* Description:
|
||||
* Date: 2022/12/13
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaFormItem, WeaInput, WeaSelect, WeaSlideModal, WeaTextarea } from "ecCom";
|
||||
import { Col, message, Modal, Row } from "antd";
|
||||
import SlideModalTitle from "../../../components/slideModalTitle";
|
||||
import { getBackitemForm, salarysobBackitemSave } from "../../../apis/ledger";
|
||||
import { fieldType, keepDecimalPlaces, roundingRules, valueTaking } from "../config";
|
||||
import FormalFormModal from "../../salaryItem/formalFormModal";
|
||||
import "./index.less";
|
||||
|
||||
class LedgerBackCalcEditSlide extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
loading: false,
|
||||
dataType: "",
|
||||
formulaContent: "",
|
||||
pattern: "",
|
||||
roundingMode: "",
|
||||
valueType: "",
|
||||
salaryItem: [],
|
||||
backCalcEditFormulModal: {
|
||||
visible: false,
|
||||
valueType: "",
|
||||
dataType: ""
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps, nextContext) {
|
||||
if (nextProps.visible !== this.props.visible && nextProps.id) this.getBackitemForm(nextProps.id);
|
||||
}
|
||||
|
||||
getBackitemForm = (id) => {
|
||||
getBackitemForm({ id }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({ ...data });
|
||||
}
|
||||
});
|
||||
};
|
||||
handleChange = (type, value) => {
|
||||
this.setState({
|
||||
...this.state,
|
||||
[type]: value
|
||||
});
|
||||
};
|
||||
handleSaveBackCalcItems = () => {
|
||||
const { salaryItem, loading, backCalcEditFormulModal, ...extra } = this.state;
|
||||
const { salaryItemId, editId: salarySobId, onCancle } = this.props;
|
||||
if (extra.valueType === "FORMULA" && _.isEmpty(extra.formulaContent)) {
|
||||
Modal.warning({
|
||||
title: "信息确认",
|
||||
content: "必要信息不完整,红色*为必填项!"
|
||||
});
|
||||
return;
|
||||
}
|
||||
const payload = { ...extra, salarySobId, salaryItemId };
|
||||
this.setState({ loading: true });
|
||||
salarysobBackitemSave(payload).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success("保存成功");
|
||||
onCancle(true);
|
||||
} else {
|
||||
message.error(errormsg || "保存失败");
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
handleEditFormnul = () => {
|
||||
const { backCalcEditFormulModal, valueType, dataType } = this.state;
|
||||
this.setState({
|
||||
backCalcEditFormulModal: {
|
||||
...backCalcEditFormulModal,
|
||||
visible: true,
|
||||
valueType,
|
||||
dataType: _.lowerCase(dataType)
|
||||
}
|
||||
});
|
||||
};
|
||||
handleCloseEditFormnul = () => {
|
||||
const { backCalcEditFormulModal } = this.state;
|
||||
this.setState({
|
||||
backCalcEditFormulModal: {
|
||||
...backCalcEditFormulModal,
|
||||
visible: false,
|
||||
valueType: "",
|
||||
dataType: ""
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { title, visible, showOperateBtn, onCancle } = this.props;
|
||||
const {
|
||||
valueType,
|
||||
dataType,
|
||||
roundingMode,
|
||||
pattern,
|
||||
salaryItem = [],
|
||||
loading,
|
||||
formulaContent,
|
||||
backCalcEditFormulModal
|
||||
} = this.state;
|
||||
const salaryItemName = salaryItem[0] ? salaryItem[0].name : "";
|
||||
return (
|
||||
<WeaSlideModal
|
||||
className="backCalcSlideWrapper"
|
||||
visible={visible}
|
||||
top={0}
|
||||
width={100}
|
||||
height={100}
|
||||
direction="right"
|
||||
measure="%"
|
||||
title={
|
||||
<SlideModalTitle
|
||||
subtitle={title}
|
||||
tabs={[]}
|
||||
loading={loading}
|
||||
showOperateBtn={showOperateBtn}
|
||||
editable={true}
|
||||
onSave={this.handleSaveBackCalcItems}
|
||||
/>
|
||||
}
|
||||
content={
|
||||
<div className="backCalcSlideContent">
|
||||
<Row>
|
||||
<Col span={16} className="backCalcSlideCol">
|
||||
<WeaFormItem label="薪资项目" labelCol={{ span: 3 }} wrapperCol={{ span: 12 }}>
|
||||
<WeaInput value={salaryItemName} viewAttr={1}/>
|
||||
</WeaFormItem>
|
||||
<WeaFormItem label="字段类型" labelCol={{ span: 3 }} wrapperCol={{ span: 12 }}>
|
||||
<WeaSelect options={fieldType} value={dataType} viewAttr={1}/>
|
||||
</WeaFormItem>
|
||||
<Row gutter={20}>
|
||||
<Col span={12}>
|
||||
<WeaFormItem label="舍入规则" labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
|
||||
<WeaSelect
|
||||
options={roundingRules} value={roundingMode} viewAttr={3}
|
||||
onChange={(v) => this.handleChange("roundingMode", v)}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<WeaFormItem label="保留小数位" labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
|
||||
<WeaSelect
|
||||
options={keepDecimalPlaces} value={pattern} viewAttr={3}
|
||||
onChange={(v) => this.handleChange("pattern", v)}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
</Col>
|
||||
</Row>
|
||||
<WeaFormItem label="取值方式" labelCol={{ span: 3 }} wrapperCol={{ span: 12 }}>
|
||||
<WeaSelect
|
||||
options={valueTaking} value={valueType} detailtype={3}
|
||||
viewAttr={3}
|
||||
onChange={(v) => this.handleChange("valueType", v)}
|
||||
/>
|
||||
</WeaFormItem>
|
||||
{
|
||||
valueType === "FORMULA" &&
|
||||
<WeaFormItem label="公式内容" labelCol={{ span: 3 }} wrapperCol={{ span: 12 }}>
|
||||
<div className="textareaBox" onClick={this.handleEditFormnul}>
|
||||
<WeaTextarea viewAttr={3} value={formulaContent}/>
|
||||
</div>
|
||||
{/*公式弹框*/}
|
||||
{
|
||||
backCalcEditFormulModal.visible &&
|
||||
<FormalFormModal
|
||||
{...backCalcEditFormulModal}
|
||||
formulaContent={formulaContent}
|
||||
onSaveFormal={data => this.setState({
|
||||
...this.state,
|
||||
formulaId: data.id,
|
||||
formulaContent: data.formula
|
||||
})}
|
||||
onCancel={this.handleCloseEditFormnul}
|
||||
/>
|
||||
}
|
||||
</WeaFormItem>
|
||||
}
|
||||
</Col>
|
||||
</Row>
|
||||
</div>
|
||||
}
|
||||
onClose={onCancle}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default LedgerBackCalcEditSlide;
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Author: 黎永顺
|
||||
* name: 回算薪资项目
|
||||
* Description:
|
||||
* Date: 2022/12/13
|
||||
*/
|
||||
import React, { Component } from "react";
|
||||
import { WeaHelpfulTip, WeaSearchGroup } from "ecCom";
|
||||
import LedgerBackCalculatedSalaryItemTable from "./LedgerBackCalculatedSalaryItemTable";
|
||||
import { getAggregate } from "../../../apis/ledger";
|
||||
import "./index.less";
|
||||
|
||||
class LedgerBackCalculatedSalaryItem extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
backCalcItems: [
|
||||
{
|
||||
key: "issuedItems",
|
||||
label: "已发项目设置",
|
||||
dataSource: [],
|
||||
helpContent: [
|
||||
"核算时,已发项目的公式中各项目值均取该项目在该账套核算中的最后一次核算值;",
|
||||
"已发项目的公式设置,只可在【取最后一次核算值的项目】中选择;"
|
||||
]
|
||||
},
|
||||
{
|
||||
key: "reissueItems",
|
||||
label: "补发项目设置",
|
||||
dataSource: [],
|
||||
helpContent: [
|
||||
"系统内置补发项目【补发薪资合计】,可新增其他的项目,如【补发备注】等;",
|
||||
"公式取值为当次回算的核算值。"
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getAggregate();
|
||||
}
|
||||
|
||||
getAggregate = () => {
|
||||
const { editId: salarySobId } = this.props;
|
||||
const { backCalcItems } = this.state;
|
||||
getAggregate({ salarySobId }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
backCalcItems: _.map(backCalcItems, item => {
|
||||
const { key } = item;
|
||||
return {
|
||||
...item,
|
||||
dataSource: data[key]
|
||||
};
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { backCalcItems } = this.state;
|
||||
return (
|
||||
<div className="ledgerBackCalculatedSalaryItemWrapper">
|
||||
{
|
||||
_.map(backCalcItems, item => {
|
||||
const { key, label, helpContent, dataSource } = item;
|
||||
return (
|
||||
<WeaSearchGroup
|
||||
key={key}
|
||||
needTigger
|
||||
title={
|
||||
<TitleComp title={label} helpContent={helpContent}/>
|
||||
}
|
||||
showGroup
|
||||
>
|
||||
<LedgerBackCalculatedSalaryItemTable
|
||||
{...this.props} dataSource={dataSource}
|
||||
onRefresh={this.getAggregate}
|
||||
/>
|
||||
</WeaSearchGroup>);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default LedgerBackCalculatedSalaryItem;
|
||||
|
||||
const TitleComp = (props) => {
|
||||
const helpContent = _.map(props.helpContent, (it, idx) => {
|
||||
return <div>{`${idx + 1}、${it}`}</div>;
|
||||
});
|
||||
return <div className="titleWrapper">
|
||||
<span>{props.title}</span>
|
||||
<WeaHelpfulTip
|
||||
width={300}
|
||||
title={helpContent}
|
||||
placement="topLeft"
|
||||
/>
|
||||
</div>;
|
||||
};
|
||||
|
|
@ -7,7 +7,9 @@
|
|||
import React, { Component } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { WeaButtonIcon, WeaTab, WeaTable } from "ecCom";
|
||||
import { Modal } from "antd";
|
||||
import LedgerAdjustRuleAddModal from "./ledgerAdjustRuleAddModal";
|
||||
import { listAdjustmentRule } from "../../../apis/ledger";
|
||||
|
||||
@inject("taxAgentStore")
|
||||
@observer
|
||||
|
|
@ -16,7 +18,6 @@ class LedgerSalaryAdjustmentRules extends Component {
|
|||
super(props);
|
||||
this.state = {
|
||||
dataSource: [],
|
||||
columns: [],
|
||||
adjustRuleAddModal: {
|
||||
visible: false,
|
||||
title: "调薪计薪规则项",
|
||||
|
|
@ -25,6 +26,24 @@ class LedgerSalaryAdjustmentRules extends Component {
|
|||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.listAdjustmentRule();
|
||||
}
|
||||
|
||||
listAdjustmentRule = () => {
|
||||
const { editId: salarySobId } = this.props;
|
||||
listAdjustmentRule({ salarySobId }).then(({ status, data }) => {
|
||||
if (status) {
|
||||
this.setState({
|
||||
dataSource: data
|
||||
}, () => {
|
||||
const { onSaveParams } = this.props;
|
||||
const { dataSource } = this.state;
|
||||
onSaveParams(dataSource);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
handleAddAdjustRule = () => {
|
||||
const { adjustRuleAddModal } = this.state;
|
||||
const { editId } = this.props;
|
||||
|
|
@ -46,14 +65,73 @@ class LedgerSalaryAdjustmentRules extends Component {
|
|||
}
|
||||
});
|
||||
};
|
||||
handleDelete = (index) => {
|
||||
const { dataSource } = this.state;
|
||||
Modal.confirm({
|
||||
title: "信息确认",
|
||||
content: "确认要删除吗?",
|
||||
onOk: () => {
|
||||
this.setState({
|
||||
dataSource: _.filter(dataSource, (it, idx) => idx !== index)
|
||||
}, () => {
|
||||
const { onSaveParams } = this.props;
|
||||
const { dataSource } = this.state;
|
||||
onSaveParams(dataSource);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
convertAdjustmentType = (index) => {
|
||||
const nameList = {
|
||||
1: "取调薪前薪资",
|
||||
2: "取调薪后薪资",
|
||||
3: "平均值",
|
||||
4: "分段计薪"
|
||||
};
|
||||
return nameList[Number(index)];
|
||||
};
|
||||
|
||||
render() {
|
||||
const { taxAgentStore: { showOperateBtn }, editId } = this.props;
|
||||
const { taxAgentStore: { showOperateBtn }, editId, onSaveParams } = this.props;
|
||||
const { adjustRuleAddModal } = this.state;
|
||||
const { dataSource, columns } = this.state;
|
||||
const { dataSource } = this.state;
|
||||
const btns = showOperateBtn ? [
|
||||
<WeaButtonIcon buttonType="add" type="primary" onClick={this.handleAddAdjustRule}/>
|
||||
] : [];
|
||||
const columns = [
|
||||
{
|
||||
title: "序号",
|
||||
dataIndex: "index",
|
||||
width: 60,
|
||||
render: (text, record, index) => {
|
||||
return index + 1;
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex: "salaryItemName",
|
||||
title: "薪资项目",
|
||||
render: (text) => {
|
||||
return <span className="tdEllipsis" title={text}>{text}</span>;
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex: "salaryCalculationRules",
|
||||
title: "计薪规则",
|
||||
render: (text, record) => {
|
||||
const salaryCalculationRules = `${record.dayOfMonth}号(含)之前调薪,${this.convertAdjustmentType(record.beforeAdjustmentType)};${record.dayOfMonth}号之后调薪,${this.convertAdjustmentType(record.afterAdjustmentType)}`;
|
||||
return <span className="tdEllipsis" title={salaryCalculationRules}>{salaryCalculationRules}</span>;
|
||||
}
|
||||
},
|
||||
{
|
||||
dataIndex: "",
|
||||
title: "操作",
|
||||
width: 80,
|
||||
render: (text, record, index) => {
|
||||
return showOperateBtn ?
|
||||
<a href="javascript: void(0);" onClick={() => this.handleDelete(index)}>删除</a> : <span></span>;
|
||||
}
|
||||
}
|
||||
];
|
||||
return (
|
||||
<div>
|
||||
<WeaTab datas={[]} keyParam="viewcondition" buttons={btns}/>
|
||||
|
|
@ -65,7 +143,18 @@ class LedgerSalaryAdjustmentRules extends Component {
|
|||
/>
|
||||
<LedgerAdjustRuleAddModal
|
||||
{...adjustRuleAddModal}
|
||||
salaryRuleItemsList={dataSource}
|
||||
onCancel={this.handleCloseModal}
|
||||
onSave={(dataSource) => {
|
||||
this.setState({ dataSource }, () => {
|
||||
const { dataSource } = this.state;
|
||||
const ruleParams = _.map(dataSource, it => {
|
||||
const { salaryCalculationRules, ...params } = it;
|
||||
return { ...params };
|
||||
});
|
||||
onSaveParams(ruleParams);
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ import SlideModalTitle from "../../../components/slideModalTitle";
|
|||
import LedgerBaseSetting from "./ledgerBaseSetting";
|
||||
import LedgerAssociatedPersonnel from "./ledgerAssociatedPersonnel";
|
||||
import LedgerSalaryAdjustmentRules from "./ledgerSalaryAdjustmentRules";
|
||||
import { saveLedgerBasic } from "../../../apis/ledger";
|
||||
import LedgerBackCalculatedSalaryItem from "./ledgerBackCalculatedSalaryItem";
|
||||
import { saveAdjustmentRule, saveLedgerBasic } from "../../../apis/ledger";
|
||||
import "./index.less";
|
||||
|
||||
const Step = WeaSteps.Step;
|
||||
|
|
@ -32,10 +33,17 @@ class LedgerSlide extends Component {
|
|||
this.state = {
|
||||
current: 0,
|
||||
loading: false,
|
||||
baseSettingInfo: {}
|
||||
baseSettingInfo: {},
|
||||
adjustRules: []
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Author: 黎永顺
|
||||
* Description: 保存基本信息
|
||||
* Params:
|
||||
* Date: 2022/12/12
|
||||
*/
|
||||
saveLedgerBasic = () => {
|
||||
const { baseSettingInfo, current } = this.state;
|
||||
const { editId } = this.props;
|
||||
|
|
@ -61,6 +69,29 @@ class LedgerSlide extends Component {
|
|||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
};
|
||||
/*
|
||||
* Author: 黎永顺
|
||||
* Description: 保存调薪计薪规则
|
||||
* Params:
|
||||
* Date: 2022/12/12
|
||||
*/
|
||||
saveLedgerAdjustRule = () => {
|
||||
const { adjustRules } = this.state;
|
||||
const payload = {
|
||||
salarySobId: this.props.editId,
|
||||
ruleParams: adjustRules
|
||||
};
|
||||
this.setState({ loading: true });
|
||||
saveAdjustmentRule(payload).then(({ status, errormsg }) => {
|
||||
this.setState({ loading: false });
|
||||
if (status) {
|
||||
message.success("保存成功");
|
||||
} else {
|
||||
message.success(errormsg || "保存失败");
|
||||
}
|
||||
}).catch(() => this.setState({ loading: false }));
|
||||
}
|
||||
;
|
||||
handleChangeSlideTab = (current) => {
|
||||
this.setState({ current: Number(current) });
|
||||
};
|
||||
|
|
@ -86,8 +117,12 @@ class LedgerSlide extends Component {
|
|||
case 1:
|
||||
CurrentDom = <LedgerAssociatedPersonnel {...this.props}/>;
|
||||
break;
|
||||
case 3:
|
||||
CurrentDom = <LedgerBackCalculatedSalaryItem {...this.props}/>;
|
||||
break;
|
||||
case 4:
|
||||
CurrentDom = <LedgerSalaryAdjustmentRules {...this.props}/>;
|
||||
CurrentDom =
|
||||
<LedgerSalaryAdjustmentRules {...this.props} onSaveParams={(adjustRules) => this.setState({ adjustRules })}/>;
|
||||
break;
|
||||
default:
|
||||
CurrentDom = null;
|
||||
|
|
@ -136,9 +171,9 @@ class LedgerSlide extends Component {
|
|||
CurrentDom = !editId ?
|
||||
[
|
||||
<Button type="ghost" onClick={() => this.setState({ current: current - 1 })}>上一步</Button>,
|
||||
<Button type="primary">完成</Button>
|
||||
<Button type="primary" loading={loading} onClick={this.saveLedgerAdjustRule}>完成</Button>
|
||||
] : [
|
||||
<Button type="primary" loading={loading} onClick={this.saveLedgerBasic}>保存</Button>
|
||||
<Button type="primary" loading={loading} onClick={this.saveLedgerAdjustRule}>保存</Button>
|
||||
];
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -666,3 +666,91 @@ export const monthDays = [
|
|||
showname: "31号"
|
||||
}
|
||||
];
|
||||
export const fieldType = [
|
||||
{
|
||||
key: "STRING",
|
||||
selected: false,
|
||||
showname: "字符"
|
||||
},
|
||||
{
|
||||
key: "NUMBER",
|
||||
selected: false,
|
||||
showname: "数值"
|
||||
}
|
||||
];
|
||||
export const valueTaking = [
|
||||
{
|
||||
key: "INPUT",
|
||||
selected: false,
|
||||
showname: "输入"
|
||||
},
|
||||
{
|
||||
key: "FORMULA",
|
||||
selected: false,
|
||||
showname: "公式"
|
||||
}
|
||||
];
|
||||
export const roundingRules = [
|
||||
{
|
||||
key: "RAW_DATA",
|
||||
selected: false,
|
||||
showname: "原始数据"
|
||||
},
|
||||
{
|
||||
key: "ROUNDING",
|
||||
selected: false,
|
||||
showname: "四舍五入"
|
||||
},
|
||||
{
|
||||
key: "ROUND_UP",
|
||||
selected: false,
|
||||
showname: "向上舍入"
|
||||
},
|
||||
{
|
||||
key: "ROUND_DOWN",
|
||||
selected: false,
|
||||
showname: "向下舍入"
|
||||
},
|
||||
{
|
||||
key: "CEILING",
|
||||
selected: false,
|
||||
showname: "见分进角"
|
||||
},
|
||||
{
|
||||
key: "UP_EVEN",
|
||||
selected: false,
|
||||
showname: "向上求偶"
|
||||
},
|
||||
];
|
||||
export const keepDecimalPlaces = [
|
||||
{
|
||||
key: "0",
|
||||
selected: false,
|
||||
showname: "0"
|
||||
},
|
||||
{
|
||||
key: "1",
|
||||
selected: false,
|
||||
showname: "1"
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
selected: false,
|
||||
showname: "2"
|
||||
},
|
||||
{
|
||||
key: "3",
|
||||
selected: false,
|
||||
showname: "3"
|
||||
},
|
||||
{
|
||||
key: "4",
|
||||
selected: false,
|
||||
showname: "4"
|
||||
},
|
||||
{
|
||||
key: "5",
|
||||
selected: false,
|
||||
showname: "5"
|
||||
}
|
||||
];
|
||||
|
|
|
|||
|
|
@ -67,6 +67,12 @@ export default class FormalFormModal extends React.Component {
|
|||
let groupParams = {};
|
||||
if (this.props.valueType == "3") {
|
||||
groupParams = { "referenceType": "sql" };
|
||||
} else if (this.props.valueType === "FORMULA") {
|
||||
groupParams = { "referenceType": "backCalc" };
|
||||
this.referenceType = "backCalc";
|
||||
this.setState({
|
||||
value: this.props.formulaContent
|
||||
});
|
||||
}
|
||||
salaryAcctImportTemplateParam(groupParams);
|
||||
}
|
||||
|
|
@ -247,7 +253,7 @@ export default class FormalFormModal extends React.Component {
|
|||
const { value, formulaDatasourceList, extendParam } = this.state;
|
||||
return (
|
||||
<WeaDialog
|
||||
title={`${this.props.valueType == 2 ? "函数" : "SQL"}公式`}
|
||||
title={`${(this.props.valueType == 2 || this.props.valueType === "FORMULA") ? "函数" : "SQL"}公式`}
|
||||
visible={this.props.visible}
|
||||
style={{ width: 800 }}
|
||||
buttons={[
|
||||
|
|
|
|||
Loading…
Reference in New Issue