工资单模板修改
This commit is contained in:
parent
4825d0cd49
commit
593140b54f
|
|
@ -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());
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 &&
|
||||
|
|
|
|||
|
|
@ -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 }}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
}
|
||||
|
||||
.showSettingForm {
|
||||
padding: 10px 20px;
|
||||
|
||||
.settingItemWrapper {
|
||||
.itemTitle {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
|
|
@ -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("保存成功");
|
||||
|
|
|
|||
Loading…
Reference in New Issue