From 02863814ba3942e815823471fadf6a3d1343d7c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Fri, 13 Oct 2023 09:17:54 +0800 Subject: [PATCH 01/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/hrmSalary/index.js | 3 +- .../components/grantTableList/index.js | 129 ++++++++++++++++++ .../components/reqQuery/grantQuery.js | 30 ++++ .../components/reqQuery/templateQuery.js | 53 +++++++ .../hrmSalary/pages/payrollRelease/index.js | 104 ++++++++++++++ .../hrmSalary/pages/payrollRelease/index.less | 33 +++++ 6 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/grantQuery.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/templateQuery.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/index.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/index.less diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index ca8f7464..2ae4df93 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -17,7 +17,8 @@ import SpecialAddDeduction from "./pages/dataAcquisition/specialAddDeduction"; import Ledger from "./pages/ledgerPage"; // import Calculate from "./pages/calculate"; import Calculate from "./pages/calculate/calculate"; //重构的薪资核算页面 -import Payroll from "./pages/payroll"; +// import Payroll from "./pages/payroll"; +import Payroll from "./pages/payrollRelease";//重构的工资单发放页面 import PayrollGrant from "./pages/payroll/payrollGrant"; import PayrollDetail from "./pages/payroll/payrollDetail"; import Declare from "./pages/declare"; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js new file mode 100644 index 00000000..0866b9d8 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js @@ -0,0 +1,129 @@ +/* + * Author: 黎永顺 + * name: 工资单发放重构-工资单发放列表 + * Description: + * Date: 2023/10/12 + */ +import React, { Component } from "react"; +import { WeaLocaleProvider, WeaTable } from "ecCom"; +import { Dropdown, Menu, Tag } from "antd"; +import { getPayrollList } from "../../../../apis/payroll"; +import moment from "moment"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, columns: [], dataSource: [], + pageInfo: { current: 1, pageSize: 10, total: 0 } + }; + } + + componentDidMount() { + this.getPayrollList(this.props); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.isRefresh !== this.props.isRefresh) this.getPayrollList(nextProps); + } + + getPayrollList = (props) => { + const { pageInfo } = this.state; + const { queryParams } = props; + const { dateRange: salaryYearMonth } = queryParams; + const params = { salaryYearMonth }; + const payload = { ...pageInfo, ...params }; + this.setState({ loading: true }); + getPayrollList(payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { columns, pageInfo: { pageNum, pageSize, total, list: dataSource } } = data; + this.setState({ + dataSource, pageInfo: { ...pageInfo, pageNum, pageSize, total }, + columns: _.map(_.filter(columns, it => it.column !== "acctTimes"), o => { + const { column } = o; + if (column === "salarySob") { + return { + dataIndex: o.column, title: o.text, width: o.width, + render: (text, record) => { + const { acctTimes, salaryAcctType } = record; + return
+ {text} +
+ { + salaryAcctType === 1 && + 补发 + } + {`${getLabel(15323, "第")}${acctTimes}${getLabel(18929, "次")}`} +
+
; + } + }; + } + if (column === "salaryYearMonth" || column === "lastSendTime") { + return { + dataIndex: o.column, title: o.text, width: o.width, + render: (text) => { + const time = moment(parseInt(text)).format("YYYY-MM"); + return {time}; + } + }; + } + return { dataIndex: o.column, title: o.text, width: o.width }; + }) + }); + } + }).catch(() => this.setState({ loading: false })); + }; + + render() { + const { loading, dataSource, columns, pageInfo } = this.state; + const pagination = { + ...pageInfo, + showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, + showQuickJumper: true, + showSizeChanger: true, + pageSizeOptions: ["10", "20", "50", "100"], + onShowSizeChange: (current, pageSize) => { + this.setState({ + pageInfo: { ...pageInfo, current, pageSize } + }, () => this.getPayrollList(this.props)); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => this.getPayrollList(this.props)); + } + }; + return ( + { + return + {getLabel(542702, "发放")} + {getLabel(83110, "查看详情")} + + {getLabel(543603, "更新模板")} + + } + > + + + ; + } + } + ]} + /> + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/grantQuery.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/grantQuery.js new file mode 100644 index 00000000..e92477d4 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/grantQuery.js @@ -0,0 +1,30 @@ +/* + * Author: 黎永顺 + * name: 工资单发放重构-工资单查询 + * Description: + * Date: 2023/10/12 + */ +import React, { Component } from "react"; +import { WeaHelpfulTip, WeaLocaleProvider } from "ecCom"; +import { MonthRangePicker } from "../../../reportView/components/statisticalMicroSettingsSlide"; + +const getLabel = WeaLocaleProvider.getLabel; + +class GrantQuery extends Component { + render() { + const { queryParams } = this.props; + const { dateRange } = queryParams; + return ( +
+ + this.props.onChange({ dateRange: v })}/> +
+ ); + } +} + +export default GrantQuery; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/templateQuery.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/templateQuery.js new file mode 100644 index 00000000..a33268c6 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/reqQuery/templateQuery.js @@ -0,0 +1,53 @@ +/* + * Author: 黎永顺 + * name: 工资单发放重构-工资单模板查询 + * Description: + * Date: 2023/10/12 + */ +import React, { Component } from "react"; +import { WeaInputSearch, WeaLocaleProvider, WeaSelect } from "ecCom"; +import { getPayrollTemplateLedgerList } from "../../../../apis/payroll"; + +const getLabel = WeaLocaleProvider.getLabel; + +class TemplateQuery extends Component { + constructor(props) { + super(props); + this.state = { + salarySobOptions: [] + }; + } + + componentDidMount() { + this.getPayrollTemplateLedgerList(); + } + + getPayrollTemplateLedgerList = () => { + getPayrollTemplateLedgerList().then(({ status, data }) => { + if (status) { + this.setState({ + salarySobOptions: _.map(data, o => ({ key: o.id, showname: o.content })) + }); + } + }); + }; + + render() { + const { salarySobOptions } = this.state; + const { queryParams } = this.props; + const { salarySobId, name } = queryParams; + return ( +
+ this.props.onChange({ salarySobId: v })}/> + this.props.onChange({ name: v })} + onSearch={this.props.onSearch} + /> +
+ ); + } +} + +export default TemplateQuery; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/index.js new file mode 100644 index 00000000..ce57319e --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.js @@ -0,0 +1,104 @@ +/* + * Author: 黎永顺 + * name: 工资单发放-重构页面 + * Description: + * Date: 2023/10/12 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaReqTop } from "ecCom"; +import GrantQuery from "./components/reqQuery/grantQuery"; +import TemplateQuery from "./components/reqQuery/templateQuery"; +import GrantTableList from "./components/grantTableList"; +import { Button } from "antd"; +import moment from "moment"; +import "./index.less"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("taxAgentStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + selectedKey: "grant", isRefresh: false, + queryParams: { + salarySobId: "", name: "", + dateRange: [ + moment(new Date()).startOf("year").format("YYYY-MM"), + moment(new Date()).startOf("month").format("YYYY-MM") + ] + } + }; + } + + renderReqBtns = () => { + const { taxAgentStore: { showOperateBtn } } = this.props; + const { selectedKey, isRefresh, queryParams } = this.state; + let reqBtns = []; + switch (selectedKey) { + case "grant": + reqBtns = [ + this.setState({ + isRefresh: !isRefresh, + queryParams: { ...queryParams, ...v } + })}/> + ]; + break; + case "template": + const btns = [ + , + + ]; + const queryBtns = [ + this.setState({ + isRefresh: !isRefresh, + queryParams: { ...queryParams, ...v } + })}/> + ]; + reqBtns = showOperateBtn ? [...btns, ...queryBtns] : [...queryBtns]; + break; + default: + break; + } + return reqBtns; + }; + renderContent = () => { + const { selectedKey, queryParams, isRefresh } = this.state; + let dom = null; + switch (selectedKey) { + case "grant": + dom = ; + break; + default: + break; + } + return dom; + }; + + render() { + const { selectedKey } = this.state; + const tabs = [ + { key: "grant", title: getLabel(538012, "工资单发放") }, + { key: "template", title: getLabel(543575, "工资单模板设置") }, + { key: "watermark", title: getLabel(545285, "工资单基础设置") } + ]; + return ( +
+ } iconBgcolor="#F14A2D" + onChange={key => this.setState({ selectedKey: key })} + buttons={this.renderReqBtns()} + > +
{this.renderContent()}
+
+
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less new file mode 100644 index 00000000..a49b938a --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -0,0 +1,33 @@ +.salary-payroll-main-page { + min-width: 1000px; + overflow: auto; + width: 100%; + height: 100%; + background: #f6f6f6; + + .payroll-btn-flex { + display: flex; + align-items: center; + + .wea-input-focus { + margin-top: -4px; + } + } + + .wea-new-top-req { + z-index: 0 !important; + } + + .wea-new-top-req-wapper .wea-new-top-req-title > div:last-child { + right: 16px; + } + + .salary-payroll-content { + padding: 8px 16px; + height: 100%; + + .wea-new-table { + background: #fff; + } + } +} From ab3be2c1f9d15c447e93a7328dd321f8dd926dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Fri, 13 Oct 2023 10:20:14 +0800 Subject: [PATCH 02/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/grantTableList/index.js | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js index 0866b9d8..30af75d9 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js @@ -5,6 +5,7 @@ * Date: 2023/10/12 */ import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; import { WeaLocaleProvider, WeaTable } from "ecCom"; import { Dropdown, Menu, Tag } from "antd"; import { getPayrollList } from "../../../../apis/payroll"; @@ -12,6 +13,8 @@ import moment from "moment"; const getLabel = WeaLocaleProvider.getLabel; +@inject("taxAgentStore") +@observer class Index extends Component { constructor(props) { super(props); @@ -80,6 +83,7 @@ class Index extends Component { render() { const { loading, dataSource, columns, pageInfo } = this.state; + const { taxAgentStore: { showOperateBtn } } = this.props; const pagination = { ...pageInfo, showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, @@ -106,17 +110,29 @@ class Index extends Component { { dataIndex: "operate", title: getLabel(30585, "操作"), width: 170, render: (__, record) => { + const { canSeeDetail, sendNum, sendTotal, haveBackCalc, salaryAcctType } = record; + //显示更新模板 + const showGrant = haveBackCalc === 1 && salaryAcctType === 0; return - {getLabel(542702, "发放")} - {getLabel(83110, "查看详情")} - - {getLabel(543603, "更新模板")} - - } - > - - + { + showOperateBtn && + {getLabel(542702, "发放")} + } + { + canSeeDetail && + {getLabel(83110, "查看详情")} + } + { + sendNum !== sendTotal && !showGrant && + + {getLabel(543603, "更新模板")} + + } + > + + + } ; } } From 79a3f460e75714a17f68727980df8e182846f7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Fri, 13 Oct 2023 10:57:47 +0800 Subject: [PATCH 03/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/grantTableList/index.js | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js index 30af75d9..c173c4fa 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/grantTableList/index.js @@ -80,6 +80,16 @@ class Index extends Component { } }).catch(() => this.setState({ loading: false })); }; + handleOpts = ({ key }, record) => { + const { id, templateId } = record; + switch (key) { + case "template": + console.log(templateId); + break; + default: + break; + } + }; render() { const { loading, dataSource, columns, pageInfo } = this.state; @@ -110,23 +120,27 @@ class Index extends Component { { dataIndex: "operate", title: getLabel(30585, "操作"), width: 170, render: (__, record) => { - const { canSeeDetail, sendNum, sendTotal, haveBackCalc, salaryAcctType } = record; + const { canSeeDetail, sendNum, sendTotal, haveBackCalc, salaryAcctType, id, ackFeedbackStatus } = record; //显示更新模板 const showGrant = haveBackCalc === 1 && salaryAcctType === 0; return { showOperateBtn && - {getLabel(542702, "发放")} + {getLabel(542702, "发放")} } { canSeeDetail && - {getLabel(83110, "查看详情")} + {getLabel(83110, "查看详情")} } { sendNum !== sendTotal && !showGrant && - {getLabel(543603, "更新模板")} + overlay={ this.handleOpts(e, record)}> + {getLabel(543603, "更新模板")} } > From 53ddc607b30872d6508cd9d82319e3ba3184cec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Fri, 13 Oct 2023 14:52:59 +0800 Subject: [PATCH 04/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payrollRelease/components/conditions.js | 20 +++ .../components/payrollCopyDialog/index.js | 69 ++++++++ .../payrollTemplateTableList/index.js | 157 ++++++++++++++++++ .../updatePayrollTemplateSlide/index.js | 19 +++ .../hrmSalary/pages/payrollRelease/index.js | 8 +- .../hrmSalary/pages/payrollRelease/index.less | 36 ++++ pc4mobx/hrmSalary/stores/payroll.js | 5 + 7 files changed, 312 insertions(+), 2 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollCopyDialog/index.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js new file mode 100644 index 00000000..b6e987b0 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js @@ -0,0 +1,20 @@ +export const copyConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["name"], + fieldcol: 14, + label: "工资单名称", + lanId: 536726, + labelcol: 6, + value: "", + rules: "required|string", + viewAttr: 3 + } + ], + defaultshow: true, + title: "" + } +]; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollCopyDialog/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollCopyDialog/index.js new file mode 100644 index 00000000..de4c41ff --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollCopyDialog/index.js @@ -0,0 +1,69 @@ +/* + * Author: 黎永顺 + * name:工资单发放-重构页面-工资单模板复制 + * Description: + * Date: 2023/10/13 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaDialog, WeaLocaleProvider } from "ecCom"; +import { Button, message } from "antd"; +import { getSearchs } from "../../../../util"; +import { copyConditions } from "../conditions"; +import { duplicatePayroll } from "../../../../apis/payroll"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("payrollStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + loading: false + }; + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) nextProps.payrollStore.payrollCopyForm.initFormFields(copyConditions); + if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.payrollStore.initPayrollCopyForm(); + } + + save = () => { + const { payrollStore: { payrollCopyForm }, copyId: id } = this.props; + payrollCopyForm.validateForm().then(f => { + if (f.isValid) { + const payload = payrollCopyForm.getFormParams(); + this.setState({ loading: true }); + duplicatePayroll({ id, ...payload }).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功!")); + this.props.onCancel("refresh"); + } else { + message.error(errormsg); + } + }); + } else { + f.showErrors(); + } + }).catch(() => this.setState({ loading: false })); + }; + + render() { + const { loading } = this.state; + const { payrollStore: { payrollCopyForm } } = this.props; + return ( + {getLabel(537558, "保存")} + ]} + > +
{getSearchs(payrollCopyForm, copyConditions, 1, false)}
+
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js new file mode 100644 index 00000000..2778e573 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js @@ -0,0 +1,157 @@ +/* + * Author: 黎永顺 + * name:工资单发放-重构页面-工资单模板设置 + * Description: + * Date: 2023/10/13 + */ +import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaSelect, WeaTable } from "ecCom"; +import { Dropdown, Menu, message } from "antd"; +import { changePayrollDefaultUse, getPayrollTemplateList } from "../../../../apis/payroll"; +import PayrollCopyDialog from "../payrollCopyDialog"; + +const getLabel = WeaLocaleProvider.getLabel; + +@inject("taxAgentStore") +@observer +class Index extends Component { + constructor(props) { + super(props); + this.state = { + loading: false, columns: [], dataSource: [], + pageInfo: { current: 1, pageSize: 10, total: 0 }, + copyDialog: { visible: false, title: "", copyId: "" } + }; + } + + componentDidMount() { + this.getPayrollTemplateList(this.props); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.isRefresh !== this.props.isRefresh) this.getPayrollTemplateList(nextProps); + } + + getPayrollTemplateList = (props) => { + const { pageInfo } = this.state; + const { queryParams } = props; + const { salarySobId, name } = queryParams; + const payload = { ...pageInfo, salarySobId, name }; + this.setState({ loading: true }); + getPayrollTemplateList(payload).then(({ status, data }) => { + this.setState({ loading: false }); + if (status) { + const { columns, list: dataSource, pageNum, pageSize, total } = data; + this.setState({ + dataSource, pageInfo: { ...pageInfo, pageNum, pageSize, total }, + columns: _.map(_.filter(columns, it => !!it.display), o => { + const { dataIndex } = o; + if (dataIndex === "useType") { + return { + ...o, width: "20%", render: (useType, record) => { + return this.handleSwitchUsetype(v, record)} + />; + } + }; + } + return { ...o, width: "20%" }; + }) + }); + } + }).catch(() => this.setState({ loading: false })); + }; + handleSwitchUsetype = (v, record) => { + const { id } = record; + changePayrollDefaultUse({ id }).then(({ status, errormsg }) => { + if (status) { + message.success(getLabel(30700, "操作成功!")); + this.getPayrollTemplateList(this.props); + } else { + message.error(errormsg); + } + }); + }; + handleOpts = ({ key }, record) => { + const { copyDialog } = this.state; + const { id, templateId } = record; + switch (key) { + case "edit": + console.log(templateId); + break; + case "copy": + this.setState({ + copyDialog: { ...copyDialog, visible: true, copyId: id, title: getLabel(543599, "复制工资单") } + }); + break; + case "del": + console.log(templateId); + break; + default: + break; + } + }; + + render() { + const { loading, dataSource, columns, pageInfo, copyDialog } = this.state; + const { taxAgentStore: { showOperateBtn } } = this.props; + const pagination = { + ...pageInfo, + showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, + showQuickJumper: true, + showSizeChanger: true, + pageSizeOptions: ["10", "20", "50", "100"], + onShowSizeChange: (current, pageSize) => { + this.setState({ + pageInfo: { ...pageInfo, current, pageSize } + }, () => this.getPayrollTemplateList(this.props)); + }, + onChange: current => { + this.setState({ + pageInfo: { ...pageInfo, current } + }, () => this.getPayrollTemplateList(this.props)); + } + }; + return ( + + { + const {} = record; + //显示更新模板 + return showOperateBtn ? + this.handleOpts({ key: "edit" }, record)} + style={{ marginRight: 10 }}>{getLabel(501169, "编辑")} + this.handleOpts({ key: "copy" }, record)} + >{getLabel(77, "复制")} + this.handleOpts(e, record)}> + {getLabel(535052, "删除")} + + } + > + + + : {getLabel(83110, "查看详情")}; + } + } + ]} + /> + this.setState({ + copyDialog: { ...copyDialog, visible: false, copyId: "" } + }, () => v === "refresh" && this.getPayrollTemplateList(this.props))} + /> + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js new file mode 100644 index 00000000..87c8f4ba --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -0,0 +1,19 @@ +/* + * Author: 黎永顺 + * name: 工资单发放-重构页面编辑模板 + * Description: + * Date: 2023/10/13 + */ +import React, { Component } from "react"; + +class Index extends Component { + render() { + return ( +
+ +
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/index.js index ce57319e..82293b77 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.js @@ -10,6 +10,7 @@ import { WeaLocaleProvider, WeaReqTop } from "ecCom"; import GrantQuery from "./components/reqQuery/grantQuery"; import TemplateQuery from "./components/reqQuery/templateQuery"; import GrantTableList from "./components/grantTableList"; +import PayrollTemplateTableList from "./components/payrollTemplateTableList"; import { Button } from "antd"; import moment from "moment"; import "./index.less"; @@ -53,9 +54,9 @@ class Index extends Component { ]; const queryBtns = [ - this.setState({ isRefresh: !isRefresh })} onChange={v => this.setState({ - isRefresh: !isRefresh, + isRefresh: _.keys(v)[0] === "name" ? isRefresh : !isRefresh, queryParams: { ...queryParams, ...v } })}/> ]; @@ -73,6 +74,9 @@ class Index extends Component { case "grant": dom = ; break; + case "template": + dom = ; + break; default: break; } diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less index a49b938a..68afd528 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.less +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -31,3 +31,39 @@ } } } + +.payroll-dialog-layout { + background: #f6f6f6; + + .wea-search-group { + padding: 16px; + } + + .wea-select, .ant-select-selection, .ant-select { + width: 100%; + } + + .wea-select { + display: inline-block; + position: relative; + } + + .ant-select-selection { + height: 30px; + border-radius: 0; + } + + .wea-content { + padding: 0; + + .wea-form-cell-wrapper { + background: #FFF; + border: 1px solid #e5e5e5; + border-bottom: none; + + .wea-form-cell { + border-bottom: 1px solid #e5e5e5; + } + } + } +} diff --git a/pc4mobx/hrmSalary/stores/payroll.js b/pc4mobx/hrmSalary/stores/payroll.js index 6f523cd8..c45f1fd7 100644 --- a/pc4mobx/hrmSalary/stores/payroll.js +++ b/pc4mobx/hrmSalary/stores/payroll.js @@ -9,6 +9,11 @@ import { removePropertyCondition } from "../util/response"; const { TableStore } = WeaTableNew; export class payrollStore { + //工资单重构页面 + @observable payrollCopyForm = new WeaForm(); //模板复制form + @action initPayrollCopyForm = () => this.payrollCopyForm = new WeaForm(); + + @observable tableStore = new TableStore(); // new table @observable form = new WeaForm(); // nrew 一个form @observable condition = []; // 存储后台得到的form数据 From c2efaf193b152e0919fab5d3d289e5bd97c089c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Fri, 13 Oct 2023 15:53:43 +0800 Subject: [PATCH 05/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payrollTemplateTableList/index.js | 42 ++++++++++++++----- .../hrmSalary/pages/payrollRelease/index.js | 10 ++++- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js index 2778e573..066c22bf 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js @@ -7,8 +7,8 @@ import React, { Component } from "react"; import { inject, observer } from "mobx-react"; import { WeaLocaleProvider, WeaSelect, WeaTable } from "ecCom"; -import { Dropdown, Menu, message } from "antd"; -import { changePayrollDefaultUse, getPayrollTemplateList } from "../../../../apis/payroll"; +import { Dropdown, Menu, message, Modal } from "antd"; +import { changePayrollDefaultUse, deletePayroll, getPayrollTemplateList } from "../../../../apis/payroll"; import PayrollCopyDialog from "../payrollCopyDialog"; const getLabel = WeaLocaleProvider.getLabel; @@ -19,8 +19,8 @@ class Index extends Component { constructor(props) { super(props); this.state = { - loading: false, columns: [], dataSource: [], - pageInfo: { current: 1, pageSize: 10, total: 0 }, + loading: false, columns: [], dataSource: [], selectedRowKeys: [], + pageInfo: { current: 1, pageSize: 10, total: 0 }, delLoading: false, copyDialog: { visible: false, title: "", copyId: "" } }; } @@ -74,11 +74,10 @@ class Index extends Component { }); }; handleOpts = ({ key }, record) => { - const { copyDialog } = this.state; - const { id, templateId } = record; + const { copyDialog, selectedRowKeys } = this.state; + const { id } = record; switch (key) { case "edit": - console.log(templateId); break; case "copy": this.setState({ @@ -86,7 +85,24 @@ class Index extends Component { }); break; case "del": - console.log(templateId); + Modal.confirm({ + title: getLabel(131329, "信息确认"), + content: getLabel(388758, "确认要删除吗?"), + onOk: () => { + this.setState({ delLoading: true }); + const payload = id ? [id] : selectedRowKeys; + deletePayroll(payload).then(({ status, errormsg }) => { + this.setState({ delLoading: false }); + if (status) { + message.success(getLabel(502230, "删除成功!")); + this.getPayrollTemplateList(this.props); + !_.isEmpty(selectedRowKeys) && this.setState({ selectedRowKeys: [] }); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ delLoading: false })); + } + }); break; default: break; @@ -94,8 +110,8 @@ class Index extends Component { }; render() { - const { loading, dataSource, columns, pageInfo, copyDialog } = this.state; - const { taxAgentStore: { showOperateBtn } } = this.props; + const { loading, dataSource, columns, pageInfo, copyDialog, selectedRowKeys } = this.state; + const { taxAgentStore: { showOperateBtn }, forceUpdate } = this.props; const pagination = { ...pageInfo, showTotal: total => `${getLabel(18609, "共")} ${total} ${getLabel(18256, "条")}`, @@ -113,10 +129,14 @@ class Index extends Component { }, () => this.getPayrollTemplateList(this.props)); } }; + const rowSelection = { + selectedRowKeys, + onChange: selectedRowKeys => this.setState({ selectedRowKeys }, () => forceUpdate()) + }; return ( { @@ -49,9 +50,13 @@ class Index extends Component { ]; break; case "template": + const loading = this.templateRef ? this.templateRef.wrappedInstance.state.delLoading : false; + const delDisabled = !this.templateRef || _.isEmpty(this.templateRef.wrappedInstance.state.selectedRowKeys); const btns = [ , - + ]; const queryBtns = [ this.setState({ isRefresh: !isRefresh })} @@ -75,7 +80,8 @@ class Index extends Component { dom = ; break; case "template": - dom = ; + dom = this.templateRef = dom} queryParams={queryParams} + isRefresh={isRefresh} forceUpdate={() => this.forceUpdate()}/>; break; default: break; From 3c9cf1c730268a94d5752a5eb515cda758d71208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Mon, 16 Oct 2023 11:13:44 +0800 Subject: [PATCH 06/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/payroll/stepForm/baseInformForm.js | 2 +- .../payrollRelease/components/conditions.js | 170 ++++++++++++++ .../components/payrollTempBaseSet/index.js | 222 ++++++++++++++++++ .../payrollTemplateTableList/index.js | 22 +- .../updatePayrollTemplateSlide/index.js | 63 ++++- .../hrmSalary/pages/payrollRelease/index.js | 28 ++- .../hrmSalary/pages/payrollRelease/index.less | 101 ++++++++ pc4mobx/hrmSalary/stores/payroll.js | 4 + pc4mobx/hrmSalary/util/index.js | 3 +- 9 files changed, 603 insertions(+), 12 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js diff --git a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js index b429cfb7..7d6d9fb8 100644 --- a/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js +++ b/pc4mobx/hrmSalary/pages/payroll/stepForm/baseInformForm.js @@ -263,7 +263,7 @@ export default class BaseInformForm extends React.Component { } } -const SendTimeComp = (props) => { +export const SendTimeComp = (props) => { const { value, onChange, salaryMonthOptions } = props; const { autoSendDayOfMonth, autoSendTimeOfDay, autoSendCycleType } = value; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js index b6e987b0..fbc2d3d1 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js @@ -18,3 +18,173 @@ export const copyConditions = [ title: "" } ]; + +export const tempBaseSetConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "SELECT", + domkey: ["salarySobId"], + fieldcol: 14, + label: "薪资账套", + lanId: 538010, + labelcol: 6, + options: [], + value: "", + rules: "required|string", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["name"], + fieldcol: 14, + label: "工资单模板名称", + rules: "required|string", + lanId: 543584, + labelcol: 6, + value: "", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["replenishName"], + fieldcol: 14, + label: "补发工资单模板名称", + lanId: 543585, + labelcol: 6, + rules: "required|string", + value: "", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "SELECT", + domkey: ["reissueRule"], + fieldcol: 14, + label: "补发工资单名单生成规则", + lanId: 543586, + labelcol: 6, + options: [], + value: "0", + detailtype: 3, + rules: "required|string", + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "SELECT", + domkey: ["replenishRule"], + fieldcol: 14, + label: "规则设置", + lanId: 126876, + labelcol: 6, + options: [], + value: "", + rules: "required|string", + hide: true, + viewAttr: 3 + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["description"], + fieldcol: 14, + label: "备注", + lanId: 536726, + labelcol: 6, + value: "", + viewAttr: 2 + } + ], + defaultshow: true, + title: "baseSet" + }, + { + items: [ + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["msgStatus"], + fieldcol: 2, + label: "系统消息", + lanId: 543707, + labelcol: 6, + value: "1", + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["emailStatus"], + fieldcol: 2, + label: "邮件", + lanId: 71, + labelcol: 6, + value: "0", + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["autoSendStatus"], + fieldcol: 2, + label: "定时发送", + lanId: 32028, + labelcol: 6, + value: "0", + viewAttr: 2 + } + ], + defaultshow: true, + title: "sendSet" + } +]; +export const tempBaseSetFbConditions = [ + { + items: [ + { + colSpan: 1, + conditionType: "SWITCH", + domkey: ["ackFeedbackStatus"], + fieldcol: 2, + label: "启用工资单确认", + lanId: 544094, + labelcol: 6, + value: "1", + viewAttr: 2 + }, + { + colSpan: 1, + conditionType: "INPUTNUMBER", + domkey: ["autoAckDays"], + fieldcol: 14, + label: "自动确认超时天数", + lanId: 544095, + labelcol: 6, + value: 7, + viewAttr: 3, + hide: false, + rules: "required|string" + }, + { + colSpan: 1, + conditionType: "INPUT", + domkey: ["feedbackUrl"], + fieldcol: 14, + label: "反馈流程地址", + lanId: 544096, + labelcol: 6, + value: "/", + viewAttr: 3, + hide: false, + rules: "required|string" + } + ], + defaultshow: true, + title: "feedbackSet" + } +]; + diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js new file mode 100644 index 00000000..43394b17 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js @@ -0,0 +1,222 @@ +/* + * Author: 黎永顺 + * name:工资单发放-重构页面新建编辑模板基础设置 + * Description: + * Date: 2023/10/13 + */ +import React, { Component } from "react"; +import { WeaFormItem, WeaLocaleProvider, WeaTools } from "ecCom"; +import { tempBaseSetConditions, tempBaseSetFbConditions } from "../conditions"; +import { getSearchs } from "../../../../util"; +import { getPayrollBaseForm, getReplenishRuleSetOptions } from "../../../../apis/payroll"; +import { commonEnumList } from "../../../../apis/archive"; +import { SendTimeComp } from "../../../payroll/stepForm/baseInformForm"; + +const getKey = WeaTools.getKey; +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + conditions: [], salaryMonthOptions: [], fbConditions: [], + formData: { + autoSendDayOfMonth: "", + autoSendTimeOfDay: "", + autoSendCycleType: "" + } + }; + } + + componentDidMount() { + this.commonEnumList(); + } + + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && nextProps.visible) this.getPayrollBaseForm(nextProps); + if (nextProps.visible !== this.props.visible && !nextProps.visible) { + nextProps.payrollStore.initPayrollTempForm(); + nextProps.payrollStore.initPayrollTempFeedbackForm(); + } + } + + commonEnumList = () => { + commonEnumList({ enumClass: "com.engine.salary.enums.salarysend.SalaryAutoSendCycleTypeEnum" }) + .then(({ status, data }) => { + if (status && !_.isEmpty(data)) { + this.setState({ + salaryMonthOptions: _.map(data, it => ({ key: it.value.toString(), showname: it.defaultLabel })) + }); + } + }); + }; + getPayrollBaseForm = (props) => { + const { tmplId: id, payrollStore: { payrollTempForm, payrollTempFeedbackForm } } = props; + getPayrollBaseForm({ id }).then(({ status, data }) => { + if (status) { + const { salaryTemplateBaseSet: { salarySobOptions } } = data; + this.setState({ + conditions: _.map(tempBaseSetConditions, it => { + if (it.title === "baseSet") { + return { + ...it, title: getLabel(82743, "基础信息"), + items: _.map(it.items, o => { + if (getKey(o) === "salarySobId") { + return { + ...o, options: _.map(salarySobOptions, g => ({ key: g.id.toString(), showname: g.name })) + }; + } else if (getKey(o) === "reissueRule") { + return { + ...o, options: [ + { key: "0", showname: getLabel(332, "全部") }, + { key: "1", showname: getLabel(542696, "按规则") } + ] + }; + } + return { ...o }; + }) + }; + } else if (it.title === "sendSet") { + return { + ...it, title: getLabel(18905, "发送设置"), + items: _.map(it.items, o => { + if (getKey(o) === "autoSendStatus") { + return { + ...o, + helpfulTitle: getLabel(544272, "开启后,还需在计划任务中配置定时任务,执行工资单定时发送任务;") + }; + } + return { ...o }; + }) + }; + } + }), + fbConditions: _.map(tempBaseSetFbConditions, it => { + if (it.title === "feedbackSet") { + return { + ...it, title: getLabel(544092, "工资单确认反馈设置"), + items: _.map(it.items, o => { + if (getKey(o) === "autoAckDays") { + return { + ...o, + helpfulTitle: getLabel(544273, "开启后,还需在计划任务中配置定时任务,执行自动确认任务;邮箱端查看工资单暂不支持确认及反馈;") + }; + } + return { ...o }; + }) + }; + } + }) + }, () => { + payrollTempForm.initFormFields(this.state.conditions); + payrollTempFeedbackForm.initFormFields(this.state.fbConditions); + this.forceUpdate(); + }); + } + }); + }; + handleChange = async (params) => { + const { payrollStore: { payrollTempForm } } = this.props; + const key = _.keys(params)[0], salarySobId = payrollTempForm.getFormParams().salarySobId, + reissueRule = payrollTempForm.getFormParams().reissueRule; + const { data: replenishRuleOptions } = (reissueRule === "1" && salarySobId) ? await getReplenishRuleSetOptions({ salarySobId }) : []; + if (key === "reissueRule") { + this.setState({ + conditions: _.map(this.state.conditions, it => { + if (it.title === getLabel(82743, "基础信息")) { + return { + ...it, items: _.map(it.items, o => { + if (getKey(o) === "replenishRule") { + return { + ...o, hide: params[key].value === "0", + options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })) + }; + } + return { ...o }; + }) + }; + } + return { ...it }; + }) + }, () => { + payrollTempForm.initFormFields(this.state.conditions); + }); + } else if (key === "salarySobId") { + this.setState({ + conditions: _.map(this.state.conditions, it => { + if (it.title === getLabel(82743, "基础信息")) { + return { + ...it, items: _.map(it.items, o => { + if (getKey(o) === "replenishRule") { + return { + ...o, options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })) + }; + } + return { ...o }; + }) + }; + } + return { ...it }; + }) + }, () => { + payrollTempForm.initFormFields(this.state.conditions); + const salarySob = payrollTempForm.getFormDatas().salarySobId; + payrollTempForm.updateFields({ + name: salarySob.valueSpan, + replenishName: salarySob.valueSpan + "-补发工资单" + }); + }); + } else if (key === "autoSendStatus") { + + } + this.forceUpdate(); + }; + handleFbChange = (params) => { + const { payrollStore: { payrollTempFeedbackForm } } = this.props; + const key = _.keys(params)[0]; + if (key === "ackFeedbackStatus") { + this.setState({ + fbConditions: _.map(this.state.fbConditions, it => { + if (it.title === getLabel(544092, "工资单确认反馈设置")) { + return { + ...it, items: _.map(it.items, o => { + if (getKey(o) === "autoAckDays" || getKey(o) === "feedbackUrl") { + return { + ...o, hide: params[key].value === "0" + }; + } + return { ...o }; + }) + }; + } + return { ...it }; + }) + }, () => { + payrollTempFeedbackForm.initFormFields(this.state.fbConditions); + }); + } + this.forceUpdate(); + }; + + render() { + const { conditions, fbConditions, formData, salaryMonthOptions } = this.state; + const { payrollStore: { payrollTempForm, payrollTempFeedbackForm } } = this.props; + const autoSendStatus = payrollTempForm.getFormParams().autoSendStatus; + return ( + + {!_.isEmpty(fbConditions) && getSearchs(payrollTempForm, conditions, 1, false, this.handleChange)} + { + autoSendStatus === "1" && + + + + } + {!_.isEmpty(fbConditions) && getSearchs(payrollTempFeedbackForm, fbConditions, 1, false, this.handleFbChange)} + + ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js index 066c22bf..0b3bbaad 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js @@ -10,6 +10,7 @@ import { WeaLocaleProvider, WeaSelect, WeaTable } from "ecCom"; import { Dropdown, Menu, message, Modal } from "antd"; import { changePayrollDefaultUse, deletePayroll, getPayrollTemplateList } from "../../../../apis/payroll"; import PayrollCopyDialog from "../payrollCopyDialog"; +import UpdatePayrollTemplateSlide from "../updatePayrollTemplateSlide"; const getLabel = WeaLocaleProvider.getLabel; @@ -21,7 +22,11 @@ class Index extends Component { this.state = { loading: false, columns: [], dataSource: [], selectedRowKeys: [], pageInfo: { current: 1, pageSize: 10, total: 0 }, delLoading: false, - copyDialog: { visible: false, title: "", copyId: "" } + copyDialog: { visible: false, title: "", copyId: "" }, + tmplSlide: { + visible: false, tmplId: "", top: 0, width: 792, height: 100, + measureT: "%", measureX: "px", measureY: "%" + } }; } @@ -74,10 +79,13 @@ class Index extends Component { }); }; handleOpts = ({ key }, record) => { - const { copyDialog, selectedRowKeys } = this.state; + const { copyDialog, tmplSlide, selectedRowKeys } = this.state; const { id } = record; switch (key) { case "edit": + this.setState({ + tmplSlide: { ...tmplSlide, visible: true, tmplId: id } + }); break; case "copy": this.setState({ @@ -110,7 +118,7 @@ class Index extends Component { }; render() { - const { loading, dataSource, columns, pageInfo, copyDialog, selectedRowKeys } = this.state; + const { loading, dataSource, columns, pageInfo, copyDialog, tmplSlide, selectedRowKeys } = this.state; const { taxAgentStore: { showOperateBtn }, forceUpdate } = this.props; const pagination = { ...pageInfo, @@ -164,11 +172,19 @@ class Index extends Component { } ]} /> + {/*复制工资单模板*/} this.setState({ copyDialog: { ...copyDialog, visible: false, copyId: "" } }, () => v === "refresh" && this.getPayrollTemplateList(this.props))} /> + {/* 新建编辑工资单模板*/} + this.setState({ + tmplSlide: { ...tmplSlide, visible: false, copyId: "" } + }, () => v === "refresh" && console.log(this.props))} + + /> ); } diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index 87c8f4ba..b159cc50 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -5,13 +5,70 @@ * Date: 2023/10/13 */ import React, { Component } from "react"; +import { inject, observer } from "mobx-react"; +import { WeaLocaleProvider, WeaSlideModal, WeaSteps } from "ecCom"; +import PayrollTempBaseSet from "../payrollTempBaseSet"; +import { Button } from "antd"; +const Step = WeaSteps.Step; +const getLabel = WeaLocaleProvider.getLabel; + +@inject("payrollStore") +@observer class Index extends Component { - render() { - return ( -
+ constructor(props) { + super(props); + this.state = { + current: 0 + }; + } + renderTitle = () => { + const { tmplId } = this.props; + return
+
+
+
{tmplId ? getLabel(543583, "编辑工资单模板") : getLabel(543582, "新建工资单模板")}
+
+ +
+
; + }; + renderSlideContent = () => { + const { current } = this.state; + let dom = null; + switch (current) { + case 0: + dom = ; + break; + default: + break; + } + return dom; + }; + + render() { + const { current } = this.state; + const tabs = [ + { key: 0, title: getLabel(82751, "基础设置") }, + { key: 1, title: getLabel(543579, "正常核算工资单模板") }, + { key: 2, title: getLabel(543580, "补发工资单模版") } + ]; + return ( + + + { + _.map(tabs, item => { + const { key, title } = item; + return ; + }) + } + + {this.renderSlideContent()} +
)} + /> ); } } diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/index.js index 02cfd374..a6ae287d 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.js @@ -11,6 +11,7 @@ import GrantQuery from "./components/reqQuery/grantQuery"; import TemplateQuery from "./components/reqQuery/templateQuery"; import GrantTableList from "./components/grantTableList"; import PayrollTemplateTableList from "./components/payrollTemplateTableList"; +import TemplateBaseSettings from "../payroll/templateBaseSettings"; import { Button } from "antd"; import moment from "moment"; import "./index.less"; @@ -23,7 +24,7 @@ class Index extends Component { constructor(props) { super(props); this.state = { - selectedKey: "grant", isRefresh: false, + selectedKey: "grant", isRefresh: false, baseSetSaveLoading: false, queryParams: { salarySobId: "", name: "", dateRange: [ @@ -33,6 +34,7 @@ class Index extends Component { } }; this.templateRef = null; + this.baseSetRef = null; } renderReqBtns = () => { @@ -53,7 +55,9 @@ class Index extends Component { const loading = this.templateRef ? this.templateRef.wrappedInstance.state.delLoading : false; const delDisabled = !this.templateRef || _.isEmpty(this.templateRef.wrappedInstance.state.selectedRowKeys); const btns = [ - , + , @@ -67,6 +71,13 @@ class Index extends Component { ]; reqBtns = showOperateBtn ? [...btns, ...queryBtns] : [...queryBtns]; break; + case "watermark": + const { baseSetSaveLoading } = this.state; + reqBtns = [ + + ]; + break; default: break; } @@ -83,6 +94,12 @@ class Index extends Component { dom = this.templateRef = dom} queryParams={queryParams} isRefresh={isRefresh} forceUpdate={() => this.forceUpdate()}/>; break; + case "watermark": + dom = this.baseSetRef = dom} + onChangeLoading={loading => this.setState({ baseSetSaveLoading: loading })} + />; + break; default: break; } @@ -90,7 +107,7 @@ class Index extends Component { }; render() { - const { selectedKey } = this.state; + const { selectedKey, queryParams } = this.state; const tabs = [ { key: "grant", title: getLabel(538012, "工资单发放") }, { key: "template", title: getLabel(543575, "工资单模板设置") }, @@ -101,7 +118,10 @@ class Index extends Component { } iconBgcolor="#F14A2D" - onChange={key => this.setState({ selectedKey: key })} + onChange={key => this.setState({ + selectedKey: key, + queryParams: { ...queryParams, name: "", salarySobId: "" } + })} buttons={this.renderReqBtns()} >
{this.renderContent()}
diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less index 68afd528..e628b43b 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.less +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -26,9 +26,110 @@ padding: 8px 16px; height: 100%; + & > .wea-search-group { + background: #FFF; + } + .wea-new-table { background: #fff; } + + .payroll-title-flex { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 46px 0 16px; + + .titleCol { + flex: 1; + display: flex; + align-items: center; + } + + .titleLeftBox { + .titleIcon { + color: #fff; + margin: 0; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + background: #F14A2D; + border-radius: 50%; + } + + .title { + font-size: 14px; + color: #333; + padding-left: 6px; + } + } + + .titleRightBox { + justify-content: flex-end; + } + } + + .payroll-tmpl-content { + padding: 16px; + border-top: #e5e5e5; + background: #f6f6f6; + + .wea-search-group { + background: #FFF; + padding: 0; + + .wea-title { + background: #F6F6F6; + border-bottom: none; + } + + .wea-form-cell { + padding: 0; + } + + .wea-content { + padding: 0; + + .wea-form-cell-wrapper { + border: 1px solid #e5e5e5; + border-bottom: none; + + .wea-form-item { + padding: 5px 16px; + border-bottom: 1px solid #e5e5e5; + } + } + } + } + + .sendTime-outer { + background: #fff; + padding: 5px 16px; + border-bottom: 1px solid #e5e5e5; + border-left: 1px solid #e5e5e5; + border-right: 1px solid #e5e5e5; + + .customTimeCompWrapper { + display: flex; + justify-content: flex-start; + + & > div { + margin-right: 10px; + display: flex; + align-items: center; + + .wea-select { + width: 80px; + margin: 0 10px; + } + } + } + } + } } } diff --git a/pc4mobx/hrmSalary/stores/payroll.js b/pc4mobx/hrmSalary/stores/payroll.js index c45f1fd7..3f2abafb 100644 --- a/pc4mobx/hrmSalary/stores/payroll.js +++ b/pc4mobx/hrmSalary/stores/payroll.js @@ -12,6 +12,10 @@ export class payrollStore { //工资单重构页面 @observable payrollCopyForm = new WeaForm(); //模板复制form @action initPayrollCopyForm = () => this.payrollCopyForm = new WeaForm(); + @observable payrollTempForm = new WeaForm(); //新建编辑工资单模板form + @action initPayrollTempForm = () => this.payrollTempForm = new WeaForm(); + @observable payrollTempFeedbackForm = new WeaForm(); //新建编辑工资单模板-工资单确认反馈设置form + @action initPayrollTempFeedbackForm = () => this.payrollTempFeedbackForm = new WeaForm(); @observable tableStore = new TableStore(); // new table diff --git a/pc4mobx/hrmSalary/util/index.js b/pc4mobx/hrmSalary/util/index.js index a3cc81bf..3f7d21dc 100644 --- a/pc4mobx/hrmSalary/util/index.js +++ b/pc4mobx/hrmSalary/util/index.js @@ -45,7 +45,8 @@ export const getSearchs = (form, condition, col, isCenter, onChange = () => void } ), - colSpan: 1 + colSpan: 1, + hide: fields.hide }); }); group.push( From 6ea39d8255e26d60b870c169ec993cd58fab607d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Mon, 16 Oct 2023 16:09:30 +0800 Subject: [PATCH 07/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../updatePayrollTemplateSlide/index.js | 19 ++++++++++++++++--- .../hrmSalary/pages/payrollRelease/index.less | 6 +++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index b159cc50..9305bfed 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -24,14 +24,27 @@ class Index extends Component { } renderTitle = () => { - const { tmplId } = this.props; + const { tmplId } = this.props, { current } = this.state; return
{tmplId ? getLabel(543583, "编辑工资单模板") : getLabel(543582, "新建工资单模板")}
- + { + current === 0 ? + : + current === 1 ? + + + + + : + + + + + }
; }; @@ -56,7 +69,7 @@ class Index extends Component { { key: 2, title: getLabel(543580, "补发工资单模版") } ]; return ( - { diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less index e628b43b..cb6d1d2f 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.less +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -73,9 +73,13 @@ } } + .payroll-tmpl-layout .clipper { + background: #f6f6f6; + } + .payroll-tmpl-content { padding: 16px; - border-top: #e5e5e5; + border-top: 1px solid #e5e5e5; background: #f6f6f6; .wea-search-group { From 2e613014fef558633d6da498ea98175e4bb5929b 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 09:17:37 +0800 Subject: [PATCH 08/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payrollRelease/components/conditions.js | 6 +- .../components/payrollTempBaseSet/index.js | 26 ++++++-- .../updatePayrollTemplateSlide/index.js | 61 ++++++++++++++++--- .../hrmSalary/pages/payrollRelease/index.less | 4 ++ 4 files changed, 80 insertions(+), 17 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js index fbc2d3d1..6ff6e05e 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js @@ -83,9 +83,7 @@ export const tempBaseSetConditions = [ labelcol: 6, options: [], value: "", - rules: "required|string", - hide: true, - viewAttr: 3 + hide: true }, { colSpan: 1, @@ -167,7 +165,7 @@ export const tempBaseSetFbConditions = [ value: 7, viewAttr: 3, hide: false, - rules: "required|string" + rules: "required" }, { colSpan: 1, diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js index 43394b17..6482a04f 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js @@ -21,15 +21,16 @@ class Index extends Component { this.state = { conditions: [], salaryMonthOptions: [], fbConditions: [], formData: { - autoSendDayOfMonth: "", - autoSendTimeOfDay: "", - autoSendCycleType: "" + autoSendDayOfMonth: "1", + autoSendTimeOfDay: "09:00", + autoSendCycleType: "1" } }; } componentDidMount() { this.commonEnumList(); + this.props.visible && this.getPayrollBaseForm(this.props); } componentWillReceiveProps(nextProps, nextContext) { @@ -129,6 +130,8 @@ class Index extends Component { if (getKey(o) === "replenishRule") { return { ...o, hide: params[key].value === "0", + rules: (!_.isEmpty(replenishRuleOptions) && reissueRule === "1") ? "required|string" : "", + viewAttr: (!_.isEmpty(replenishRuleOptions) && reissueRule === "1") ? 3 : 2, options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })) }; } @@ -140,6 +143,7 @@ class Index extends Component { }) }, () => { payrollTempForm.initFormFields(this.state.conditions); + this.resetRequiredForm(); }); } else if (key === "salarySobId") { this.setState({ @@ -149,7 +153,9 @@ class Index extends Component { ...it, items: _.map(it.items, o => { if (getKey(o) === "replenishRule") { return { - ...o, options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })) + ...o, options: _.map(replenishRuleOptions, t => ({ key: t.id, showname: t.content })), + rules: (!_.isEmpty(replenishRuleOptions) && reissueRule === "1") ? "required|string" : "", + viewAttr: (!_.isEmpty(replenishRuleOptions) && reissueRule === "1") ? 3 : 2 }; } return { ...o }; @@ -165,12 +171,17 @@ class Index extends Component { name: salarySob.valueSpan, replenishName: salarySob.valueSpan + "-补发工资单" }); + this.resetRequiredForm(); }); - } else if (key === "autoSendStatus") { - } this.forceUpdate(); }; + resetRequiredForm = () => { + const { payrollStore: { payrollTempForm } } = this.props; + const reissueRule = payrollTempForm.getFormParams().reissueRule; + if (reissueRule === "0") payrollTempForm.updateFields({ replenishRule: "0" }); + if (reissueRule === "1") payrollTempForm.updateFields({ replenishRule: "" }); + }; handleFbChange = (params) => { const { payrollStore: { payrollTempFeedbackForm } } = this.props; const key = _.keys(params)[0]; @@ -193,6 +204,8 @@ class Index extends Component { }) }, () => { payrollTempFeedbackForm.initFormFields(this.state.fbConditions); + const ackFeedbackStatus = payrollTempFeedbackForm.getFormParams().ackFeedbackStatus; + if (ackFeedbackStatus === "0") payrollTempFeedbackForm.updateFields({ autoAckDays: "7", feedbackUrl: "/" }); }); } this.forceUpdate(); @@ -210,6 +223,7 @@ class Index extends Component { this.setState({ formData: { ...formData, ...v } })} /> } diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index 9305bfed..87560bbe 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -7,8 +7,9 @@ import React, { Component } from "react"; import { inject, observer } from "mobx-react"; import { WeaLocaleProvider, WeaSlideModal, WeaSteps } from "ecCom"; +import { Button, message } from "antd"; import PayrollTempBaseSet from "../payrollTempBaseSet"; -import { Button } from "antd"; +import { savePayroll } from "../../../../apis/payroll"; const Step = WeaSteps.Step; const getLabel = WeaLocaleProvider.getLabel; @@ -19,12 +20,56 @@ class Index extends Component { constructor(props) { super(props); this.state = { - current: 0 + current: 0, loading: false }; + this.tmpBaseSetRef = null; } + save = async () => { + const { + payrollStore: { + payrollTempForm, payrollTempFeedbackForm, initPayrollTempForm, initPayrollTempFeedbackForm + } + } = this.props; + const [tempFormm, fbForm] = await Promise.all([payrollTempForm.validateForm(), payrollTempFeedbackForm.validateForm()]); + if (tempFormm.isValid && fbForm.isValid) { + const { replenishRule, autoSendStatus, emailStatus, msgStatus, ...extraBs } = payrollTempForm.getFormParams(), + { ackFeedbackStatus, autoAckDays, ...extraFb } = payrollTempFeedbackForm.getFormParams(), + { formData } = this.tmpBaseSetRef.state; + const payload = { + ...extraFb, ...formData, ...extraBs, + ackFeedbackStatus: ackFeedbackStatus === "1", + autoSendStatus: autoSendStatus === "1", + emailStatus: emailStatus === "1", + msgStatus: msgStatus === "1", + autoAckDays: Number(autoAckDays), + replenishRule: replenishRule === "0" ? "" : replenishRule + }; + this.setState({ + current: this.state.current + 1 + }, () => { + initPayrollTempForm(); + initPayrollTempFeedbackForm(); + }); + } else { + tempFormm.showErrors(); + fbForm.showErrors(); + this.forceUpdate(); + } + }; + savePayroll = (payload) => { + this.setState({ loading: true }); + savePayroll(payload).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success(getLabel(30700, "操作成功!")); + } else { + message.error(errormsg); + } + }).catch(() => this.setState({ loading: false })); + }; renderTitle = () => { - const { tmplId } = this.props, { current } = this.state; + const { tmplId } = this.props, { current, loading } = this.state; return
@@ -33,15 +78,17 @@ class Index extends Component {
{ current === 0 ? - : + : current === 1 ? - + : - + } @@ -53,7 +100,7 @@ class Index extends Component { let dom = null; switch (current) { case 0: - dom = ; + dom = this.tmpBaseSetRef = dom}/>; break; default: break; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/index.less b/pc4mobx/hrmSalary/pages/payrollRelease/index.less index cb6d1d2f..cbab3ea2 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/index.less +++ b/pc4mobx/hrmSalary/pages/payrollRelease/index.less @@ -70,6 +70,10 @@ .titleRightBox { justify-content: flex-end; + + & > button:not(:last-child) { + margin-right: 10px; + } } } 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 09/14] =?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" && + + } + ), + 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 From 0acc570a24569823123ff41401366f1f0164afba 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, 18 Oct 2023 10:18:26 +0800 Subject: [PATCH 10/14] =?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 | 4 +- .../payrollTempNormalSet/formRender.js | 39 +++++--- .../components/payrollTempNormalSet/index.js | 35 ++++--- .../components/payrollTempReissueSet/index.js | 91 +++++++++++++++++++ .../updatePayrollTemplateSlide/index.js | 16 +++- pc4mobx/hrmSalary/stores/payroll.js | 29 +++--- 6 files changed, 172 insertions(+), 42 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js index 61ed577f..93142796 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/conditions.js @@ -212,7 +212,9 @@ export const tempNormalSetConditions = [ labelcol: 6, value: "", showClearAll: false, - listType: "img", + showListBottom: false, + showListTop: false, + // listType: "img", limitType: "jpg,jpeg,png", uploadUrl: "/api/doc/upload/uploadFile", category: "string", diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js index ae8d0af8..bbcc3b5a 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/formRender.js @@ -1,11 +1,16 @@ import { WeaSwitch } from "comsMobx"; -import { WeaFormItem, WeaLocaleProvider, WeaSearchGroup, WeaTools } from "ecCom"; +import { WeaButtonIcon, 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)) => { +export const payrollTempNormalSetForm = (form, condition, background, onChange = () => void (0), insertVar = () => void (0)) => { const { isFormInit } = form; const formParams = form.getFormParams(); + const img1Props = { + src: "/weaver/weaver.file.FileDownload?fileid=a897b63092c473b95d98ed95138518e72fcaff559a225b618062f453c4d21b4bc43d18cd849d0ba00c94d2b02a53750b08e683c37ee144133", + width: 100, + height: 100 + }; let group = []; isFormInit && condition && condition.map(c => { let items = []; @@ -19,19 +24,29 @@ export const payrollTempNormalSetForm = (form, condition, col, isCenter, onChang error={form.getError(fields)} tipPosition="bottom" > - + + { + (getKey(fields) === "background" && background) ? + + insertVar("background", "")}/> + + + : + + } { getKey(fields) === "theme" && } ), @@ -41,12 +56,12 @@ export const payrollTempNormalSetForm = (form, condition, col, isCenter, onChang }); group.push( ); }); return group; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js index 5b77dbbd..1972be82 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js @@ -42,6 +42,7 @@ class Index extends Component { const { salaryTemplateShowSet, salaryTemplateSalaryItemSet: salaryItemSet, salaryBillItemNameSet } = data; const { data: result } = salaryTemplateShowSet; const { ...fieldsEchoData } = { ...result, ...toJS(tmplDataSource) }; + console.log(111, toJS(tmplDataSource), { ...result, ...toJS(tmplDataSource) }); this.setState({ conditions: _.map(tempNormalSetConditions, it => { if (it.title === "themeSet") { @@ -77,9 +78,6 @@ class Index extends Component { 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; @@ -92,10 +90,12 @@ class Index extends Component { }; getPayrollItemList = () => { const { salaryItemSet } = this.state; - const { payrollStore: { tmplDataSource } } = this.props; + const { payrollStore: { tmplDataSource, setTmplDataSource } } = this.props; getPayrollItemList({ salarySobId: toJS(tmplDataSource).salarySob }).then(({ status, data }) => { if (status && _.isEmpty(salaryItemSet)) { - this.setState({ salaryItemSet: data }); + this.setState({ salaryItemSet: data }, () => { + setTmplDataSource({ ...toJS(tmplDataSource), salaryItemSetting: data }); + }); } }); }; @@ -107,16 +107,29 @@ class Index extends Component { setTmplDataSource({ ...toJS(tmplDataSource), background }); } }; - handleInsertVar = (themeVar) => { - const { payrollStore: { payrollTempNormalForm } } = this.props; + handleInsertVar = (key, themeVar) => { + const { payrollStore: { payrollTempNormalForm, setTmplDataSource, tmplDataSource } } = this.props; const theme = payrollTempNormalForm.getFormParams().theme; - payrollTempNormalForm.updateFields({ theme: `${theme}${themeVar}` }); + if (key === "background") { + setTmplDataSource({ ...toJS(tmplDataSource), background: themeVar }); + } else { + payrollTempNormalForm.updateFields({ [key]: `${theme}${themeVar}` }); + } }; handleChangeSalaryItem = (resultSet) => { - console.log(resultSet); + const { payrollStore: { setTmplDataSource, tmplDataSource } } = this.props; + this.setState({ salaryItemSet: resultSet }, () => { + setTmplDataSource({ ...toJS(tmplDataSource), salaryItemSetting: resultSet }); + }); }; handleChangeSalaryItemShowNamesetting = (itemShowNamesetting) => { - console.log(itemShowNamesetting); + const { payrollStore: { setSalaryBillItemNameSetting, salaryBillItemNameSetting } } = this.props; + setSalaryBillItemNameSetting(_.map(salaryBillItemNameSetting, it => { + if (it.salaryBillType === 0) { + return { ...it, salaryTemplateId: this.props.tmplId, itemShowNameSetting: itemShowNamesetting }; + } + return { ...it, salaryTemplateId: this.props.tmplId }; + })); }; render() { @@ -124,7 +137,7 @@ class Index extends Component { const { payrollStore: { payrollTempNormalForm, tmplDataSource } } = this.props; return ( - {!_.isEmpty(conditions) && payrollTempNormalSetForm(payrollTempNormalForm, conditions, 1, false, this.handleChange, this.handleInsertVar)} + {!_.isEmpty(conditions) && payrollTempNormalSetForm(payrollTempNormalForm, conditions, toJS(tmplDataSource).background, this.handleChange, this.handleInsertVar)} diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js new file mode 100644 index 00000000..ea4c59cb --- /dev/null +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js @@ -0,0 +1,91 @@ +/* + * Author: 黎永顺 + * name:工资单发放-重构页面补发工资单模板 + * Description: + * Date: 2023/10/17 + */ +import React, { Component } from "react"; +import { toJS } from "mobx"; +import { WeaButtonIcon, WeaLocaleProvider, WeaSearchGroup } from "ecCom"; +import SalaryItemSettings from "../../../payroll/stepForm/salaryItemSettings"; +import { getReplenishForm } from "../../../../apis/payroll"; + +const getLabel = WeaLocaleProvider.getLabel; + +class Index extends Component { + constructor(props) { + super(props); + this.state = { + replenishSalaryTemplateSalaryItemSet: [], salaryBillItemNameSet: {} + }; + } + + componentDidMount() { + this.getReplenishForm(); + } + + getReplenishForm = () => { + const { payrollStore: { tmplDataSource, setTmplDataSource }, tmplId: id } = this.props; + const salarySobId = toJS(tmplDataSource).salarySob; + getReplenishForm({ salarySobId, id }).then(({ status, data }) => { + if (status) { + const { replenishSalaryTemplateSalaryItemSet, salaryBillItemNameSet } = data; + this.setState({ + replenishSalaryTemplateSalaryItemSet, salaryBillItemNameSet + }, () => { + // setTmplDataSource({ + // ...toJS(tmplDataSource), + // replenishSalaryItemSetting: replenishSalaryTemplateSalaryItemSet + // }); + }); + } + }); + }; + + handleChangeSalaryItem = (resultSet) => { + const { payrollStore: { setTmplDataSource, tmplDataSource } } = this.props; + this.setState({ replenishSalaryTemplateSalaryItemSet: resultSet }, () => { + setTmplDataSource({ + ...toJS(tmplDataSource), + replenishSalaryItemSetting: resultSet + }); + }); + }; + handleChangeSalaryItemShowNamesetting = (itemShowNamesetting) => { + const { payrollStore: { setSalaryBillItemNameSetting, salaryBillItemNameSetting } } = this.props; + setSalaryBillItemNameSetting(_.map(salaryBillItemNameSetting, it => { + if (it.salaryBillType === 1) { + return { ...it, salaryTemplateId: this.props.tmplId, itemShowNameSetting: itemShowNamesetting }; + } + return { ...it, salaryTemplateId: this.props.tmplId }; + })); + }; + + render() { + const { payrollStore: { tmplDataSource } } = this.props; + const { replenishSalaryTemplateSalaryItemSet, salaryBillItemNameSet } = this.state; + return ( + + {getLabel(543593, "薪资项目设置")} + this.salaryItemSettingsRef.handleOpenModal(toJS(tmplDataSource).salarySob, getLabel(543594, "添加分类"))}/> +
+ } + items={[]} needTigger showGroup> + this.salaryItemSettingsRef = dom} + dataSource={replenishSalaryTemplateSalaryItemSet} + onChangeSalaryItem={this.handleChangeSalaryItem} + onChangeSalaryItemShowNamesetting={this.handleChangeSalaryItemShowNamesetting} + salarySobId={toJS(tmplDataSource).salarySob} + salaryTemplateId={this.props.tmplId || ""} + isReplenish={true} 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 3ab5f52c..085d6e9d 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -11,6 +11,7 @@ import { WeaLocaleProvider, WeaSlideModal, WeaSteps } from "ecCom"; import { Button, message } from "antd"; import PayrollTempBaseSet from "../payrollTempBaseSet"; import PayrollTempNormalSet from "../payrollTempNormalSet"; +import PayrollTempReissueSet from "../payrollTempReissueSet"; import { savePayroll } from "../../../../apis/payroll"; const Step = WeaSteps.Step; @@ -87,7 +88,11 @@ class Index extends Component { } }); }; - savePayroll = (payload) => { + savePayroll = () => { + const { payrollStore: { tmplDataSource, salaryBillItemNameSetting } } = this.props; + const payload = { ...toJS(tmplDataSource), salaryBillItemNameSetting: toJS(salaryBillItemNameSetting) }; + console.log(payload, tmplDataSource, toJS(salaryBillItemNameSetting)); + return; this.setState({ loading: true }); savePayroll(payload).then(({ status, errormsg }) => { this.setState({ loading: false }); @@ -108,7 +113,7 @@ class Index extends Component {
{ current === 0 ? - : + : current === 1 ? - + }
@@ -133,7 +138,10 @@ class Index extends Component { dom = this.tmpBaseSetRef = dom}/>; break; case 1: - dom = this.tmpNormalSetRef = dom}/>; + dom = ; + break; + case 2: + dom = ; break; default: break; diff --git a/pc4mobx/hrmSalary/stores/payroll.js b/pc4mobx/hrmSalary/stores/payroll.js index fa5a56e1..35bb7e2f 100644 --- a/pc4mobx/hrmSalary/stores/payroll.js +++ b/pc4mobx/hrmSalary/stores/payroll.js @@ -21,6 +21,20 @@ export class payrollStore { @observable payrollTempNormalForm = new WeaForm(); //新建编辑工资单模板-主题设置form @action initPayrollTempNormalForm = () => this.payrollTempNormalForm = new WeaForm(); + @observable salaryBillItemNameSetting = [ + { + salaryTemplateId: "", + salaryBillType: 0, + itemShowNameSetting: [] + }, + { + salaryTemplateId: "", + salaryBillType: 1, + itemShowNameSetting: [] + } + ]; // 工资单模板薪资项目名称修改列表 + @action + setSalaryBillItemNameSetting = salaryBillItemNameSetting => (this.salaryBillItemNameSetting = salaryBillItemNameSetting); @observable tableStore = new TableStore(); // new table @@ -40,18 +54,7 @@ export class payrollStore { @observable salaryTemplateShowSet = {}; // 显示设置基础表单 @observable replenishSalaryTemplateSalaryItemSet = []; // 补发工资单模版基础表单 @observable salaryItemSet = []; // 显示设置薪资项 - @observable salaryBillItemNameSetting = [ - { - salaryTemplateId: "", - salaryBillType: 0, - itemShowNameSetting: [] - }, - { - salaryTemplateId: "", - salaryBillType: 1, - itemShowNameSetting: [] - } - ]; // 工资单模板薪资项目名称修改列表 + @observable salaryBillItemNameSet = {}; // 工资单模板薪资项目名称修改列表 // **** 工资单页面 **** @@ -116,8 +119,6 @@ export class payrollStore { setSalaryItemSet = salaryItemSet => (this.salaryItemSet = salaryItemSet); @action setSalaryBillItemNameSet = salaryBillItemNameSet => (this.salaryBillItemNameSet = salaryBillItemNameSet); - @action - setSalaryBillItemNameSetting = salaryBillItemNameSetting => (this.salaryBillItemNameSetting = salaryBillItemNameSetting); @action("工资单模板分页信息修改") setTemplateTablePageInfo = (pageInfo, callback) => { From 55c6fd80be284027996b4b0d565f81b7f9445e47 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, 18 Oct 2023 11:09:37 +0800 Subject: [PATCH 11/14] =?UTF-8?q?hotfix/2.9.42310.01-=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=E9=9D=9E=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=BA=BA=E5=91=98tab=E6=98=BE=E7=A4=BA=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/payrollTempNormalSet/index.js | 1 - .../components/payrollTempReissueSet/index.js | 8 +-- .../payrollTemplateTableList/index.js | 2 +- .../updatePayrollTemplateSlide/index.js | 54 ++++++++++++++----- 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js index 1972be82..5cb2331f 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js @@ -42,7 +42,6 @@ class Index extends Component { const { salaryTemplateShowSet, salaryTemplateSalaryItemSet: salaryItemSet, salaryBillItemNameSet } = data; const { data: result } = salaryTemplateShowSet; const { ...fieldsEchoData } = { ...result, ...toJS(tmplDataSource) }; - console.log(111, toJS(tmplDataSource), { ...result, ...toJS(tmplDataSource) }); this.setState({ conditions: _.map(tempNormalSetConditions, it => { if (it.title === "themeSet") { diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js index ea4c59cb..247da322 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js @@ -33,10 +33,10 @@ class Index extends Component { this.setState({ replenishSalaryTemplateSalaryItemSet, salaryBillItemNameSet }, () => { - // setTmplDataSource({ - // ...toJS(tmplDataSource), - // replenishSalaryItemSetting: replenishSalaryTemplateSalaryItemSet - // }); + setTmplDataSource({ + ...toJS(tmplDataSource), + replenishSalaryItemSetting: replenishSalaryTemplateSalaryItemSet + }); }); } }); diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js index 0b3bbaad..aca60f91 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js @@ -182,7 +182,7 @@ class Index extends Component { this.setState({ tmplSlide: { ...tmplSlide, visible: false, copyId: "" } - }, () => v === "refresh" && console.log(this.props))} + }, () => v === "refresh" && this.getPayrollTemplateList(this.props))} /> diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index 085d6e9d..c6ed81a2 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -49,10 +49,8 @@ class Index extends Component { autoAckDays: Number(autoAckDays), replenishRule: replenishRule === "0" ? "" : replenishRule }; - this.setState({ - current: this.state.current + 1 - }, () => { - setTmplDataSource(payload); + setTmplDataSource(payload); + this.setState({ current: this.state.current + 1 }, () => { initPayrollTempForm(); initPayrollTempFeedbackForm(); }); @@ -77,11 +75,8 @@ class Index extends Component { salaryItemZeroStatus: salaryItemZeroStatus === "1", salaryItemNullStatus: salaryItemNullStatus === "1" }; - this.setState({ - current: this.state.current + 1 - }, () => { - setTmplDataSource(payload); - }); + setTmplDataSource(payload); + this.setState({ current: this.state.current + 1 }); } else { f.showErrors(); this.forceUpdate(); @@ -89,15 +84,35 @@ class Index extends Component { }); }; savePayroll = () => { - const { payrollStore: { tmplDataSource, salaryBillItemNameSetting } } = this.props; + const { + payrollStore: { + tmplDataSource, salaryBillItemNameSetting, initPayrollTempForm, initPayrollTempFeedbackForm, + initPayrollTempNormalForm, setTmplDataSource, setSalaryBillItemNameSetting + } + } = this.props; const payload = { ...toJS(tmplDataSource), salaryBillItemNameSetting: toJS(salaryBillItemNameSetting) }; - console.log(payload, tmplDataSource, toJS(salaryBillItemNameSetting)); - return; this.setState({ loading: true }); savePayroll(payload).then(({ status, errormsg }) => { this.setState({ loading: false }); if (status) { + initPayrollTempForm(); + initPayrollTempFeedbackForm(); + initPayrollTempNormalForm(); + setTmplDataSource({}); + setSalaryBillItemNameSetting([ + { + salaryTemplateId: "", + salaryBillType: 0, + itemShowNameSetting: [] + }, + { + salaryTemplateId: "", + salaryBillType: 1, + itemShowNameSetting: [] + } + ]); message.success(getLabel(30700, "操作成功!")); + this.props.onClose("refresh"); } else { message.error(errormsg); } @@ -105,6 +120,7 @@ class Index extends Component { }; renderTitle = () => { const { tmplId } = this.props, { current, loading } = this.state; + const { payrollStore: { payrollTempNormalForm, setTmplDataSource, tmplDataSource } } = this.props; return
@@ -117,7 +133,19 @@ class Index extends Component { current === 1 ? + onClick={() => { + const { + salaryItemNullStatus, salaryItemZeroStatus, + background, ...extra + } = payrollTempNormalForm.getFormParams(); + const payload = { + ...toJS(tmplDataSource), ...extra, + salaryItemZeroStatus: salaryItemZeroStatus === "1", + salaryItemNullStatus: salaryItemNullStatus === "1" + }; + setTmplDataSource(payload); + this.setState({ current: current - 1 }); + }}>{getLabel(1876, "上一步")} : From dadb749c4ca3d72e2f7e62d15f7626b55d58cc66 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, 18 Oct 2023 17:12:44 +0800 Subject: [PATCH 12/14] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hrmSalary/components/pcTemplate/index.js | 24 ++++ .../components/pcTemplate/index.less | 32 ++++++ pc4mobx/hrmSalary/index.js | 10 +- .../pages/payroll/templatePreview/index.less | 55 +++++++++ .../payroll/templatePreview/tmpPreview.js | 54 +++++++++ .../components/payrollTempBaseSet/index.js | 14 ++- .../components/payrollTempNormalSet/index.js | 32 ++++-- .../components/payrollTempReissueSet/index.js | 20 ++-- .../payrollTemplateTableList/index.js | 2 +- .../updatePayrollTemplateSlide/index.js | 107 +++++++++++++----- pc4mobx/hrmSalary/stores/payroll.js | 2 + 11 files changed, 298 insertions(+), 54 deletions(-) create mode 100644 pc4mobx/hrmSalary/components/pcTemplate/index.js create mode 100644 pc4mobx/hrmSalary/components/pcTemplate/index.less create mode 100644 pc4mobx/hrmSalary/pages/payroll/templatePreview/tmpPreview.js diff --git a/pc4mobx/hrmSalary/components/pcTemplate/index.js b/pc4mobx/hrmSalary/components/pcTemplate/index.js new file mode 100644 index 00000000..66fdb988 --- /dev/null +++ b/pc4mobx/hrmSalary/components/pcTemplate/index.js @@ -0,0 +1,24 @@ +import React, { Component } from "react"; +import { toJS } from "mobx"; +import "./index.less"; + +class Index extends Component { + componentDidMount() { + const { store: { tmplDataSource } } = this.props; + console.log(toJS(tmplDataSource)); + } + + render() { + return ( +
+
+
+
+
+
+
+ ); + } +} + +export default Index; diff --git a/pc4mobx/hrmSalary/components/pcTemplate/index.less b/pc4mobx/hrmSalary/components/pcTemplate/index.less new file mode 100644 index 00000000..c17d0949 --- /dev/null +++ b/pc4mobx/hrmSalary/components/pcTemplate/index.less @@ -0,0 +1,32 @@ +.pbpc-content { + height: 100%; + border: 1px solid #e5e5e5; + overflow-y: auto; + + .weapp-salary-sp { + background: #f6f6f6; + + .salary-preview-container { + display: flex; + justify-content: flex-start; + align-items: center; + flex-direction: column; + width: 100%; + + .edition-center { + max-width: 1000px; + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + padding-bottom: 32px; + } + } + } + + .weapp-salary-payroll-pc-preview { + padding: 32px 0; + height: 100%; + overflow-y: auto; + } +} diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index 2ae4df93..bca2db82 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -18,7 +18,7 @@ import Ledger from "./pages/ledgerPage"; // import Calculate from "./pages/calculate"; import Calculate from "./pages/calculate/calculate"; //重构的薪资核算页面 // import Payroll from "./pages/payroll"; -import Payroll from "./pages/payrollRelease";//重构的工资单发放页面 +import Payroll from "./pages/payrollRelease"; //重构的工资单发放页面 import PayrollGrant from "./pages/payroll/payrollGrant"; import PayrollDetail from "./pages/payroll/payrollDetail"; import Declare from "./pages/declare"; @@ -31,6 +31,7 @@ import DoCalcDetail from "./pages/calculate/doCalc"; import OfflineCompare from "./pages/calculate/calcOc"; import GenerateDeclarationDetail from "./pages/declare/generateDeclarationDetail"; import TemplatePreview from "./pages/payroll/templatePreview"; +import PayrollTemplatePreview from "./pages/payroll/templatePreview/tmpPreview"; //重构的工资单模板预览页面 import MobilePayroll from "./pages/mobilePayroll"; import SysConfig from "./pages/sysConfig"; import RuleConfig from "./pages/ruleConfig"; @@ -144,11 +145,8 @@ const Routes = ( - + + +
+
+ { + _.map(phsImgList, o => ( +
this.setState({ active: o.key })}> +
)) + } +
+
+
+
+ +
+
+
+
+ ); + } +} + +export default TmpPreview; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js index bcaa4073..74123d25 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempBaseSet/index.js @@ -61,7 +61,13 @@ class Index extends Component { const { autoSendDayOfMonth = "1", autoSendTimeOfDay = "09:00", autoSendCycleType = "1", ...fieldsEchoData - } = { ...result, ...toJS(tmplDataSource) }; + } = { + ...result, ...toJS(tmplDataSource), + reissueRule: ( + (!id && (_.isEmpty(toJS(tmplDataSource)) || (!_.isEmpty(toJS(tmplDataSource)) && toJS(tmplDataSource).replenishRule === "ALL"))) || + (id && ((_.isEmpty(toJS(tmplDataSource)) && !result.replenishRule) || (!_.isEmpty(toJS(tmplDataSource)) && toJS(tmplDataSource).replenishRule === "ALL"))) + ) ? "0" : "1" + }; const { data: replenishRuleOptions } = (fieldsEchoData["reissueRule"] === "1" && fieldsEchoData["salarySob"]) ? await getReplenishRuleSetOptions({ salarySobId: fieldsEchoData["salarySob"] }) : []; this.setState({ conditions: _.map(tempBaseSetConditions, it => { @@ -170,7 +176,7 @@ class Index extends Component { }); }; handleChange = async (params) => { - const { payrollStore: { payrollTempForm } } = this.props; + const { payrollStore: { payrollTempForm, setHasBeenModify } } = this.props; const key = _.keys(params)[0], salarySobId = payrollTempForm.getFormParams().salarySob, reissueRule = payrollTempForm.getFormParams().reissueRule; const { data: replenishRuleOptions } = (reissueRule === "1" && salarySobId) ? await getReplenishRuleSetOptions({ salarySobId }) : []; @@ -227,6 +233,7 @@ class Index extends Component { this.resetRequiredForm(); }); } + setHasBeenModify(true); this.forceUpdate(); }; resetRequiredForm = () => { @@ -236,7 +243,7 @@ class Index extends Component { if (reissueRule === "1") payrollTempForm.updateFields({ replenishRule: "" }); }; handleFbChange = (params) => { - const { payrollStore: { payrollTempFeedbackForm } } = this.props; + const { payrollStore: { payrollTempFeedbackForm, setHasBeenModify } } = this.props; const key = _.keys(params)[0]; if (key === "ackFeedbackStatus") { this.setState({ @@ -261,6 +268,7 @@ class Index extends Component { if (ackFeedbackStatus === "0") payrollTempFeedbackForm.updateFields({ autoAckDays: "7", feedbackUrl: "/" }); }); } + setHasBeenModify(true); this.forceUpdate(); }; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js index 5cb2331f..5d587ecd 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempNormalSet/index.js @@ -36,12 +36,13 @@ class Index extends Component { } getPayrollShowForm = () => { - const { tmplId: id, payrollStore: { payrollTempNormalForm, tmplDataSource } } = this.props; + const { tmplId: id, payrollStore: { payrollTempNormalForm, tmplDataSource, setTmplDataSource } } = 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) }; + const fieldsEchoData = { ...result, ...toJS(tmplDataSource) }; + setTmplDataSource(fieldsEchoData); this.setState({ conditions: _.map(tempNormalSetConditions, it => { if (it.title === "themeSet") { @@ -66,7 +67,7 @@ class Index extends Component { }; } }), - salaryBillItemNameSet, salaryItemSet + salaryBillItemNameSet }, () => { payrollTempNormalForm.initFormFields(this.state.conditions); //字段回显 @@ -82,7 +83,25 @@ class Index extends Component { break; } }); - !id && this.getPayrollItemList(); + if (!id && !fieldsEchoData.salaryItemSetting) this.getPayrollItemList(); + if (id && !fieldsEchoData.salaryItemSetting) { + setTmplDataSource({ ...toJS(tmplDataSource), salaryItemSetting: salaryItemSet }); + this.setState({ salaryItemSet }); + } + if (fieldsEchoData.salaryItemSetting) { + setTmplDataSource({ + ...toJS(tmplDataSource), salaryItemSetting: _.map(toJS(fieldsEchoData.salaryItemSetting), o => ({ + ...o, + items: _.map(o.items, it => ({ ...it, viewAttr: 1 })) + })) + }); + this.setState({ + salaryItemSet: _.map(toJS(fieldsEchoData.salaryItemSetting), o => ({ + ...o, + items: _.map(o.items, it => ({ ...it, viewAttr: 1 })) + })) + }); + } }); } }); @@ -117,9 +136,8 @@ class Index extends Component { }; handleChangeSalaryItem = (resultSet) => { const { payrollStore: { setTmplDataSource, tmplDataSource } } = this.props; - this.setState({ salaryItemSet: resultSet }, () => { - setTmplDataSource({ ...toJS(tmplDataSource), salaryItemSetting: resultSet }); - }); + setTmplDataSource({ ...toJS(tmplDataSource), salaryItemSetting: resultSet }); + this.setState({ salaryItemSet: resultSet }); }; handleChangeSalaryItemShowNamesetting = (itemShowNamesetting) => { const { payrollStore: { setSalaryBillItemNameSetting, salaryBillItemNameSetting } } = this.props; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js index 247da322..fd443897 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTempReissueSet/index.js @@ -21,7 +21,17 @@ class Index extends Component { } componentDidMount() { - this.getReplenishForm(); + const { payrollStore: { tmplDataSource } } = this.props; + if (!toJS(tmplDataSource.replenishSalaryItemSetting)) { + this.getReplenishForm(); + } else { + this.setState({ + replenishSalaryTemplateSalaryItemSet: _.map(toJS(tmplDataSource.replenishSalaryItemSetting), o => ({ + ...o, + items: _.map(o.items, it => ({ ...it, viewAttr: 1 })) + })) + }); + } } getReplenishForm = () => { @@ -44,12 +54,8 @@ class Index extends Component { handleChangeSalaryItem = (resultSet) => { const { payrollStore: { setTmplDataSource, tmplDataSource } } = this.props; - this.setState({ replenishSalaryTemplateSalaryItemSet: resultSet }, () => { - setTmplDataSource({ - ...toJS(tmplDataSource), - replenishSalaryItemSetting: resultSet - }); - }); + setTmplDataSource({ ...toJS(tmplDataSource), replenishSalaryItemSetting: resultSet }); + this.setState({ replenishSalaryTemplateSalaryItemSet: resultSet }); }; handleChangeSalaryItemShowNamesetting = (itemShowNamesetting) => { const { payrollStore: { setSalaryBillItemNameSetting, salaryBillItemNameSetting } } = this.props; diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js index aca60f91..bc4fd61f 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/payrollTemplateTableList/index.js @@ -181,7 +181,7 @@ class Index extends Component { {/* 新建编辑工资单模板*/} this.setState({ - tmplSlide: { ...tmplSlide, visible: false, copyId: "" } + tmplSlide: { ...tmplSlide, visible: false, tmplId: "" } }, () => v === "refresh" && this.getPayrollTemplateList(this.props))} /> diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index c6ed81a2..5cadc957 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -8,14 +8,15 @@ 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 { Button, message, Modal } from "antd"; import PayrollTempBaseSet from "../payrollTempBaseSet"; import PayrollTempNormalSet from "../payrollTempNormalSet"; import PayrollTempReissueSet from "../payrollTempReissueSet"; -import { savePayroll } from "../../../../apis/payroll"; +import { savePayroll, updatePayroll } from "../../../../apis/payroll"; const Step = WeaSteps.Step; const getLabel = WeaLocaleProvider.getLabel; +const APIFox = { save: savePayroll, update: updatePayroll }; @inject("payrollStore") @observer @@ -28,11 +29,16 @@ class Index extends Component { this.tmpBaseSetRef = null; } + componentWillReceiveProps(nextProps, nextContext) { + if (nextProps.visible !== this.props.visible && !nextProps.visible) nextProps.payrollStore.setHasBeenModify(false); + } + save = async () => { const { payrollStore: { payrollTempForm, payrollTempFeedbackForm, initPayrollTempForm, - initPayrollTempFeedbackForm, setTmplDataSource, tmplDataSource + initPayrollTempFeedbackForm, setTmplDataSource, tmplDataSource, + setHasBeenModify } } = this.props; const [tempFormm, fbForm] = await Promise.all([payrollTempForm.validateForm(), payrollTempFeedbackForm.validateForm()]); @@ -47,12 +53,13 @@ class Index extends Component { emailStatus: emailStatus === "1", msgStatus: msgStatus === "1", autoAckDays: Number(autoAckDays), - replenishRule: replenishRule === "0" ? "" : replenishRule + replenishRule: (replenishRule === "0" || !replenishRule) ? "ALL" : replenishRule }; setTmplDataSource(payload); this.setState({ current: this.state.current + 1 }, () => { initPayrollTempForm(); initPayrollTempFeedbackForm(); + setHasBeenModify(true); }); } else { tempFormm.showErrors(); @@ -84,35 +91,20 @@ class Index extends Component { }); }; savePayroll = () => { - const { - payrollStore: { - tmplDataSource, salaryBillItemNameSetting, initPayrollTempForm, initPayrollTempFeedbackForm, - initPayrollTempNormalForm, setTmplDataSource, setSalaryBillItemNameSetting - } - } = this.props; - const payload = { ...toJS(tmplDataSource), salaryBillItemNameSetting: toJS(salaryBillItemNameSetting) }; + const { payrollStore: { tmplDataSource, salaryBillItemNameSetting, setHasBeenModify }, tmplId: id } = this.props; + const payload = { + ...toJS(tmplDataSource), id, + salarySobId: toJS(tmplDataSource).salarySob, + salaryBillItemNameSetting: toJS(salaryBillItemNameSetting) + }; this.setState({ loading: true }); - savePayroll(payload).then(({ status, errormsg }) => { + const API = APIFox[id ? "update" : "save"]; + API(payload).then(({ status, errormsg }) => { this.setState({ loading: false }); if (status) { - initPayrollTempForm(); - initPayrollTempFeedbackForm(); - initPayrollTempNormalForm(); - setTmplDataSource({}); - setSalaryBillItemNameSetting([ - { - salaryTemplateId: "", - salaryBillType: 0, - itemShowNameSetting: [] - }, - { - salaryTemplateId: "", - salaryBillType: 1, - itemShowNameSetting: [] - } - ]); message.success(getLabel(30700, "操作成功!")); - this.props.onClose("refresh"); + setHasBeenModify(false); + this.handleClose("refresh"); } else { message.error(errormsg); } @@ -147,7 +139,8 @@ class Index extends Component { this.setState({ current: current - 1 }); }}>{getLabel(1876, "上一步")} - + : - + :
@@ -24,3 +83,29 @@ class Index extends Component { } export default Index; + +export const dealTemplate = (itemTypeList, type) => { + let cloneItemTypeList = _.cloneDeep(itemTypeList); + let showData = [], onlyOneGrup = false; + cloneItemTypeList.forEach((group) => { + const { items, groupName, groupId } = group; + if (items.length !== 0) { + items.forEach((item) => { + item.salaryItemValue = "100"; + }); + if (items.length % 2 && type === "pc") items.push({}); + // 未分类不展示标题 + if (!groupId.includes("222222222222222222")) { + showData.push({ groupId, groupName, items }); + } else { + showData.push({ items }); + } + } + }); + if (cloneItemTypeList.length === 1) { + onlyOneGrup = true; + // 只有一个分组的时候不展示分组名 + cloneItemTypeList[0].name = ""; + } + return { onlyOneGrup, showData }; +}; diff --git a/pc4mobx/hrmSalary/components/pcTemplate/index.less b/pc4mobx/hrmSalary/components/pcTemplate/index.less index e93989d3..1341316d 100644 --- a/pc4mobx/hrmSalary/components/pcTemplate/index.less +++ b/pc4mobx/hrmSalary/components/pcTemplate/index.less @@ -46,6 +46,101 @@ font-weight: 400; } } + + .body { + width: 100%; + margin-top: 32px; + + .comp-img { + text-align: center; + + img { + width: 100%; + } + } + + .corporate-culture-text { + width: 100%; + margin-top: 16px; + text-align: center; + min-height: 12px; + font-size: 12px; + color: #111; + white-space: pre-wrap; + word-break: break-all; + } + + .data-detail { + margin-top: 16px; + + .salary-group { + margin-bottom: 16px; + + .group-title { + font-size: 14px; + } + + .group-list { + margin-top: 16px; + display: flex; + flex-wrap: wrap; + + .even { + border-left: 1px solid #e5e5e5; + } + + .zero, .first { + border-top: 1px solid #e5e5e5; + } + + .list-item { + width: 50%; + display: flex; + justify-content: left; + min-height: 40px; + align-items: center; + border-bottom: 1px solid #e5e5e5; + border-right: 1px solid #e5e5e5; + + .item-name { + flex-basis: 170px; + box-sizing: border-box; + width: 170px; + padding: 0 16px; + height: 100%; + background: #fbfbfb; + border-right: 1px solid #e5e5e5; + font-size: 12px; + color: #666; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; + + .text { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + text-overflow: ellipsis; + } + } + + .item-count { + flex-basis: 328px; + padding-left: 16px; + height: 100%; + line-height: 40px; + background: #fff; + font-size: 12px; + color: #111; + word-break: break-all; + } + } + } + } + } + } } } } diff --git a/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less b/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less index 5eec453d..b1ad3bcc 100644 --- a/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less +++ b/pc4mobx/hrmSalary/pages/payroll/templatePreview/index.less @@ -204,6 +204,16 @@ box-shadow: 0 0 14px 0 hsla(0, 0%, 84%, .5); border-radius: 5px; } + + .pb-mobile-container { + position: relative; + width: 430px; + height: calc(100vh - 170px); + background-color: #fff; + box-shadow: 0 0 14px 0 hsla(0, 0%, 84%, .5); + border-radius: 24px; + margin: 60px auto; + } } } diff --git a/pc4mobx/hrmSalary/pages/payroll/templatePreview/tmpPreview.js b/pc4mobx/hrmSalary/pages/payroll/templatePreview/tmpPreview.js index 411d5afa..d6d410d1 100644 --- a/pc4mobx/hrmSalary/pages/payroll/templatePreview/tmpPreview.js +++ b/pc4mobx/hrmSalary/pages/payroll/templatePreview/tmpPreview.js @@ -11,6 +11,7 @@ import moment from "moment"; import computer from "./computer.png"; import phone from "./phone_new.png"; import PcTemplate from "../../../components/pcTemplate"; +import MobileTemplate from "../../../components/mobileTemplate"; import cs from "classnames"; import "./index.less"; @@ -20,7 +21,7 @@ class TmpPreview extends Component { constructor(props) { super(props); this.state = { - active: "0", theme: "", tip: "", background: "", tipPosi: "", itemTypeList: "", + active: "0", theme: "", tip: "", background: "", tipPosi: "", itemTypeList: [], phsImgList: [ { key: "0", src: computer }, { key: "1", src: phone } @@ -45,7 +46,8 @@ class TmpPreview extends Component { }); if (theme.indexOf("${companyName}") !== -1) { const themeAccount = window.localStorage.getItem("theme-account") || {}; - this.setState({ theme: theme.replaceAll("${companyName}", themeAccount.subcompanyname) }); + if (themeAccount) + this.setState({ theme: theme.replaceAll("${companyName}", JSON.parse(themeAccount).subcompanyname) }); } } @@ -67,7 +69,9 @@ class TmpPreview extends Component {
-
+
+ +
); diff --git a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js index e089fb4b..73935ad6 100644 --- a/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js +++ b/pc4mobx/hrmSalary/pages/payrollRelease/components/updatePayrollTemplateSlide/index.js @@ -236,7 +236,7 @@ class Index extends Component { salaryItemZeroStatus: salaryItemZeroStatus === "1", salaryItemNullStatus: salaryItemNullStatus === "1" }; - if ((textContentPosition && !textContent) || (!textContentPosition && textContent)) { + if (textContentPosition !== "0" && ((textContentPosition && !textContent) || (!textContentPosition && textContent))) { message.warning(getLabel(111, "请完善文本内容与文本内容位置设置!")); return; }