工资单模板修改

This commit is contained in:
黎永顺 2022-12-07 14:15:46 +08:00
parent 4825d0cd49
commit 593140b54f
9 changed files with 359 additions and 140 deletions

View File

@ -313,3 +313,26 @@ export const grantProxy = params => {
body: JSON.stringify(params)
}).then(res => res.json());
};
// 工资单发放-新建时获取补发工资单模板薪资项目设置
export const getReplenishForm = params => {
return fetch("/api/bs/hrmsalary/salaryBill/template/getReplenishForm", {
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(params)
}).then(res => res.json());
};
// 工资单发放-获取规则设置下拉框
export const getReplenishRuleSetOptions = ({ salarySobId }) => {
return fetch(`/api/bs/hrmsalary/salaryBill/template/getReplenishRuleSetOptions?salarySobId=${salarySobId}`, {
method: "GET",
mode: "cors",
headers: {
"Content-Type": "application/json"
}
}).then(res => res.json());
};

View File

@ -13,9 +13,10 @@ import BaseInformForm from "./stepForm/baseInformForm";
import ShowSettingForm from "./stepForm/showSettingForm";
import SlideModalTitle from "../../components/slideModalTitle";
import TemplateSettingList from "./templateSettingList";
import { notNull } from "../../util/validate";
import TemplateSettingForm from "./stepForm/tmplateSettingForm";
import CopyModal from "./copyModal";
import SalarySendList from "./SalarySendList";
import { getReplenishForm } from "../../apis/payroll";
import "../dataAcquisition/cumDeduct/index.less";
const { MonthPicker } = DatePicker;
@ -95,19 +96,45 @@ export default class Payroll extends React.Component {
}
// 工资单模板-新建表单变化监听
handleBaseInfoChange(request) {
handleBaseInfoChange = (request) => {
const { payrollStore: { setTemplateBaseData } } = this.props;
setTemplateBaseData(request);
}
};
getReplenishForm = (isEdit = false, params = {}) => {
const { payrollStore } = this.props;
const { templateBaseData, salaryTemplateShowSet, setReplenishSalaryTemplateSalaryItemSet } = payrollStore;
if (!salaryTemplateShowSet.theme && !isEdit) {
Modal.warning({
title: "信息确认",
content: "必要信息不完整,红色*为必填项!"
});
return;
}
getReplenishForm({ salarySobId: templateBaseData.salarySob, ...params }).then(({ status, data }) => {
if (status) {
if (!isEdit) {
this.setState({ currentStep: this.state.currentStep + 1 }, () => {
setReplenishSalaryTemplateSalaryItemSet(data.replenishSalaryTemplateSalaryItemSet);
window.localStorage.setItem("salaryTemplateShowSet", JSON.stringify(salaryTemplateShowSet));
});
} else {
setReplenishSalaryTemplateSalaryItemSet(data.replenishSalaryTemplateSalaryItemSet);
window.localStorage.setItem("salaryTemplateShowSet", JSON.stringify(salaryTemplateShowSet));
}
}
});
};
// 新建保存
handleSave() {
handleSave = () => {
const { payrollStore } = this.props;
const { fetchSavePayroll } = payrollStore;
fetchSavePayroll().then(() => {
window.localStorage.removeItem("templateBaseData");
window.localStorage.removeItem("salaryTemplateShowSet");
this.setState({ currentStep: 0, stepSlideVisible: false });
});
}
};
componentWillMount() {
const { payrollStore } = this.props;
@ -177,9 +204,6 @@ export default class Payroll extends React.Component {
content: "确认删除",
onOk: () => {
deletePayroll([record.id]);
},
onCancel: () => {
}
});
}
@ -197,25 +221,46 @@ export default class Payroll extends React.Component {
}
// 预览
handlePreview() {
handlePreview = () => {
const { payrollStore: { templateBaseData, salaryTemplateShowSet, salaryItemSet } } = this.props;
window.localStorage.setItem("templateBaseData", JSON.stringify(templateBaseData));
window.localStorage.setItem("salaryTemplateShowSet", JSON.stringify(salaryTemplateShowSet));
window.localStorage.setItem("salaryItemSet", JSON.stringify(salaryItemSet));
window.open("/spa/hrmSalary/static/index.html#/main/hrmSalary/templatePreview");
}
};
// 更新保存
handleUpdateSave() {
handleUpdateSave = () => {
const { selectedTab } = this.state;
const { payrollStore } = this.props;
const { fetchUpdatePayroll } = payrollStore;
if (selectedTab === 0) {
if (!this.validateStep1()) {
Modal.warning({
title: "信息确认",
content: "必要信息不完整,红色*为必填项!"
});
return;
}
} else if (selectedTab === 1) {
const { salaryTemplateShowSet } = payrollStore;
if (!salaryTemplateShowSet.theme) {
Modal.warning({
title: "信息确认",
content: "必要信息不完整,红色*为必填项!"
});
return;
}
}
fetchUpdatePayroll(this.recordId).then(() => {
this.setState({
editSlideVisible: false,
selectedTab: 0
});
});
}
};
// 发放页面页码跳转
handleListDataPageChange(value, pageInfo) {
@ -231,6 +276,18 @@ export default class Payroll extends React.Component {
getPayrollList({ salaryYearMonth: this.salaryYearMonth, ...pageInfo });
}
validateStep1 = () => {
const { payrollStore: { templateBaseData } } = this.props;
const { reissueRule = "0" } = templateBaseData;
const validList = reissueRule === "0" ? ["name", "replenishName", "salarySob"] : ["name", "replenishName", "salarySob", "replenishRule"];
if (_.every(validList, it => !!templateBaseData[it])) {
window.localStorage.setItem("templateBaseData", JSON.stringify(templateBaseData));
} else {
window.localStorage.removeItem("templateBaseData");
}
return _.every(validList, it => !!templateBaseData[it]);
};
render() {
const { payrollStore, taxAgentStore: { showOperateBtn } } = this.props;
const {
@ -355,21 +412,12 @@ export default class Payroll extends React.Component {
}
};
const steps = ["基础设置", "正常核算工资单模板", "补发工资单模版"];
const validateStep1 = () => {
const { payrollStore: { templateBaseData } } = this.props;
if (!notNull(templateBaseData.name)) {
message.warning("工资单模板名称不能为空");
return false;
}
if (!notNull(templateBaseData.salarySob)) {
message.warning("薪资账套不能为空");
return false;
}
return true;
};
const nextStep = () => {
if (!validateStep1()) {
if (!this.validateStep1()) {
Modal.warning({
title: "信息确认",
content: "必要信息不完整,红色*为必填项!"
});
return;
}
this.setState({
@ -439,6 +487,8 @@ export default class Payroll extends React.Component {
currentStep={currentStep}
steps={steps}
onCancel={() => {
window.localStorage.removeItem("templateBaseData");
window.localStorage.removeItem("salaryTemplateShowSet");
this.setState({ stepSlideVisible: false });
}}
customOperate={
@ -447,24 +497,18 @@ export default class Payroll extends React.Component {
nextStep();
}}>下一步</Button>
] : currentStep === 1 ? [
<Button type="default" style={{ marginRight: "10px" }} onClick={() => {
<Button type="default" onClick={() => {
prevStep();
}}>上一步</Button>,
<Button type="primary" onClick={() => {
this.handleSave();
}}>下一步</Button>,
<Button type="default" style={{ marginLeft: "10px" }} onClick={() => {
<Button type="primary" onClick={() => this.getReplenishForm()}>下一步</Button>,
<Button type="default" onClick={() => {
this.handlePreview();
}}>预览</Button>
] : currentStep === 2 ? [
<Button type="default" style={{ marginRight: "10px" }} onClick={() => {
<Button type="default" onClick={() => {
prevStep();
}}>上一步</Button>,
<Button type="default" style={{ marginLeft: "10px" }} onClick={() => {
this.handlePreview();
}}>预览</Button>,
<Button type="primary" onClick={() => {
}}>保存</Button>
<Button type="primary" onClick={this.handleSave}>保存</Button>
] :
[]
}
@ -478,10 +522,9 @@ export default class Payroll extends React.Component {
currentStep === 1 && <ShowSettingForm/>
}
{
currentStep === 2 && <div>补发工资单模版</div>
currentStep === 2 && <TemplateSettingForm/>
}
</div>
}
/>
}
@ -494,50 +537,61 @@ export default class Payroll extends React.Component {
top={0}
width={50}
height={100}
direction={"right"}
measure={"%"}
direction="right"
measure="%"
title={
<SlideModalTitle
subtitle="编辑工资单模板"
tabs={[{ title: "基础设置", key: 0 }, { title: "显示设置", key: 1 }]}
tabs={[
{ title: "基础设置", key: 0 },
{ title: "正常核算工资单模板", key: 1 },
{ title: "补发工资单模版", key: 2 }
]}
editable={false}
selectedTab={selectedTab}
showOperateBtn={showOperateBtn}
customOperate={
selectedTab == 0 ? [
selectedTab === 0 ? [
<Button type="primary" onClick={() => {
this.handleUpdateSave();
}}>保存</Button>
] : selectedTab == 1 ? [
] : selectedTab === 1 ? [
<Button type="primary" onClick={() => {
this.handleUpdateSave();
}} style={{ marginRight: "10px" }}>保存</Button>,
<Button type="default" onClick={() => {
this.handlePreview();
}}>预览</Button>
] : []
}
subItemChange={
(selectedTab) => {
this.setState({ selectedTab });
}
}}>保存</Button>,
<Button type="default" onClick={this.handlePreview}>预览</Button>
] : [
<Button type="primary" onClick={() => {
this.handleUpdateSave();
}}>保存</Button>
]
}
subItemChange={(selectedTab) => {
this.setState({ selectedTab: Number(selectedTab) }, () => {
if (this.state.selectedTab === 2) this.getReplenishForm(true, { id: this.state.templateCurrentId });
});
}}
/>
}
content={<div>
{
selectedTab == 0 &&
<BaseInformForm id={this.state.templateCurrentId} onChange={(request) => {
this.handleBaseInfoChange(request);
}}/>
selectedTab === 0 &&
<BaseInformForm id={this.state.templateCurrentId}
onChange={(request) => this.handleBaseInfoChange(request)}/>
}
{
selectedTab == 1 && <ShowSettingForm id={this.state.templateCurrentId}/>
selectedTab === 1 && <ShowSettingForm id={this.state.templateCurrentId}/>
}
{
selectedTab === 2 && <TemplateSettingForm id={this.state.templateCurrentId}/>
}
</div>}
onClose={() => this.setState({ editSlideVisible: false }, () => this.setState({ selectedTab: 0 }))}
showMask={true}
closeMaskOnClick={() => this.setState({ editSlideVisible: false }, () => this.setState({ selectedTab: 0 }))}/>
onClose={() => this.setState({ editSlideVisible: false }, () => {
window.localStorage.removeItem("templateBaseData");
window.localStorage.removeItem("salaryTemplateShowSet");
this.setState({ selectedTab: 0 });
})}
/>
}
{
this.state.copyModalVisible &&

View File

@ -1,6 +1,7 @@
import React from "react";
import { WeaFormItem, WeaInput, WeaSearchGroup, WeaSelect } from "ecCom";
import { inject, observer } from "mobx-react";
import { getReplenishRuleSetOptions } from "../../../apis/payroll";
import { toJS } from "mobx";
@inject("payrollStore")
@ -11,6 +12,7 @@ export default class BaseInformForm extends React.Component {
this.state = {
inited: false,
options: [],
replenishRuleOptions: [],
request: {}
};
}
@ -18,16 +20,22 @@ export default class BaseInformForm extends React.Component {
componentWillMount() {
const { payrollStore } = this.props;
const { getPayrollBaseForm } = payrollStore;
const templateBaseData = window.localStorage.getItem("templateBaseData") || "{}";
getPayrollBaseForm(this.props.id).then(data => {
this.setState(
{
replenishRuleOptions: _.map(data.replenishRuleSetOption, it => ({ key: it.id, showname: it.content })),
options: _.isEmpty(toJS(data.salarySobOptions)) ? [{ key: "", showname: "" }] : [{
key: "",
showname: ""
}, ...toJS(data.salarySobOptions)],
request: data.templateBaseData
},
() => {
request: {
...data.templateBaseData,
reissueRule: data.templateBaseData.replenishRule ? "1" : "0",
...JSON.parse(templateBaseData)
}
}, () => {
this.props.onChange && this.props.onChange(this.state.request);
this.setState({
inited: true
});
@ -36,19 +44,35 @@ export default class BaseInformForm extends React.Component {
});
}
hanldeChange(params) {
hanldeChange = (params) => {
let request = { ...this.state.request, ...params };
this.setState({
request
}, () => {
if (this.state.request.reissueRule === "1" && this.state.request.salarySob) {
// TODO获取规则设置枚举项
this.getReplenishRuleSetOptions();
}
});
this.props.onChange && this.props.onChange(request);
}
};
getReplenishRuleSetOptions = () => {
const { request } = this.state;
getReplenishRuleSetOptions({ salarySobId: request.salarySob }).then(({ status, data }) => {
if (status && !_.isEmpty(data)) {
this.setState({
replenishRuleOptions: _.map(data, it => ({ key: it.id, showname: it.content }))
});
}
});
};
render() {
const { request, options } = this.state;
const { salarySob, name, description } = request;
const { request, options, replenishRuleOptions } = this.state;
const { salarySob, name, description, replenishName, replenishRule, reissueRule } = request;
return (
<WeaSearchGroup title="基础信息" items={[]} needTigger showGroup center>
<WeaSearchGroup title="基础信息" items={[]} needTigger showGroup col={1}>
<WeaFormItem
label="薪资账套"
labelCol={{ span: 6 }}
@ -81,9 +105,9 @@ export default class BaseInformForm extends React.Component {
wrapperCol={{ span: 18 }}
>
<WeaInput
value={""}
value={replenishName}
viewAttr={3}
onChange={value => this.hanldeChange({ name: value })}
onChange={value => this.hanldeChange({ replenishName: value })}
/>
</WeaFormItem>
<WeaFormItem
@ -92,28 +116,28 @@ export default class BaseInformForm extends React.Component {
wrapperCol={{ span: 18 }}
>
<WeaSelect
options={[{key:"0",showname:"全部"},{key:"1",showname:"按规则"}]}
value={""}
options={[{ key: "0", showname: "全部" }, { key: "1", showname: "按规则" }]}
value={reissueRule}
detailtype={3}
viewAttr={3}
supportCancel
onChange={(v, showname) => {
}}
/>
</WeaFormItem>
<WeaFormItem
label="规则设置"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaSelect
options={[]}
value={""}
viewAttr={3}
onChange={(v, showname) => {
}}
onChange={value => this.hanldeChange({ reissueRule: value })}
/>
</WeaFormItem>
{
reissueRule !== "0" &&
<WeaFormItem
label="规则设置"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<WeaSelect
options={replenishRuleOptions}
value={replenishRule}
viewAttr={3}
onChange={value => this.hanldeChange({ replenishRule: value })}
/>
</WeaFormItem>
}
<WeaFormItem
label="备注"
labelCol={{ span: 6 }}

View File

@ -23,7 +23,6 @@
}
.showSettingForm {
padding: 10px 20px;
.settingItemWrapper {
.itemTitle {

View File

@ -3,7 +3,7 @@ import { Icon, Modal, Radio, Switch } from "antd";
import { WeaFormItem, WeaInput, WeaSearchGroup } from "ecCom";
import { inject, observer } from "mobx-react";
import BackgroundUpload from "../components/backgroundUpload";
import './index.less';
import "./index.less";
@inject("payrollStore")
@ -54,7 +54,6 @@ export default class ShowSettingForm extends React.Component {
handleDeleteItem(group, item) {
const { payrollStore: { salaryItemSet, setSalaryItemSet } } = this.props;
console.log("item:", item);
let resultSalaryItemSet = [...salaryItemSet];
resultSalaryItemSet.map(sourceGroup => {
if (sourceGroup.id == group.id) {
@ -84,6 +83,7 @@ export default class ShowSettingForm extends React.Component {
}
render() {
const salaryTemplateShowSetStorage = window.localStorage.getItem("salaryTemplateShowSet") || "{}";
const { payrollStore } = this.props;
const { salaryTemplateShowSet } = payrollStore;
const { salaryItemSet } = payrollStore;
@ -94,7 +94,7 @@ export default class ShowSettingForm extends React.Component {
textContentPosition,
salaryItemNullStatus,
salaryItemZeroStatus
} = salaryTemplateShowSet;
} = { ...salaryTemplateShowSet, ...JSON.parse(salaryTemplateShowSetStorage) };
return (
<div className="showSettingForm">
<WeaSearchGroup title="主题及其他设置" items={[]} needTigger showGroup center>

View File

@ -0,0 +1,121 @@
import React from "react";
import { Icon, Modal } from "antd";
import { WeaSearchGroup } from "ecCom";
import { inject, observer } from "mobx-react";
import { toJS } from "mobx";
import "./index.less";
@inject("payrollStore")
@observer
export default class TemplateSettingForm extends React.Component {
handleDownClick = (index) => {
const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
let downItem = replenishSalaryTemplateSalaryItemSet[index + 1];
let thisItem = replenishSalaryTemplateSalaryItemSet[index];
let resultSet = [...replenishSalaryTemplateSalaryItemSet];
resultSet[index] = downItem;
resultSet[index + 1] = thisItem;
setReplenishSalaryTemplateSalaryItemSet(resultSet);
};
handleUpClick = (index) => {
const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
let upItem = replenishSalaryTemplateSalaryItemSet[index - 1];
let thisItem = replenishSalaryTemplateSalaryItemSet[index];
let resultSet = [...replenishSalaryTemplateSalaryItemSet];
resultSet[index] = upItem;
resultSet[index - 1] = thisItem;
setReplenishSalaryTemplateSalaryItemSet(resultSet);
};
handleDeleteItem = (group, item) => {
const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
let resultSalaryItemSet = [...replenishSalaryTemplateSalaryItemSet];
resultSalaryItemSet.map(sourceGroup => {
if (sourceGroup.id === group.id) {
sourceGroup.items.map((sourceItem, index) => {
if (sourceItem.id === item.id) {
sourceGroup.items.splice(index, 1);
}
});
}
});
setReplenishSalaryTemplateSalaryItemSet(resultSalaryItemSet);
};
handleDeleteClick = (index) => {
Modal.confirm({
title: "信息确认",
content: "确认删除",
onOk: () => {
const { payrollStore: { replenishSalaryTemplateSalaryItemSet, setReplenishSalaryTemplateSalaryItemSet } } = this.props;
let resultSalaryItemSet = [...replenishSalaryTemplateSalaryItemSet];
resultSalaryItemSet.splice(index, 1);
setReplenishSalaryTemplateSalaryItemSet(resultSalaryItemSet);
},
onCancel: () => {
}
});
};
render() {
const { payrollStore } = this.props;
const { replenishSalaryTemplateSalaryItemSet } = payrollStore;
return (
<div className="showSettingForm">
<WeaSearchGroup title="薪资项目设置" items={[]} needTigger showGroup>
{
!_.isEmpty(toJS(replenishSalaryTemplateSalaryItemSet)) &&
replenishSalaryTemplateSalaryItemSet.map((group, index) => (
<div className="configItemWrapper">
<div className="configTitle">{group.groupName}
{
index < replenishSalaryTemplateSalaryItemSet.length - 1 &&
<Icon
type="caret-down"
style={{ marginLeft: "10px", cursor: "pointer", color: "#666" }}
onClick={() => {
this.handleDownClick(index);
}}
/>
}
{
index > 0 &&
<Icon
type="caret-up"
style={{ marginLeft: "10px", cursor: "pointer", color: "#666" }}
onClick={() => {
this.handleUpClick(index);
}}
/>
}
<i
className="icon-coms-Delete"
style={{ cursor: "pointer", color: "#666", marginLeft: "10px" }}
onClick={() => {
this.handleDeleteClick(index);
}}
/>
</div>
<div className="configContent">
{group.items.map(item => (
<span className="editItem">{item.name}
<Icon
type="cross" style={{ cursor: "pointer" }}
onClick={() => {
this.handleDeleteItem(group, item);
}}
/>
</span>
))}
</div>
</div>
))
}
</WeaSearchGroup>
</div>
);
}
}

View File

@ -10,6 +10,8 @@ export default class FormalFormModal extends React.Component {
constructor(props) {
super(props);
this.state = {
validateType: "",
returnType: "",
value: "",
extendParam: {
sqlReturnKey: "",
@ -35,7 +37,9 @@ export default class FormalFormModal extends React.Component {
if (this.props.formulaId) {
detailFormual(this.props.formulaId).then(data => {
this.setState({
value: data.formula
value: data.formula,
validateType: data.validateType,
returnType: data.returnType,
});
this.parameters = data.parameters;
this.referenceType = data.referenceType;
@ -185,8 +189,8 @@ export default class FormalFormModal extends React.Component {
description: "备注",
module: "salary",
useFor: "salaryitem",
returnType: this.props.dataType,
validateType: this.props.dataType,
returnType: this.props.dataType || this.state.returnType,
validateType: this.props.dataType|| this.state.validateType,
extendParam: JSON.stringify(this.state.extendParam),
formula: this.state.value,
parameters: this.parameters,

View File

@ -1,26 +1,26 @@
import React from 'react';
import ReactDOM from 'react-dom';
import React from "react";
import ReactDOM from "react-dom";
import { createHashHistory } from 'History';
import { createHashHistory } from "History";
import { Router, Route, useRouterHistory, IndexRedirect } from 'react-router';
import { IndexRedirect, Route, Router, useRouterHistory } from "react-router";
import { syncHistoryWithStore, RouterStore } from 'mobx-react-router';
import { RouterStore, syncHistoryWithStore } from "mobx-react-router";
import { Provider } from 'mobx-react';
import { Provider } from "mobx-react";
import Module from 'weaHrmSalary';
import Module from "weaHrmSalary";
const routing = new RouterStore();
const allStore = {
routing,
...Module.store,
...Module.store
};
const browserHistory = useRouterHistory(createHashHistory)({
queryKey: '_key',
basename: '/',
queryKey: "_key",
basename: "/"
});
const history = syncHistoryWithStore(browserHistory, allStore.routing);
@ -31,21 +31,24 @@ class Root extends React.Component {
componentWillMount() {
top.$(".ant-message").remove();
allStore.taxAgentStore.getPermission();
window.localStorage.removeItem("templateBaseData");
window.localStorage.removeItem("salaryTemplateShowSet");
}
render() {
return (
<Provider {...allStore}>
<Router history={history}>
<Route name='root' breadcrumbName='根路由' path='/' component={Home}>
<IndexRedirect to='main/hrmSalary/index' />
<Route name='main' breadcrumbName='入口' path='/main' component={Home}>
{ Module.Route }
<Route name="root" breadcrumbName="根路由" path="/" component={Home}>
<IndexRedirect to="main/hrmSalary/index"/>
<Route name="main" breadcrumbName="入口" path="/main" component={Home}>
{Module.Route}
</Route>
</Route>
</Router>
</Provider>
)
);
}
}
ReactDOM.render(<Root />, document.getElementById('container'));
ReactDOM.render(<Root/>, document.getElementById("container"));

View File

@ -1,9 +1,8 @@
import { action, observable } from "mobx";
import { action, observable, toJS } from "mobx";
import { message } from "antd";
import { WeaForm, WeaTableNew } from "comsMobx";
import * as API from "../apis/payroll"; // 引入API接口文件
import { notNull } from "../util/validate";
import { removePropertyCondition } from "../util/response";
const { TableStore } = WeaTableNew;
@ -23,6 +22,7 @@ export class payrollStore {
@observable salarySobOptions = []; // 账套列表
// 显示设置表单
@observable salaryTemplateShowSet = {}; // 显示设置基础表单
@observable replenishSalaryTemplateSalaryItemSet = []; // 补发工资单模版基础表单
@observable salaryItemSet = []; // 显示设置薪资项
// **** 工资单页面 ****
@ -53,6 +53,10 @@ export class payrollStore {
@observable canWidthdrawColumns = []; // 可以撤回的列表列名
@observable canWithdrawPageInfo = {}; // 可以撤回列表分页对象
@action
setReplenishSalaryTemplateSalaryItemSet = replenishSalaryTemplateSalaryItemSet =>
(this.replenishSalaryTemplateSalaryItemSet = replenishSalaryTemplateSalaryItemSet);
@action
setGrantListShowSearchAd = grantListShowSearchAd =>
(this.grantListShowSearchAd = grantListShowSearchAd);
@ -167,6 +171,7 @@ export class payrollStore {
})
: [];
resolve({
replenishRuleSetOption: res.data.replenishRuleSetOption,
templateBaseData: this.templateBaseData,
salarySobOptions: this.salarySobOptions
});
@ -181,15 +186,14 @@ export class payrollStore {
// 工资单模板-获取工资单模板显示设置表单
@action
getPayrollShowForm = (id = "") => {
let params = {
id
};
const params = { id };
const salaryTemplateShowSetStorage = window.localStorage.getItem("salaryTemplateShowSet") || "{}";
API.getPayrollShowForm(params).then(res => {
if (res.status) {
if (id !== "") {
this.salaryItemSet = res.data.salaryTemplateSalaryItemSet;
}
this.salaryTemplateShowSet = res.data.salaryTemplateShowSet.data;
this.salaryTemplateShowSet = { ...res.data.salaryTemplateShowSet.data, ...JSON.parse(salaryTemplateShowSetStorage) };
} else {
message.error(res.errormsg || "获取失败");
}
@ -215,23 +219,15 @@ export class payrollStore {
@action
initShowSettingForm = (id = "") => {
this.getPayrollShowForm(id);
if (id == "") {
if (id === "") {
this.getPayrollItemList(this.templateBaseData.salarySob);
}
};
// 校验显示设置表单
validateSalaryTemplateShowSet = () => {
if (!notNull(this.salaryTemplateShowSet.theme)) {
message.warning("工资单主题不能为空");
return false;
}
return true;
};
// 拼装保存参数
convertParams = () => {
let params = { ...this.templateBaseData, ...this.salaryTemplateShowSet };
params.replenishRule = (!params.replenishRule || params.reissueRule === "0") ? "ALL" : params.replenishRule;
params.salarySobId = params.salarySob;
params.emailStatus = params.emailStatus ? params.emailStatus : false;
params.msgStatus = params.msgStatus ? params.msgStatus : false;
@ -241,18 +237,16 @@ export class payrollStore {
params.salaryItemZeroStatus = params.salaryItemZeroStatus
? params.salaryItemZeroStatus
: false;
params.salaryItemSetting = this.salaryItemSet;
params.salaryItemSetting = toJS(this.salaryItemSet);
params.replenishSalaryItemSetting = toJS(this.replenishSalaryTemplateSalaryItemSet);
return params;
};
// 工资单模板-新建工资单模板
@action
fetchSavePayroll = () => {
if (!this.validateSalaryTemplateShowSet()) {
return false;
}
let params = this.convertParams();
return new Promise((resolve, reject) => {
const params = this.convertParams();
API.savePayroll(params).then(res => {
if (res.status) {
message.success("保存成功");
@ -262,19 +256,16 @@ export class payrollStore {
message.error(res.errormsg || "保存失败");
reject();
}
});
}).catch(() => reject());
});
};
// 工资单模板-更新工资单模板
@action
fetchUpdatePayroll = id => {
if (!this.validateSalaryTemplateShowSet()) {
return false;
}
let params = this.convertParams();
params.id = id;
return new Promise((resolve, reject) => {
let params = this.convertParams();
params.id = id;
API.updatePayroll(params).then(res => {
if (res.status) {
message.success("保存成功");