From 7e30f73069c8fc8035720ed13e833436593ce450 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, 17 Oct 2023 17:17:01 +0800 Subject: [PATCH] =?UTF-8?q?feature/2.9.42310.01-=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95=E5=8F=91=E6=94=BE=E9=A1=B5=E9=9D=A2=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payrollRelease/components/conditions.js | 87 +++++++++- .../components/payrollTempBaseSet/index.js | 67 +++++++- .../payrollTempNormalSet/formRender.js | 53 ++++++ .../components/payrollTempNormalSet/index.js | 152 ++++++++++++++++++ .../updatePayrollTemplateSlide/index.js | 39 ++++- .../hrmSalary/pages/payrollRelease/index.less | 24 +++ pc4mobx/hrmSalary/stores/payroll.js | 5 + 7 files changed, 416 insertions(+), 11 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js index 6ff6e05e..61ed577f 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js @@ -25,7 +25,7 @@ export const tempBaseSetConditions = [ { colSpan: 1, conditionType: "SELECT", - domkey: ["salarySobId"], + domkey: ["salarySob"], fieldcol: 14, label: "薪资账套", lanId: 538010, @@ -186,3 +186,88 @@ export const tempBaseSetFbConditions = [ } ]; +//正常工资单模板主题设置 +export const tempNormalSetConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["theme"], + fieldcol: 10, + label: "工资单标题", + lanId: 543588, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "UPLOAD", + domkey: ["background"], + fieldcol: 10, + label: "工资单图片", + lanId: 543589, + labelcol: 6, + value: "", + showClearAll: false, + listType: "img", + limitType: "jpg,jpeg,png", + uploadUrl: "/api/doc/upload/uploadFile", + category: "string", + maxFilesNumber: 1, + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["textContent"], + fieldcol: 14, + label: "文本内容", + lanId: 20749, + labelcol: 6, + value: "", + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "SELECT", + domkey: ["textContentPosition"], + fieldcol: 14, + label: "文本内容位置", + lanId: 543590, + labelcol: 6, + options: [], + value: "", + detailtype: 3, + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["salaryItemNullStatus"], + fieldcol: 2, + label: "薪资项为空时不显示", + lanId: 543591, + labelcol: 6, + value: "", + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["salaryItemZeroStatus"], + fieldcol: 2, + label: "薪资项为0时不显示", + lanId: 543592, + labelcol: 6, + value: "", + viewAttr: 2 + } + ], + defaultshow: true, + title: "themeSet" + } +]; + diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js index 6482a04f..bcaa4073 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js @@ -5,6 +5,7 @@ * Date: 2023/10/13 */ import React, { Component } from "react"; +import { toJS } from "mobx"; import { WeaFormItem, WeaLocaleProvider, WeaTools } from "ecCom"; import { tempBaseSetConditions, tempBaseSetFbConditions } from "../conditions"; import { getSearchs } from "../../../../util"; @@ -36,6 +37,7 @@ class Index extends Component { componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible && nextProps.visible) this.getPayrollBaseForm(nextProps); if (nextProps.visible !== this.props.visible && !nextProps.visible) { + nextProps.payrollStore.setTmplDataSource({}); nextProps.payrollStore.initPayrollTempForm(); nextProps.payrollStore.initPayrollTempFeedbackForm(); } @@ -52,17 +54,22 @@ class Index extends Component { }); }; getPayrollBaseForm = (props) => { - const { tmplId: id, payrollStore: { payrollTempForm, payrollTempFeedbackForm } } = props; - getPayrollBaseForm({ id }).then(({ status, data }) => { + const { tmplId: id, payrollStore: { payrollTempForm, payrollTempFeedbackForm, tmplDataSource } } = props; + getPayrollBaseForm({ id }).then(async ({ status, data }) => { if (status) { - const { salaryTemplateBaseSet: { salarySobOptions } } = data; + const { salaryTemplateBaseSet: { salarySobOptions, data: result } } = data; + const { + autoSendDayOfMonth = "1", autoSendTimeOfDay = "09:00", autoSendCycleType = "1", + ...fieldsEchoData + } = { ...result, ...toJS(tmplDataSource) }; + const { data: replenishRuleOptions } = (fieldsEchoData["reissueRule"] === "1" && fieldsEchoData["salarySob"]) ? await getReplenishRuleSetOptions({ salarySobId: fieldsEchoData["salarySob"] }) : []; this.setState({ conditions: _.map(tempBaseSetConditions, it => { if (it.title === "baseSet") { return { ...it, title: getLabel(82743, "基础信息"), items: _.map(it.items, o => { - if (getKey(o) === "salarySobId") { + if (getKey(o) === "salarySob") { return { ...o, options: _.map(salarySobOptions, g => ({ key: g.id.toString(), showname: g.name })) }; @@ -73,6 +80,11 @@ class Index extends Component { { key: "1", showname: getLabel(542696, "按规则") } ] }; + } else if (getKey(o) === "replenishRule") { + return { + ...o, hide: (_.isNil(fieldsEchoData["reissueRule"]) || fieldsEchoData["reissueRule"] === "0"), + options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })) + }; } return { ...o }; }) @@ -100,8 +112,14 @@ class Index extends Component { if (getKey(o) === "autoAckDays") { return { ...o, + hide: _.isNil(fieldsEchoData["ackFeedbackStatus"]) ? o.hide : !fieldsEchoData["ackFeedbackStatus"], helpfulTitle: getLabel(544273, "开启后,还需在计划任务中配置定时任务,执行自动确认任务;邮箱端查看工资单暂不支持确认及反馈;") }; + } else if (getKey(o) === "feedbackUrl") { + return { + ...o, + hide: _.isNil(fieldsEchoData["ackFeedbackStatus"]) ? o.hide : !fieldsEchoData["ackFeedbackStatus"] + }; } return { ...o }; }) @@ -111,6 +129,41 @@ class Index extends Component { }, () => { payrollTempForm.initFormFields(this.state.conditions); payrollTempFeedbackForm.initFormFields(this.state.fbConditions); + //字段回显 + const tempBaseSetDomkeys = _.reduce(tempBaseSetConditions, (pre, cur) => ([...pre, ..._.map(cur.items, o => getKey(o))]), []), + tempBaseSetFbDomkeys = _.reduce(tempBaseSetFbConditions, (pre, cur) => ([...pre, ..._.map(cur.items, o => getKey(o))]), []); + _.map(tempBaseSetDomkeys, it => { + switch (it) { + case "msgStatus": + payrollTempForm.updateFields({ [it]: _.isNil(fieldsEchoData[it]) ? "1" : fieldsEchoData[it] ? "1" : "0" }); + break; + case "reissueRule": + payrollTempForm.updateFields({ [it]: fieldsEchoData[it] ? fieldsEchoData[it] : "0" }); + break; + case "emailStatus": + case "autoSendStatus": + payrollTempForm.updateFields({ [it]: fieldsEchoData[it] ? "1" : "0" }); + break; + default: + payrollTempForm.updateFields({ [it]: fieldsEchoData[it] ? fieldsEchoData[it].toString() : "" }); + break; + } + }); + _.map(tempBaseSetFbDomkeys, it => { + if (it === "ackFeedbackStatus") { + payrollTempFeedbackForm.updateFields({ [it]: fieldsEchoData[it] ? "1" : "0" }); + } else { + payrollTempFeedbackForm.updateFields({ [it]: fieldsEchoData[it] ? fieldsEchoData[it].toString() : "" }); + } + }); + this.setState({ + formData: { + ...this.state.formData, + autoSendDayOfMonth: !_.isNil(autoSendDayOfMonth) ? autoSendDayOfMonth : "1", + autoSendTimeOfDay: !_.isNil(autoSendTimeOfDay) ? autoSendTimeOfDay : "09:00", + autoSendCycleType: !_.isNil(autoSendCycleType) ? autoSendCycleType : "1" + } + }); this.forceUpdate(); }); } @@ -118,7 +171,7 @@ class Index extends Component { }; handleChange = async (params) => { const { payrollStore: { payrollTempForm } } = this.props; - const key = _.keys(params)[0], salarySobId = payrollTempForm.getFormParams().salarySobId, + const key = _.keys(params)[0], salarySobId = payrollTempForm.getFormParams().salarySob, reissueRule = payrollTempForm.getFormParams().reissueRule; const { data: replenishRuleOptions } = (reissueRule === "1" && salarySobId) ? await getReplenishRuleSetOptions({ salarySobId }) : []; if (key === "reissueRule") { @@ -145,7 +198,7 @@ class Index extends Component { payrollTempForm.initFormFields(this.state.conditions); this.resetRequiredForm(); }); - } else if (key === "salarySobId") { + } else if (key === "salarySob") { this.setState({ conditions: _.map(this.state.conditions, it => { if (it.title === getLabel(82743, "基础信息")) { @@ -166,7 +219,7 @@ class Index extends Component { }) }, () => { payrollTempForm.initFormFields(this.state.conditions); - const salarySob = payrollTempForm.getFormDatas().salarySobId; + const salarySob = payrollTempForm.getFormDatas().salarySob; payrollTempForm.updateFields({ name: salarySob.valueSpan, replenishName: salarySob.valueSpan + "-补发工资单" diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js new file mode 100644 index 00000000..ae8d0af8 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js @@ -0,0 +1,53 @@ +import { WeaSwitch } from "comsMobx"; +import { WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom"; + +const getLabel = WeaLocaleProvider.getLabel; +const getKey = WeaTools.getKey; +export const payrollTempNormalSetForm = (form, condition, col, isCenter, onChange = () => void (0), insertVar = () => void (0)) => { + const { isFormInit } = form; + const formParams = form.getFormParams(); + let group = []; + isFormInit && condition && condition.map(c => { + let items = []; + c.items.map(fields => { + items.push({ + com: ( + + + { + getKey(fields) === "theme" && +
+ {getLabel(500143, "插入变量")}: + insertVar("${companyName}")}>{getLabel(1976, "公司名称")} + insertVar("${salaryMonth}")}>{getLabel(542604, "薪资所属月")} +
+ } +
), + colSpan: 1, + hide: fields.hide + }); + }); + group.push( + ); + }); + return group; +}; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js new file mode 100644 index 00000000..5b77dbbd --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js @@ -0,0 +1,152 @@ +/* + * Author: 黎永顺 + * name:工资单发放-重构页面正常核算工资单模板 + * Description: + * Date: 2023/10/17 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { toJS } from "mobx"; +import { WeaButtonIcon, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom"; +import { getPayrollItemList, getPayrollShowForm } from "../../../../apis/payroll"; +import { tempNormalSetConditions } from "../conditions"; +import { payrollTempNormalSetForm } from "./formRender"; +import SalaryItemSettings from "../../../payroll/stepForm/salaryItemSettings"; + +const getKey = WeaTools.getKey; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("payrollStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + conditions: [], salaryBillItemNameSet: {}, salaryItemSet: [] + }; + } + + componentDidMount() { + this.getPayrollShowForm(); + } + + componentWillUnmount() { + const { payrollStore: { initPayrollTempNormalForm } } = this.props; + initPayrollTempNormalForm(); + } + + getPayrollShowForm = () => { + const { tmplId: id, payrollStore: { payrollTempNormalForm, tmplDataSource } } = this.props; + getPayrollShowForm({ id }).then(async ({ status, data }) => { + if (status) { + const { salaryTemplateShowSet, salaryTemplateSalaryItemSet: salaryItemSet, salaryBillItemNameSet } = data; + const { data: result } = salaryTemplateShowSet; + const { ...fieldsEchoData } = { ...result, ...toJS(tmplDataSource) }; + this.setState({ + conditions: _.map(tempNormalSetConditions, it => { + if (it.title === "themeSet") { + return { + ...it, title: getLabel(543587, "主题及其他设置"), + items: _.map(it.items, o => { + if (getKey(o) === "textContentPosition") { + return { + ...o, label: getLabel(o.lanId, o.label), + options: [ + { key: "1", showname: getLabel(542697, "薪资项目前") }, + { key: "2", showname: getLabel(542698, "薪资项目后") } + ] + }; + } else if (getKey(o) === "background") { + return { + ...o, title: getLabel(20001, "上传图片") + }; + } + return { ...o, label: getLabel(o.lanId, o.label) }; + }) + }; + } + }), + salaryBillItemNameSet, salaryItemSet + }, () => { + payrollTempNormalForm.initFormFields(this.state.conditions); + //字段回显 + const tempBaseSetDomkeys = _.reduce(tempNormalSetConditions, (pre, cur) => ([...pre, ..._.map(cur.items, o => getKey(o))]), []); + _.map(tempBaseSetDomkeys, it => { + switch (it) { + case "salaryItemZeroStatus": + case "salaryItemNullStatus": + payrollTempNormalForm.updateFields({ [it]: fieldsEchoData[it] ? "1" : "0" }); + break; + case "background": + console.log(81, fieldsEchoData); + break; + default: + payrollTempNormalForm.updateFields({ [it]: fieldsEchoData[it] ? fieldsEchoData[it].toString() : "" }); + break; + } + }); + !id && this.getPayrollItemList(); + }); + } + }); + }; + getPayrollItemList = () => { + const { salaryItemSet } = this.state; + const { payrollStore: { tmplDataSource } } = this.props; + getPayrollItemList({ salarySobId: toJS(tmplDataSource).salarySob }).then(({ status, data }) => { + if (status && _.isEmpty(salaryItemSet)) { + this.setState({ salaryItemSet: data }); + } + }); + }; + handleChange = (params) => { + const { payrollStore: { payrollTempNormalForm, setTmplDataSource, tmplDataSource } } = this.props; + const key = _.keys(params)[0]; + if (key === "background") { + const background = payrollTempNormalForm.getFormDatas().background.valueObj[0].acclink; + setTmplDataSource({ ...toJS(tmplDataSource), background }); + } + }; + handleInsertVar = (themeVar) => { + const { payrollStore: { payrollTempNormalForm } } = this.props; + const theme = payrollTempNormalForm.getFormParams().theme; + payrollTempNormalForm.updateFields({ theme: `${theme}${themeVar}` }); + }; + handleChangeSalaryItem = (resultSet) => { + console.log(resultSet); + }; + handleChangeSalaryItemShowNamesetting = (itemShowNamesetting) => { + console.log(itemShowNamesetting); + }; + + render() { + const { conditions, salaryBillItemNameSet, salaryItemSet } = this.state; + const { payrollStore: { payrollTempNormalForm, tmplDataSource } } = this.props; + return ( + + {!_.isEmpty(conditions) && payrollTempNormalSetForm(payrollTempNormalForm, conditions, 1, false, this.handleChange, this.handleInsertVar)} + + {getLabel(543593, "薪资项目设置")} + this.salaryItemSettingsRef.handleOpenModal(toJS(tmplDataSource).salarySob, getLabel(543594, "添加分类"))}/> + + } + items={[]} needTigger showGroup + > + this.salaryItemSettingsRef = dom} + dataSource={salaryItemSet} salaryTemplateId={this.props.tmplId || ""} + onChangeSalaryItem={this.handleChangeSalaryItem} + onChangeSalaryItemShowNamesetting={this.handleChangeSalaryItemShowNamesetting} + salarySobId={toJS(tmplDataSource).salarySob} + isReplenish={false} salaryBillItemNameSet={salaryBillItemNameSet} + /> + + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index 87560bbe..3ab5f52c 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -5,10 +5,12 @@ * Date: 2023/10/13 */ import React, { Component } from "react"; +import { toJS } from "mobx"; import { inject, observer } from "mobx-react"; import { WeaLocaleProvider, WeaSlideModal, WeaSteps } from "ecCom"; import { Button, message } from "antd"; import PayrollTempBaseSet from "../payrollTempBaseSet"; +import PayrollTempNormalSet from "../payrollTempNormalSet"; import { savePayroll } from "../../../../apis/payroll"; const Step = WeaSteps.Step; @@ -28,7 +30,8 @@ class Index extends Component { save = async () => { const { payrollStore: { - payrollTempForm, payrollTempFeedbackForm, initPayrollTempForm, initPayrollTempFeedbackForm + payrollTempForm, payrollTempFeedbackForm, initPayrollTempForm, + initPayrollTempFeedbackForm, setTmplDataSource, tmplDataSource } } = this.props; const [tempFormm, fbForm] = await Promise.all([payrollTempForm.validateForm(), payrollTempFeedbackForm.validateForm()]); @@ -37,7 +40,7 @@ class Index extends Component { { ackFeedbackStatus, autoAckDays, ...extraFb } = payrollTempFeedbackForm.getFormParams(), { formData } = this.tmpBaseSetRef.state; const payload = { - ...extraFb, ...formData, ...extraBs, + ...toJS(tmplDataSource), ...extraFb, ...formData, ...extraBs, ackFeedbackStatus: ackFeedbackStatus === "1", autoSendStatus: autoSendStatus === "1", emailStatus: emailStatus === "1", @@ -48,6 +51,7 @@ class Index extends Component { this.setState({ current: this.state.current + 1 }, () => { + setTmplDataSource(payload); initPayrollTempForm(); initPayrollTempFeedbackForm(); }); @@ -57,6 +61,32 @@ class Index extends Component { this.forceUpdate(); } }; + normalSave = () => { + const { payrollStore: { payrollTempNormalForm, setTmplDataSource, tmplDataSource } } = this.props; + payrollTempNormalForm.validateForm().then(f => { + if (f.isValid) { + const { + salaryItemNullStatus, + salaryItemZeroStatus, + background, + ...extra + } = payrollTempNormalForm.getFormParams(); + const payload = { + ...toJS(tmplDataSource), ...extra, + salaryItemZeroStatus: salaryItemZeroStatus === "1", + salaryItemNullStatus: salaryItemNullStatus === "1" + }; + this.setState({ + current: this.state.current + 1 + }, () => { + setTmplDataSource(payload); + }); + } else { + f.showErrors(); + this.forceUpdate(); + } + }); + }; savePayroll = (payload) => { this.setState({ loading: true }); savePayroll(payload).then(({ status, errormsg }) => { @@ -83,7 +113,7 @@ class Index extends Component { - + : @@ -102,6 +132,9 @@ class Index extends Component { case 0: dom = this.tmpBaseSetRef = dom}/>; break; + case 1: + dom = this.tmpNormalSetRef = dom}/>; + break; default: break; } diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less index cbab3ea2..73c92baa 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.less +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -137,6 +137,30 @@ } } } + + .sft-variables { + display: flex; + align-items: center; + margin-left: 10px; + position: absolute; + top: 25%; + right: -208px; + margin-top: -2px; + + .sftv-item { + margin-right: 8px; + padding: 0; + color: #5d9cec; + background-color: transparent; + } + } + + .salarySetTitle { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + } } } } diff --git a/pc4mobx/hrmSalary/stores/payroll.js b/pc4mobx/hrmSalary/stores/payroll.js index 3f2abafb..fa5a56e1 100644 --- a/pc4mobx/hrmSalary/stores/payroll.js +++ b/pc4mobx/hrmSalary/stores/payroll.js @@ -16,6 +16,11 @@ export class payrollStore { @action initPayrollTempForm = () => this.payrollTempForm = new WeaForm(); @observable payrollTempFeedbackForm = new WeaForm(); //新建编辑工资单模板-工资单确认反馈设置form @action initPayrollTempFeedbackForm = () => this.payrollTempFeedbackForm = new WeaForm(); + @observable tmplDataSource = {}; //工资单模板数据 + @action setTmplDataSource = (v) => this.tmplDataSource = v;//设置工资单模板数据 + + @observable payrollTempNormalForm = new WeaForm(); //新建编辑工资单模板-主题设置form + @action initPayrollTempNormalForm = () => this.payrollTempNormalForm = new WeaForm(); @observable tableStore = new TableStore(); // new table