From 167caa4f5b85c303684ce5dd350a3fecfa363cf5 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, 12 Apr 2023 15:53:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B5=B1=E8=A8=88=E6=96=B0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/dimensionSlide.js | 179 +++++++++++++----- .../components/groupIndividualEditTable.js | 51 +++++ .../components/groupSpacingEditTable.js | 98 ++++++++++ .../pages/analysisOfSalaryStatistics/index.js | 8 +- pc4mobx/hrmSalary/stores/attendanceStore.js | 9 +- 5 files changed, 284 insertions(+), 61 deletions(-) create mode 100644 pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupIndividualEditTable.js create mode 100644 pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupSpacingEditTable.js diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/dimensionSlide.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/dimensionSlide.js index c3ba1159..16866f49 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/dimensionSlide.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/dimensionSlide.js @@ -5,18 +5,27 @@ * Date: 2023/4/11 */ import React, { Component } from "react"; -import { WeaDialog } from "ecCom"; -import { Button, message } from "antd"; +import { WeaDialog, WeaSearchGroup } from "ecCom"; +import { Button, message, Modal } from "antd"; import { dimensionGetForm, dimensionSave } from "../../../apis/statistics"; import { getSearchs } from "../../../util"; +import GroupSpacingEditTable from "./groupSpacingEditTable"; +import GroupIndividualEditTable from "./groupIndividualEditTable"; import "../index.less"; +const keyObj = { + "RATION_GROUP_SPACING": "setting4RationGroupSpacing", + "RATION_GROUP_INDIVIDUAL": "setting4RationGroupIndividual" +}; + class DimensionSlide extends Component { constructor(props) { super(props); this.state = { loading: false, - date: "" + dimType: "QUALITATIVE", + setting4RationGroupSpacing: [], + setting4RationGroupIndividual: [] }; } @@ -32,72 +41,131 @@ class DimensionSlide extends Component { }); nextProps.onChangeCondition("QUALITATIVE"); } + if (nextProps.visible !== this.props.visible && !nextProps.visible) { + this.setState({ + loading: false, + dimType: "QUALITATIVE", + setting4RationGroupSpacing: [], + setting4RationGroupIndividual: [] + }); + } } + dimensionGetForm = (payload) => { dimensionGetForm(payload).then(({ status, data }) => { if (status) { const { baseForm: { data: formData } } = data; - const fields = _.map(this.props.condition[0].items, it => { - return it.domkey[0]; - }); - fields.map(item => { - if (item !== "setting4Qualitative") { - this.props.form.updateFields({ - [item]: formData[item] || "" - }); - } else { - this.props.form.updateFields({ - setting4Qualitative: formData.statsDim - }); - } - }); + const setting = JSON.parse(formData.setting); this.props.onChangeCondition(formData["dimType"], 1); + this.setState({ + dimType: formData.dimType, + [keyObj[formData["dimType"]]]: setting + }, () => { + const fields = _.map(this.props.condition[0].items, it => { + return it.domkey[0]; + }); + fields.map(item => { + if (item !== "setting4Qualitative") { + this.props.form.updateFields({ + [item]: formData[item] || "" + }); + } else if (item === "setting4Qualitative" && formData.statsDim) { + this.props.form.updateFields({ + setting4Qualitative: formData.statsDim + }); + } + }); + }); } }); }; - handleSave = () => { + const { dimType } = this.state; const { condition, onCancel, formId } = this.props; - this.props.form.validateForm().then(f => { - console.log(f); - console.log(this.props.form.getFormParams()); - if (f.isValid) { - console.log(this.props.form.getFormParams()); + const { setting4Qualitative, dimCode, ...extraParams } = this.props.form.getFormParams(); + let payload = { id: formId, ...extraParams }; + if (dimType === "QUALITATIVE") { + if (!setting4Qualitative || !extraParams.dimName) { + Modal.warning({ + title: "信息确认", + content: "必要信息不完整,红色*为必填项!" + }); return; - const { setting4Qualitative, ...extraParams } = this.props.form.getFormParams(); - const options = _.find(condition[0].items, item => item.domkey[0] === "setting4Qualitative").options; - const obj = _.find(options, item => item.key === setting4Qualitative); - const payload = { - id: formId, - ...extraParams, - setting4Qualitative: { id: obj.key, name: obj.showname } - }; - this.setState({ loading: true }); - dimensionSave(payload).then(({ status, errormsg }) => { - this.setState({ loading: false }); - if (status) { - message.success("保存成功"); - onCancel(true); - this.props.form.resetForm(); - } else { - message.error(errormsg || "保存失败"); - } - }).catch(() => this.setState({ loading: false })); - } else { - f.showErrors(); - this.setState({ date: new Date() }); } - }); + const tjOptions = _.find(condition[0].items, item => item.domkey[0] === "setting4Qualitative").options; + const tjObj = _.find(tjOptions, item => item.key === setting4Qualitative); + payload = { ...payload, setting4Qualitative: { id: tjObj.key, name: tjObj.showname } }; + } else { + if (!extraParams.dimName) { + Modal.warning({ + title: "信息确认", + content: "必要信息不完整,红色*为必填项!" + }); + return; + } + if (dimType === "RATION_GROUP_SPACING") { + const { setting4RationGroupSpacing } = this.state; + const bool = _.every(setting4RationGroupSpacing, it => it.startValue !== "" && it.endValue !== "" && it.startValue <= it.endValue); + if (_.isEmpty(setting4RationGroupSpacing) || !bool) { + message.warning("请完善分组设置相关数据!分组设置不能为空,起始值结束值必填,且起始值需小于结束值!"); + return; + } else { + payload = { + ...payload, dimCode, + setting4RationGroupSpacing: _.map(setting4RationGroupSpacing, (it, index) => ({ + id: index + 1, + endValue: it.endValue, + startValue: it.startValue, + includeEnd: it.includeEnd === "1", + includeStart: it.includeStart === "1" + })) + }; + } + } else if (dimType === "RATION_GROUP_INDIVIDUAL") { + const { setting4RationGroupIndividual } = this.state; + const bool = _.every(setting4RationGroupIndividual, it => it.value !== ""); + if (_.isEmpty(setting4RationGroupIndividual) || !bool) { + message.warning("请完善分组设置相关数据!分组设置不能为空,且数值必填"); + return; + } else { + payload = { + ...payload, dimCode, + setting4RationGroupIndividual: _.map(setting4RationGroupIndividual, (it, index) => ({ id: index + 1, ...it })) + }; + } + } + } + this.setState({ loading: true }); + dimensionSave(payload).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + message.success("保存成功"); + onCancel(true); + this.props.form.resetForm(); + } else { + message.error(errormsg || "保存失败"); + } + }).catch(() => this.setState({ loading: false })); }; formItemChange = (formObj) => { const { onChangeCondition } = this.props; const filedKey = _.keys(formObj)[0]; - if (filedKey === "dimType") onChangeCondition(formObj[filedKey].value); + if (filedKey === "dimType") { + this.setState({ + dimType: formObj[filedKey].value, + setting4RationGroupSpacing: [], + setting4RationGroupIndividual: [] + }, () => onChangeCondition(formObj[filedKey].value)); + } + }; + handleConvertGroupDatasource = (data) => { + const { dimType } = this.state; + this.setState({ [keyObj[dimType]]: data }); }; render() { - const { loading } = this.state; + const { loading, dimType, setting4RationGroupSpacing, setting4RationGroupIndividual } = this.state; const { form, condition } = this.props; return ( {getSearchs(form, condition, 1, false, this.formItemChange)} + { + dimType !== "QUALITATIVE" && + + { + dimType === "RATION_GROUP_SPACING" && + + } + { + dimType === "RATION_GROUP_INDIVIDUAL" && + + } + + } ); } diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupIndividualEditTable.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupIndividualEditTable.js new file mode 100644 index 00000000..5d2ba0e3 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupIndividualEditTable.js @@ -0,0 +1,51 @@ +/* + * Author: 黎永顺 + * name: 分组设置-定量-单项式分组编辑表格 + * Description: + * Date: 2023/4/12 + */ +import React, { Component } from "react"; +import { WeaTableEdit } from "ecCom"; + +class GroupIndividualEditTable extends Component { + constructor(props) { + super(props); + this.state = { + dataSource: [] + }; + } + + componentDidMount() { + const { setting4RationGroupIndividual } = this.props; + this.setState({ + dataSource: setting4RationGroupIndividual + }); + } + + handleChangeTableData = (dataSource) => { + const { onChange } = this.props; + this.setState({ dataSource }, () => onChange(this.state.dataSource)); + }; + + render() { + const { dataSource } = this.state; + const columns = [ + { + title: "分组设置值", + dataIndex: "value", + key: "value", + com: [ + { label: "", key: "value", type: "INPUTNUMBER" } + ] + } + ]; + return ( + + ); + } +} + +export default GroupIndividualEditTable; diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupSpacingEditTable.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupSpacingEditTable.js new file mode 100644 index 00000000..76720774 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/components/groupSpacingEditTable.js @@ -0,0 +1,98 @@ +/* + * Author: 黎永顺 + * name: 分组设置-定量-组距式分组编辑表格 + * Description: + * Date: 2023/4/12 + */ +import React, { Component } from "react"; +import { WeaTableEdit } from "ecCom"; + +class GroupSpacingEditTable extends Component { + constructor(props) { + super(props); + this.state = { + dataSource: [] + }; + } + + componentDidMount() { + const { setting4RationGroupSpacing } = this.props; + this.setState({ + dataSource: _.map(setting4RationGroupSpacing, item => { + return { + ...item, + includeStart: item.includeStart ? "1" : "0", + includeEnd: item.includeEnd ? "1" : "0" + }; + }) + }); + } + + handleChangeTableData = (dataSource) => { + const { onChange } = this.props; + this.setState({ dataSource }, () => onChange(this.state.dataSource)); + }; + + render() { + const { dataSource } = this.state; + const columns = [ + { + title: "起始值", + dataIndex: "startValue", + key: "startValue", + com: [ + { label: "", key: "startValue", type: "INPUTNUMBER" } + ] + }, + { + title: "含", + dataIndex: "includeStart", + key: "includeStart", + com: [ + { + type: "CHECKBOX", + key: "includeStart", + otherParams: { content: "含" } + } + ] + }, + { + title: "至", + dataIndex: "to", + key: "to", + com: [ + { label: "", type: "TEXT" } + ] + }, + { + title: "结束值", + dataIndex: "endValue", + key: "endValue", + com: [ + { label: "", key: "endValue", type: "INPUTNUMBER" } + ] + }, + { + title: "含", + dataIndex: "includeEnd", + key: "includeEnd", + com: [ + { + type: "CHECKBOX", + key: "includeEnd", + otherParams: { content: "含" } + } + ] + } + ]; + return ( + ({ ...item, to: "至" }))} + showCopy={false} onChange={this.handleChangeTableData} + /> + ); + } +} + +export default GroupSpacingEditTable; diff --git a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js index bb6fe300..4bdd4f6e 100644 --- a/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js +++ b/pc4mobx/hrmSalary/pages/analysisOfSalaryStatistics/index.js @@ -92,8 +92,7 @@ class Index extends Component { return dimensionGetForm(); }; handleChangeCondition = (val, viewAttr) => { - const { attendanceStore: { statisticsForm, initStatisticsForm } } = this.props; - console.log(val); + const { attendanceStore: { statisticsForm } } = this.props; const helpfulTitle = val === "RATION_GROUP_SPACING" ? "例:\n" + " 若:所属字段为【工龄】,分组设置为【0-5】,【5-10】;统计项为【税前薪资】,对应的统计规则为【求和】; 则统计结果为:【工龄】为【0-5】的所有人的【税前薪资】求和,【工龄】为【5-10】的所有人的【税前薪资】求和;\n" + @@ -117,7 +116,7 @@ class Index extends Component { }; }) }, () => { - initStatisticsForm(this.state.conditions); + statisticsForm.setCondition(this.state.conditions); }); } else { this.setState({ @@ -135,8 +134,7 @@ class Index extends Component { }; }) }, () => { - initStatisticsForm(this.state.conditions); - // statisticsForm.initFormFields(this.state.conditions); + statisticsForm.setCondition(this.state.conditions); }); } }; diff --git a/pc4mobx/hrmSalary/stores/attendanceStore.js b/pc4mobx/hrmSalary/stores/attendanceStore.js index 48730bb5..ed18f076 100644 --- a/pc4mobx/hrmSalary/stores/attendanceStore.js +++ b/pc4mobx/hrmSalary/stores/attendanceStore.js @@ -1,4 +1,4 @@ -import { action, observable } from "mobx"; +import { observable } from "mobx"; import { WeaForm } from "comsMobx"; @@ -7,11 +7,4 @@ export class AttendanceStore { @observable refenceform = new WeaForm(); //薪酬统计 新增form @observable statisticsForm = new WeaForm(); - - @action - initStatisticsForm = (condition) => { - this.statisticsForm && this.statisticsForm.updateIsFormInit(false); - this.statisticsForm = new WeaForm(); - this.statisticsForm.setCondition(condition, true); - }; }