salary-management-front/pc4mobx/hrmSalary/pages/roleManagement/components/roleDetailSetDialog/editRoleDialog.js

156 lines
6.2 KiB
JavaScript

/*
* 编辑角色操作者
*
* @Author: 黎永顺
* @Date: 2024/8/20
* @Wechat:
* @Email: 971387674@qq.com
* @description:
*/
import React, { Component } from "react";
import { inject, observer } from "mobx-react";
import { WeaDialog, WeaLocaleProvider, WeaTools } from "ecCom";
import { Button } from "antd";
import { roleOperatorConditions } from "../conditions";
import { getSearchs } from "../../../../util";
const getLabel = WeaLocaleProvider.getLabel;
const getKey = WeaTools.getKey;
@inject("taxAgentStore")
@observer
class EditRoleDialog extends Component {
constructor(props) {
super(props);
this.state = {
conditions: [], loading: false, targetSob: {}
};
}
componentWillReceiveProps(nextProps, nextContext) {
if (nextProps.visible !== this.props.visible && nextProps.visible) {
this.setState({
conditions: _.map(roleOperatorConditions, item => ({
...item, items: _.map(item.items, o => {
o = { ...o, label: getLabel(o.lanId, o.label), value: String(nextProps.record[getKey(o)]) };
switch (getKey(o)) {
case "link":
o = { ...o, options: nextProps.linkOptions, hide: _.isEmpty(nextProps.linkOptions) };
break;
case "sortedIndex":
o = { ...o, hide: _.isEmpty(nextProps.linkOptions) };
break;
case "targetName":
o = ["EMP", "DEPARTMENT", "JOB", "SUB_COMPANY", "ROLE"].includes(nextProps.record.targetType) ?
{
...o, value: "", browserConditionParam: {
...this.renderBrowserType(nextProps.record.targetType),
replaceDatas: [{ id: nextProps.record["target"], name: nextProps.record[getKey(o)] }]
}
} :
nextProps.record.targetType === "SQL" ? {
...o, conditionType: "TEXTAREA", otherParams: { minRows: 3 }
} : nextProps.record.targetType === "LEVEL" ?
{
...o, startValue: nextProps.record[getKey(o)].split("-")[0],
endValue: nextProps.record[getKey(o)].split("-")[1],
conditionType: "SCOPE", precision: 0
} : (nextProps.record.targetType === "SOB" ||
nextProps.record.targetType === "TAX") ? {
...o, value: nextProps.record["target"],
conditionType: "CUSTOMBROWSER", browserConditionParam: {
completeURL: nextProps.record.targetType === "SOB" ?
"/api/bs/hrmsalary/salarysob/listAuth" : "/api/bs/hrmsalary/taxAgent/listAuth",
dataParams: { filterType: "QUERY_DATA" },
filterByName: true, isSingle: true,
tableProps: {}, searchParamsKey: "name",
replaceDatas: [{ id: nextProps.record["target"], name: nextProps.record["targetName"] }]
}
} : { ...o };
break;
default:
break;
}
return o;
})
})),
targetSob: { id: nextProps.record["target"], name: nextProps.record["targetName"] }
}, () => nextProps.taxAgentStore.roleOperatorForm.initFormFields(this.state.conditions));
}
if (nextProps.visible !== this.props.visible && !nextProps.visible) {
this.setState({ targetSob: {} });
nextProps.taxAgentStore.initRoleOperatorForm();
}
if (nextProps.loading !== this.props.loading && !nextProps.loading) this.props.onCancel();
}
renderBrowserType = (enumType) => {
let browserType = {};
switch (enumType) {
case "EMP":
browserType = { ...browserType, type: 17, isSingle: true, title: getLabel(82246, "人员选择") };
break;
case "DEPARTMENT":
browserType = { ...browserType, type: 57, isSingle: true, title: getLabel(111, "部门选择") };
break;
case "JOB":
browserType = { ...browserType, type: 278, isSingle: true, title: getLabel(111, "岗位选择") };
break;
case "SUB_COMPANY":
browserType = { ...browserType, type: 164, isSingle: true, title: getLabel(111, "分部选择") };
break;
case "ROLE":
browserType = { ...browserType, type: 65, isSingle: true, title: getLabel(111, "角色选择") };
break;
default:
break;
}
return browserType;
};
save = () => {
const { targetSob } = this.state;
const { taxAgentStore: { roleOperatorForm }, record, onChange } = this.props;
roleOperatorForm.validateForm().then(f => {
if (f.isValid) {
const { targetName: __, link, sortedIndex } = roleOperatorForm.getFormParams();
const targetName = roleOperatorForm.getFormDatas().targetName;
onChange([_.assign(record, {
editId: record.id, sortedIndex,
id: record.targetType === "LEVEL" ? targetName.value.join("-") : targetName.value,
name: record.targetType === "SQL" ? __ :
record.targetType === "LEVEL" ? __.join("-") : (targetName.valueSpan || targetSob.name),
link: link === "undefined" ? "OR" : link
})]);
} else {
f.showErrors();
}
});
};
handleFormChange = (val) => {
const { record } = this.props;
const key = _.keys(val)[0];
if (key === "targetName" && (record.targetType === "SOB" || record.targetType === "TAX"))
this.setState({ targetSob: _.head(val[key]) });
};
render() {
const { conditions } = this.state;
const { taxAgentStore: { roleOperatorForm }, linkOptions, loading } = this.props;
return (
<WeaDialog
{...this.props} style={{ width: 480, height: _.isEmpty(linkOptions) ? 129 : 223 }}
initLoadCss title={getLabel(111, "编辑操作者")}
buttons={[
<Button type="primary" loading={loading} onClick={this.save}>{getLabel(111, "保存")}</Button>
]}
>
<div className="form-dialog-layout">
{getSearchs(roleOperatorForm, conditions, 1, false, this.handleFormChange)}
</div>
</WeaDialog>
);
}
}
export default EditRoleDialog;