From 4825d0cd494da84999d6417e891cbe388a0d3e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Tue, 6 Dec 2022 15:04:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/stepSlide/stepSlideHeader.js | 51 ++++++++++--------- pc4mobx/hrmSalary/pages/payroll/index.js | 42 ++++++++------- .../pages/payroll/stepForm/baseInformForm.js | 39 ++++++++++++++ pc4mobx/hrmSalary/stores/payroll.js | 19 ++++--- 4 files changed, 98 insertions(+), 53 deletions(-) diff --git a/pc4mobx/hrmSalary/components/stepSlide/stepSlideHeader.js b/pc4mobx/hrmSalary/components/stepSlide/stepSlideHeader.js index 4a4918d9..35d4ac22 100644 --- a/pc4mobx/hrmSalary/components/stepSlide/stepSlideHeader.js +++ b/pc4mobx/hrmSalary/components/stepSlide/stepSlideHeader.js @@ -1,28 +1,29 @@ -import React from 'react'; -import { WeaSteps } from 'ecCom' +import React from "react"; +import { WeaSteps } from "ecCom"; +import "./index.less"; + const Step = WeaSteps.Step; -import "./index.less" export default class StepSlideHeader extends React.Component { - render() { - return ( -
-
- - { - this.props.steps && this.props.steps.map(item => - ( - - ) - ) - } - -
-
- {this.props.children} -
-
- - ) - } -} \ No newline at end of file + render() { + return ( +
+
+ + { + this.props.steps && this.props.steps.map(item => + ( + + ) + ) + } + +
+
+ {this.props.children} +
+
+ + ); + } +} diff --git a/pc4mobx/hrmSalary/pages/payroll/index.js b/pc4mobx/hrmSalary/pages/payroll/index.js index 83a1c169..be4f500c 100644 --- a/pc4mobx/hrmSalary/pages/payroll/index.js +++ b/pc4mobx/hrmSalary/pages/payroll/index.js @@ -278,7 +278,7 @@ export default class Payroll extends React.Component { }]; const renderRightOperation = () => { - if (this.state.selectedKey == "0") { + if (this.state.selectedKey === "0") { return
; - } else if (this.state.selectedKey == "1") { + } else if (this.state.selectedKey === "1") { return (
{ @@ -354,12 +354,7 @@ export default class Payroll extends React.Component { ); } }; - - const steps = [ - "基础设置", - "显示设置" - ]; - + const steps = ["基础设置", "正常核算工资单模板", "补发工资单模版"]; const validateStep1 = () => { const { payrollStore: { templateBaseData } } = this.props; if (!notNull(templateBaseData.name)) { @@ -408,7 +403,7 @@ export default class Payroll extends React.Component { }} /> { - this.state.selectedKey == 0 && + this.state.selectedKey === "0" && { this.handleTemplateListEdit(record); @@ -424,7 +419,7 @@ export default class Payroll extends React.Component { } { - this.state.selectedKey == 1 && + this.state.selectedKey === "1" && { this.handleTemplateListEdit(record); @@ -447,32 +442,43 @@ export default class Payroll extends React.Component { this.setState({ stepSlideVisible: false }); }} customOperate={ - currentStep == 0 ? [ + currentStep === 0 ? [ - ] : currentStep == 1 ? [ + ] : currentStep === 1 ? [ , , + }}>下一步, - ] : [] + ] : currentStep === 2 ? [ + , + , + + ] : + [] } title="新建工资单模板" content={
{ - currentStep == 0 && { - this.handleBaseInfoChange(request); - }}/> + currentStep === 0 && this.handleBaseInfoChange(request)}/> } { - currentStep == 1 && + currentStep === 1 && + } + { + currentStep === 2 &&
补发工资单模版
}
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js index dca4447e..3878d5a9 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js @@ -75,6 +75,45 @@ export default class BaseInformForm extends React.Component { onChange={value => this.hanldeChange({ name: value })} /> + + this.hanldeChange({ name: value })} + /> + + + { + }} + /> + + + { + }} + /> + - (this.templateBaseData = templateBaseData); + setTemplateBaseData = templateBaseData => (this.templateBaseData = templateBaseData); // 显示设置基础表单 @action @@ -160,12 +159,12 @@ export class payrollStore { this.salarySobOptions = response.salarySobOptions ? response.salarySobOptions.map(item => { - let result = {}; - result.showname = item.name; - result.key = item.id + ""; - result.selected = false; - return result; - }) + let result = {}; + result.showname = item.name; + result.key = item.id + ""; + result.selected = false; + return result; + }) : []; resolve({ templateBaseData: this.templateBaseData, @@ -453,7 +452,7 @@ export class payrollStore { API.exportDetailList(params); }; // 工资单发放-导出-工资单发放列表 - + @action exportPayroll = (params = {}) => { API.exportPayroll(params); From 593140b54f8c6db1c62333163ae3015584645a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Wed, 7 Dec 2022 14:15:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/apis/payroll.js | 23 +++ pc4mobx/hrmSalary/pages/payroll/index.js | 178 ++++++++++++------ .../pages/payroll/stepForm/baseInformForm.js | 80 +++++--- .../pages/payroll/stepForm/index.less | 1 - .../pages/payroll/stepForm/showSettingForm.js | 6 +- .../payroll/stepForm/tmplateSettingForm.js | 121 ++++++++++++ .../pages/salaryItem/formalFormModal.js | 10 +- pc4mobx/hrmSalary/single.js | 35 ++-- pc4mobx/hrmSalary/stores/payroll.js | 45 ++--- 9 files changed, 359 insertions(+), 140 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js diff --git a/pc4mobx/hrmSalary/apis/payroll.js b/pc4mobx/hrmSalary/apis/payroll.js index 954050e9..1adf0868 100644 --- a/pc4mobx/hrmSalary/apis/payroll.js +++ b/pc4mobx/hrmSalary/apis/payroll.js @@ -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()); +}; diff --git a/pc4mobx/hrmSalary/pages/payroll/index.js b/pc4mobx/hrmSalary/pages/payroll/index.js index be4f500c..1e0e5cb6 100644 --- a/pc4mobx/hrmSalary/pages/payroll/index.js +++ b/pc4mobx/hrmSalary/pages/payroll/index.js @@ -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(); }}>下一步 ] : currentStep === 1 ? [ - , - , - , + ] : currentStep === 2 ? [ - , - , - + ] : [] } @@ -478,10 +522,9 @@ export default class Payroll extends React.Component { currentStep === 1 && } { - currentStep === 2 &&
补发工资单模版
+ currentStep === 2 && }
- } /> } @@ -494,50 +537,61 @@ export default class Payroll extends React.Component { top={0} width={50} height={100} - direction={"right"} - measure={"%"} + direction="right" + measure="%" title={ { this.handleUpdateSave(); }}>保存 - ] : selectedTab == 1 ? [ + ] : selectedTab === 1 ? [ , - - ] : [] - } - subItemChange={ - (selectedTab) => { - this.setState({ selectedTab }); - } + }}>保存, + + ] : [ + + ] } + subItemChange={(selectedTab) => { + this.setState({ selectedTab: Number(selectedTab) }, () => { + if (this.state.selectedTab === 2) this.getReplenishForm(true, { id: this.state.templateCurrentId }); + }); + }} /> } content={
{ - selectedTab == 0 && - { - this.handleBaseInfoChange(request); - }}/> + selectedTab === 0 && + this.handleBaseInfoChange(request)}/> } { - selectedTab == 1 && + selectedTab === 1 && + } + { + selectedTab === 2 && }
} - 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 && diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js index 3878d5a9..8a1bd83d 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js @@ -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 ( - + this.hanldeChange({ name: value })} + onChange={value => this.hanldeChange({ replenishName: value })} /> { - }} - /> - - - { - }} + onChange={value => this.hanldeChange({ reissueRule: value })} /> + { + reissueRule !== "0" && + + this.hanldeChange({ replenishRule: value })} + /> + + } { 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 (
diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js new file mode 100644 index 00000000..af2ea5de --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/tmplateSettingForm.js @@ -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 ( +
+ + { + !_.isEmpty(toJS(replenishSalaryTemplateSalaryItemSet)) && + replenishSalaryTemplateSalaryItemSet.map((group, index) => ( +
+
{group.groupName} + { + index < replenishSalaryTemplateSalaryItemSet.length - 1 && + { + this.handleDownClick(index); + }} + /> + } + { + index > 0 && + { + this.handleUpClick(index); + }} + /> + } + { + this.handleDeleteClick(index); + }} + /> +
+
+ {group.items.map(item => ( + {item.name} + { + this.handleDeleteItem(group, item); + }} + /> + + ))} +
+
+ )) + } +
+
+ ); + } +} diff --git a/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js b/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js index 3ddf0cad..aed71b03 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/formalFormModal.js @@ -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, diff --git a/pc4mobx/hrmSalary/single.js b/pc4mobx/hrmSalary/single.js index 396ff1e7..6de29eb9 100644 --- a/pc4mobx/hrmSalary/single.js +++ b/pc4mobx/hrmSalary/single.js @@ -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 ( - - - - { Module.Route } + + + + {Module.Route} - ) + ); } } -ReactDOM.render(, document.getElementById('container')); +ReactDOM.render(, document.getElementById("container")); diff --git a/pc4mobx/hrmSalary/stores/payroll.js b/pc4mobx/hrmSalary/stores/payroll.js index 132441ce..5f1ee444 100644 --- a/pc4mobx/hrmSalary/stores/payroll.js +++ b/pc4mobx/hrmSalary/stores/payroll.js @@ -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("保存成功"); From 7627c4f6a470aea3a3c7a0cf1c70665c8cec99e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Wed, 7 Dec 2022 15:14:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=B7=BB=E5=8A=A0=E8=A1=A5=E5=8F=91=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/payroll/stepForm/baseInformForm.js | 5 ++-- .../pages/payroll/stepForm/showSettingForm.js | 30 +++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js index 8a1bd83d..f29e2f53 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js @@ -42,6 +42,7 @@ export default class BaseInformForm extends React.Component { } ); }); + JSON.parse(templateBaseData).salarySob && this.getReplenishRuleSetOptions({ salarySobId: JSON.parse(templateBaseData).salarySob }); } hanldeChange = (params) => { @@ -56,9 +57,9 @@ export default class BaseInformForm extends React.Component { }); this.props.onChange && this.props.onChange(request); }; - getReplenishRuleSetOptions = () => { + getReplenishRuleSetOptions = (params = {}) => { const { request } = this.state; - getReplenishRuleSetOptions({ salarySobId: request.salarySob }).then(({ status, data }) => { + getReplenishRuleSetOptions({ salarySobId: request.salarySob, ...params }).then(({ status, data }) => { if (status && !_.isEmpty(data)) { this.setState({ replenishRuleOptions: _.map(data, it => ({ key: it.id, showname: it.content })) diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js index 9dea9c85..15e21c20 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/showSettingForm.js @@ -17,22 +17,22 @@ export default class ShowSettingForm extends React.Component { } // form 字段变化时的回调 - handleChange(params) { + handleChange = (params) => { const { payrollStore: { salaryTemplateShowSet, setSalaryTemplateShowSet } } = this.props; let request = { ...salaryTemplateShowSet, ...params }; setSalaryTemplateShowSet(request); - } + }; // 工资单主题 插入变量 - handleThemeNameCllck(param) { + handleThemeNameCllck = (param) => { const { payrollStore } = this.props; const { salaryTemplateShowSet, setSalaryTemplateShowSet } = payrollStore; let request = { ...salaryTemplateShowSet }; request.theme = (request.theme ? request.theme : "") + param; setSalaryTemplateShowSet(request); - } + }; - handleDownClick(index) { + handleDownClick = (index) => { const { payrollStore: { salaryItemSet, setSalaryItemSet } } = this.props; let downItem = salaryItemSet[index + 1]; let thisItem = salaryItemSet[index]; @@ -40,9 +40,9 @@ export default class ShowSettingForm extends React.Component { resultSet[index] = downItem; resultSet[index + 1] = thisItem; setSalaryItemSet(resultSet); - } + }; - handleUpClick(index) { + handleUpClick = (index) => { const { payrollStore: { salaryItemSet, setSalaryItemSet } } = this.props; let upItem = salaryItemSet[index - 1]; let thisItem = salaryItemSet[index]; @@ -50,9 +50,9 @@ export default class ShowSettingForm extends React.Component { resultSet[index] = upItem; resultSet[index - 1] = thisItem; setSalaryItemSet(resultSet); - } + }; - handleDeleteItem(group, item) { + handleDeleteItem = (group, item) => { const { payrollStore: { salaryItemSet, setSalaryItemSet } } = this.props; let resultSalaryItemSet = [...salaryItemSet]; resultSalaryItemSet.map(sourceGroup => { @@ -65,9 +65,9 @@ export default class ShowSettingForm extends React.Component { } }); setSalaryItemSet(resultSalaryItemSet); - } + }; - handleDeleteClick(index) { + handleDeleteClick = (index) => { Modal.confirm({ title: "信息确认", content: "确认删除", @@ -76,15 +76,13 @@ export default class ShowSettingForm extends React.Component { let resultSalaryItemSet = [...salaryItemSet]; resultSalaryItemSet.splice(index, 1); setSalaryItemSet(resultSalaryItemSet); - }, - onCancel: () => { } }); - } + }; render() { - const salaryTemplateShowSetStorage = window.localStorage.getItem("salaryTemplateShowSet") || "{}"; - const { payrollStore } = this.props; + const { payrollStore, id } = this.props; + const salaryTemplateShowSetStorage = id ? "{}" : window.localStorage.getItem("salaryTemplateShowSet") || "{}"; const { salaryTemplateShowSet } = payrollStore; const { salaryItemSet } = payrollStore; const {