diff --git a/pc4mobx/hrmSalary/apis/payroll.js b/pc4mobx/hrmSalary/apis/payroll.js index c322c94f..fdef4e0e 100644 --- a/pc4mobx/hrmSalary/apis/payroll.js +++ b/pc4mobx/hrmSalary/apis/payroll.js @@ -202,8 +202,12 @@ export const salaryBillSendSum = (params) => { return postFetch("/api/bs/hrmsalary/salaryBill/send/sum", params); }; //工资单发放-发送短信验证码 -export const sendMobileCode = (params) => { - return postFetch("/api/bs/hrmsalary/salaryBill/sendMobileCode", params); +export const sendMobileCode = (params, header = {}) => { + return postFetch("/api/bs/hrmsalary/salaryBill/sendMobileCode", params, header); +}; +//工资单发放-发送短信验证码 +export const checkMobileCode = (params, header = {}) => { + return postFetch("/api/bs/hrmsalary/salaryBill/checkMobileCode", params, header); }; //工资单-验证方式 export const payrollCheckType = params => { diff --git a/pc4mobx/hrmSalary/components/captchaModal/index.js b/pc4mobx/hrmSalary/components/captchaModal/index.js index a7f00b9b..87da6745 100644 --- a/pc4mobx/hrmSalary/components/captchaModal/index.js +++ b/pc4mobx/hrmSalary/components/captchaModal/index.js @@ -6,31 +6,32 @@ */ import React, { Component } from "react"; import { WeaDialog, WeaError, WeaFormItem, WeaInput, WeaLocaleProvider, WeaSearchGroup } from "ecCom"; -import { sendMobileCode } from "../../apis/payroll"; -import { Button } from "antd"; +import { WeaForm, WeaSwitch } from "comsMobx"; +import { checkMobileCode, sendMobileCode } from "../../apis/payroll"; +import { getQueryString } from "../../util/url"; +import FormInfo from "../FormInfo"; +import { captchaCondition } from "../../pages/mobilePayroll/pwdCondtion"; +import MobileModal from "../../pages/mobilePayroll/mobileModal"; +import { Button, message } from "antd"; import "./index.less"; +const form = new WeaForm(); const { getLabel } = WeaLocaleProvider; class Index extends Component { constructor(props) { super(props); - this.state = { - captcha: "", - time: 60 - }; + this.state = { captcha: "", time: 60 }; this.timeRef = null; } + componentDidMount() { + form.initFormFields(captchaCondition); + } + componentWillUnmount() { clearInterval(this.timeRef); - } - - componentWillReceiveProps(nextProps, nextContext) { - if (nextProps.visible !== this.props.visible && !nextProps.visible) { - clearInterval(this.timeRef); - this.setState({ captcha: "", time: 60 }); - } + this.setState({ captcha: "", time: 60 }); } handleSendCaptcha = () => { @@ -48,44 +49,73 @@ class Index extends Component { } }); }; - handleConfirm = () => { - if (!this.state.captcha) { + handleConfirm = async () => { + const type = getQueryString("type"), f = await form.validateForm(); + if (!this.state.captcha && type !== "phone") { this.refs.weaError.showError(); - // return + return; + } else if (!f.isValid && type === "phone") { + f.showErrors(); + return; } - this.props.onCancel(); - this.props.onConfirm(); + checkMobileCode({ id: this.props.id, mobileCode: this.state.captcha }).then(({ status, errormsg }) => { + if (status) { + this.props.onCancel(); + this.props.onConfirm(); + } else { + message.error(errormsg); + } + }); }; render() { - const { captcha, time } = this.state; - return ( - {getLabel(826, "确定")} - ]} - > - - - -
- this.setState({ captcha })}/> - -
-
-
-
-
+ const { captcha, time } = this.state, type = getQueryString("type"); + const itemRender = { + mobileCode: (field, textAreaProps, form, formParams) => { + return (
+ this.setState({ captcha: form.getFormParams().mobileCode })}/> + +
); + } + }; + return ( + { + type === "phone" ? + + : + {getLabel(826, "确定")} + ]} + > + + + +
+ this.setState({ captcha })}/> + +
+
+
+
+
+ } +
); } } diff --git a/pc4mobx/hrmSalary/components/captchaModal/index.less b/pc4mobx/hrmSalary/components/captchaModal/index.less index 4f8d23b7..2728112b 100644 --- a/pc4mobx/hrmSalary/components/captchaModal/index.less +++ b/pc4mobx/hrmSalary/components/captchaModal/index.less @@ -5,25 +5,25 @@ .wea-form-item-wrapper { .wea-error { width: 100%; - - .captchaInputBox { - display: flex; - align-items: center; - - .wea-input-normal { - flex: 1; - } - - button { - padding: 8px 10px; - border-radius: 0; - min-width: 80px; - text-align: center; - height: 30px; - line-height: 15px; - } - } } } } } + +.captchaInputBox { + display: flex; + align-items: center; + + .wea-input-normal { + flex: 1; + } + + button { + padding: 8px 10px; + border-radius: 0; + min-width: 80px; + text-align: center; + height: 30px; + line-height: 15px; + } +} diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js index 1893e77e..1775ee97 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/salaryDetails.js @@ -166,7 +166,7 @@ class SalaryDetails extends Component { this.postMessageToChild({ dataSource, pageInfo, selectedRowKeys, showTotalCell, calcDetail: true, tableScrollHeight: 154, sumRow, columns: _.map(columns, (it, idx) => ({ - dataIndex: it.column || it.dataIndex, title: it.text || it.title, calcDetail: true, + dataIndex: it.column || it.dataIndex, title: it.text || it.title, calcDetail: true, showSee: false, width: (it.dataIndex === "taxAgent" || it.dataIndex === "salarySob") ? 176 : (it.width || it.oldWidth), fixed: (idx === 1 || idx === 0 || idx === 2) ? "left" : "", ellipsis: true diff --git a/pc4mobx/hrmSalary/pages/dataAcquisition/attendance/components/attendanceDataViewSlide.js b/pc4mobx/hrmSalary/pages/dataAcquisition/attendance/components/attendanceDataViewSlide.js index be64c8e8..2f4804b6 100644 --- a/pc4mobx/hrmSalary/pages/dataAcquisition/attendance/components/attendanceDataViewSlide.js +++ b/pc4mobx/hrmSalary/pages/dataAcquisition/attendance/components/attendanceDataViewSlide.js @@ -5,9 +5,9 @@ * Date: 2023/3/7 */ import React, { Component } from "react"; -import { WeaInputSearch, WeaLocaleProvider, WeaSlideModal, WeaTable, WeaTop } from "ecCom"; -import { Button } from "antd"; +import { WeaInputSearch, WeaLocaleProvider, WeaSlideModal, WeaTop } from "ecCom"; import { viewAttendQuote } from "../../../../apis/attendance"; +import { Button, Spin } from "antd"; import "./index.less"; const { getLabel } = WeaLocaleProvider; @@ -16,11 +16,31 @@ class AttendanceDataViewSlide extends Component { constructor(props) { super(props); this.state = { - loading: { query: false }, keyword: "", dataSource: [], columns: [], - pageInfo: { current: 1, pageSize: 10, total: 0 } + loading: { query: false }, keyword: "", dataSource: [], pageInfo: { current: 1, pageSize: 10, total: 0 } }; } + componentDidMount() { + window.addEventListener("message", this.handleReceive, false); + } + + componentWillUnmount() { + window.removeEventListener("message", this.handleReceive, false); + } + + handleReceive = async ({ data }) => { + const { type, payload: { id, params } = {} } = data; + if (type === "turn") { + switch (id) { + case "PAGEINFO": + this.setState({ pageInfo: { ...this.state.pageInfo, ...params } }, () => this.viewAttendQuote()); + break; + default: + break; + } + } + }; + componentWillReceiveProps(nextProps, nextContext) { if (nextProps.visible !== this.props.visible && nextProps.visible) { document.querySelector(".attendanceRefWrapper").classList.add("zIndex0-attendance"); @@ -33,19 +53,29 @@ class AttendanceDataViewSlide extends Component { viewAttendQuote = (extraPayload = {}, props) => { const { loading, pageInfo, keyword } = this.state; - const { attendQuoteId } = props; + const { attendQuoteId } = props || this.props; this.setState({ loading: { ...loading, query: true } }); viewAttendQuote({ ...pageInfo, attendQuoteId, keyword, ...extraPayload }).then(({ status, data }) => { this.setState({ loading: { ...loading, query: false } }); if (status) { const { columns, list: dataSource, pageNum: current, pageSize, total } = data.pageInfo; this.setState({ - pageInfo: { ...pageInfo, current, pageSize, total }, dataSource, - columns: _.map(columns, (o, i) => ({ ...o, width: 150, fixed: i === 0 ? "left" : null })) - }); + pageInfo: { ...pageInfo, current, pageSize, total }, dataSource + }, () => this.postMessageToChild({ + pageInfo: this.state.pageInfo, dataSource, showRowSelection: false, unitTableType: "attendanceView", + columns: _.map(columns, (o, i) => ({ ...o, width: 150, fixed: i === 0 ? "left" : false })) + })); } }).catch(() => this.setState({ loading: { ...loading, query: false } })); }; + postMessageToChild = (payload = {}) => { + const i18n = { + "操作": getLabel(30585, "操作"), "编辑": getLabel(111, "编辑"), "共": getLabel(18609, "共"), + "条": getLabel(18256, "条") + }; + const childFrameObj = document.getElementById("attendanceViewTable"); + childFrameObj && childFrameObj.contentWindow.postMessage(JSON.stringify({ ...payload, i18n }), "*"); + }; handleExportAttendQuote = () => { if (!this.handleDebounce) { this.handleDebounce = _.debounce(() => { @@ -60,24 +90,7 @@ class AttendanceDataViewSlide extends Component { render() { const { showOperateBtn, salaryYearMonth, ...extra } = this.props; - const { columns, dataSource, loading, pageInfo, keyword } = this.state; - const pagination = { - ...pageInfo, - showTotal: (total) => `共 ${total} 条`, - pageSizeOptions: ["10", "20", "50", "100"], - showSizeChanger: true, - showQuickJumper: true, - onShowSizeChange: (current, pageSize) => { - this.setState({ - pageInfo: { ...pageInfo, current, pageSize } - }, () => this.viewAttendQuote({}, this.props)); - }, - onChange: (current) => { - this.setState({ - pageInfo: { ...pageInfo, current } - }, () => this.viewAttendQuote({}, this.props)); - } - }; + const { loading, keyword } = this.state; const btns = [ , {getLabel(543376, "考勤周期")}:{salaryYearMonth}
- +
+ +