salary-management-front/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js

205 lines
8.9 KiB
JavaScript
Raw Normal View History

/*
* Author: 黎永顺
* name: 薪资项目管理-新增自定义项表单
* Description:
* Date: 2023/2/9
*/
import React, { Component } from "react";
import {
WeaCheckbox,
WeaFormItem,
WeaInput,
WeaInputNumber,
WeaLocaleProvider,
WeaSearchGroup,
WeaSelect,
WeaTextarea
} from "ecCom";
import { salaryItemFields, valTakeOptions } from "./columns";
const getLabel = WeaLocaleProvider.getLabel;
class SalaryItemForm extends Component {
2023-02-09 17:24:51 +08:00
constructor(props) {
super(props);
this.state = {
salaryItemFieldsList: salaryItemFields
};
}
componentDidMount() {
const { salaryItemFieldsList } = this.state;
const { request, editable, record, isAdd = false, taxAgentAdminOption, isLedger = false } = this.props;
2025-06-19 13:43:35 +08:00
const { systemType = "", sharedType, valueType, useInEmployeeSalary, dataType, pattern } = request;
2023-02-09 17:24:51 +08:00
this.setState({
salaryItemFieldsList: _.map(salaryItemFieldsList, item => {
const { key } = item;
switch (key) {
case "useDefault":
2023-07-24 18:22:24 +08:00
case "dataType":
case "description":
return {
...item,
viewAttr: (!isLedger && ((editable && record.canEdit) || isAdd)) ? 2 : 1,
display: !isLedger
};
2023-10-20 14:41:42 +08:00
case "pattern":
case "roundingMode":
return { ...item, display: dataType === "number" };
case "width":
2023-09-06 14:27:23 +08:00
case "sortedIndex":
2024-01-10 14:43:07 +08:00
return {
...item,
label: getLabel(item.lanId, item.label),
2024-06-20 17:18:12 +08:00
display: !isLedger
2024-01-10 14:43:07 +08:00
};
2023-02-10 10:47:18 +08:00
case "useInEmployeeSalary":
return {
...item,
viewAttr: (editable && record.canEdit) || isAdd ? 2 : 1,
display: !isAdd
};
2023-02-09 17:24:51 +08:00
case "sharedType":
2023-02-09 19:34:40 +08:00
return {
...item,
viewAttr: (editable && record.canEdit) || isAdd ? 2 : 1,
display: systemType.toString() === "0" || isAdd
};
2023-02-09 17:24:51 +08:00
case "taxAgentIds":
2023-02-09 19:34:40 +08:00
return {
...item,
2023-02-10 10:47:18 +08:00
multiple: true,
2023-02-09 19:34:40 +08:00
viewAttr: (editable && record.canEdit) || isAdd ? 3 : 1,
2023-02-10 10:47:18 +08:00
display: (!_.isNil(sharedType) && sharedType.toString() === "1") && (!_.isNil(systemType) && systemType.toString() === "0"),
options: taxAgentAdminOption
};
case "hideDefault":
2023-07-24 11:14:22 +08:00
return {
...item,
viewAttr: 2,
tip: isLedger ? getLabel(111, "开启后,薪资核算不会展示该项目,但是不影响该项目的核算值") : item.tip
2023-07-24 11:14:22 +08:00
};
2023-02-10 10:47:18 +08:00
case "valueType":
return {
...item,
viewAttr: (useInEmployeeSalary.toString() === "0" && ((isLedger && record.canEdit) || (editable && record.canEdit) || isAdd)) ? 2 : 1
2023-02-09 19:34:40 +08:00
};
2024-05-21 15:58:28 +08:00
case "defaultValue":
return {
...item,
2025-06-19 13:43:35 +08:00
precision: pattern ? pattern : item.precision,
2024-05-21 17:33:47 +08:00
type: dataType === "number" ? "INPUTNUMBER" : "INPUT",
2024-06-28 16:57:05 +08:00
display: valueType && valueType.toString() === "1" && useInEmployeeSalary == 0,
2024-05-21 15:58:28 +08:00
viewAttr: (isLedger && record.canEdit) || (editable && record.canEdit) || isAdd ? 2 : 1
};
2023-02-09 17:24:51 +08:00
case "formulaContent":
2023-02-09 19:34:40 +08:00
return {
...item,
2023-07-25 16:16:39 +08:00
key: valueType.toString() === "3" ? "originSqlContent" : "originFormulaContent",
display: useInEmployeeSalary.toString() === "0" && valueType && (valueType.toString() === "2" || valueType.toString() === "3"),
viewAttr: (isLedger && record.canEdit) || (editable && record.canEdit) || isAdd ? 2 : 1
2023-02-09 19:34:40 +08:00
};
2023-02-09 17:24:51 +08:00
default:
break;
}
2023-02-09 19:34:40 +08:00
return {
...item,
2023-07-24 18:22:24 +08:00
viewAttr: (key === "name" && ((editable && record.canEdit && !isLedger) || isAdd)) ? 3 : (key !== "name" && ((editable && record.canEdit) || isAdd)) ? 2 : 1
2023-02-09 19:34:40 +08:00
};
2023-02-09 17:24:51 +08:00
})
});
}
2023-02-09 19:34:40 +08:00
handleChangeSalaryFiledItems = (key, v) => {
const { onChangeFieldsItem } = this.props;
const { salaryItemFieldsList } = this.state;
this.setState({
salaryItemFieldsList: _.map(salaryItemFieldsList, item => {
if (key === "sharedType" && item.key === "taxAgentIds") {
return { ...item, display: v === "1", viewAttr: 3 };
2023-10-20 14:41:42 +08:00
} else if (key === "dataType" && (item.key === "roundingMode" || item.key === "pattern")) {
return { ...item, display: v === "number" };
2024-05-21 17:33:47 +08:00
} else if (key === "dataType" && (item.key === "defaultValue")) {
return { ...item, type: v === "number" ? "INPUTNUMBER" : "INPUT" };
} else if (key === "valueType" && item.key === "defaultValue") {
return { ...item, display: v === "1" };
2024-06-19 11:24:59 +08:00
} else if (key === "pattern" && item.key === "defaultValue") {
return { ...item, precision: parseInt(v) };
2023-07-25 16:16:39 +08:00
} else if (key === "valueType" && (item.key === "originSqlContent" || item.key === "originFormulaContent")) {
2023-02-10 10:47:18 +08:00
return {
...item,
2023-07-25 16:16:39 +08:00
key: v === "3" ? "originSqlContent" : "originFormulaContent",
2023-02-10 10:47:18 +08:00
label: v === "2" ? "公式" : v === "3" ? "SQL" : "",
display: v === "2" || v === "3"
};
2023-02-09 19:34:40 +08:00
}
return { ...item };
})
}, () => {
2024-06-18 10:44:48 +08:00
if (key === "dataType") {
onChangeFieldsItem({ [key]: v, defaultValue: "" });
} else {
onChangeFieldsItem({ [key]: (key === "useDefault" || key === "useInEmployeeSalary" || key === "hideDefault") ? Number(v) : v });
}
2023-02-09 19:34:40 +08:00
});
};
render() {
2023-02-10 10:47:18 +08:00
const { userStatusList, request, onShowFormal } = this.props;
2023-02-09 17:24:51 +08:00
const { salaryItemFieldsList } = this.state;
return (
<WeaSearchGroup showGroup needTigger={false}>
{
2023-02-09 17:24:51 +08:00
_.map(salaryItemFieldsList, item => {
2024-06-19 11:24:59 +08:00
const { key, label, type, viewAttr, tip, options, display = true, multiple = false, precision = 0 } = item;
2023-02-09 19:34:40 +08:00
const value = !_.isNil(request[key]) ? request[key].toString() : "";
2023-02-09 17:24:51 +08:00
return <React.Fragment>
{
2023-02-09 17:24:51 +08:00
(type === "INPUT" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
2023-02-09 19:34:40 +08:00
<WeaInput viewAttr={viewAttr} value={value}
2023-08-31 15:02:56 +08:00
onClick={() => (key === "originSqlContent" || key === "originFormulaContent") && onShowFormal(request["name"])}
2023-02-09 19:34:40 +08:00
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/></WeaFormItem> :
2023-02-09 17:24:51 +08:00
(type === "SWITCH" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
2023-02-09 19:34:40 +08:00
<WeaCheckbox value={value} helpfulTip={tip} display="switch" viewAttr={viewAttr}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/>
2023-02-09 17:24:51 +08:00
</WeaFormItem> :
(type === "SELECT" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
<WeaSelect value={value} options={key !== "sharedType" ? options : userStatusList}
2023-02-10 10:47:18 +08:00
multiple={multiple} viewAttr={viewAttr}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/>
2023-02-09 17:24:51 +08:00
</WeaFormItem> :
(type === "RADIO" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
2023-02-09 19:34:40 +08:00
<WeaSelect value={value} options={valTakeOptions} detailtype={3} viewAttr={viewAttr}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/>
2023-02-09 17:24:51 +08:00
</WeaFormItem> :
(type === "TEXTAREA" && display) ?
2023-02-09 19:34:40 +08:00
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
<WeaTextarea value={value} viewAttr={viewAttr} minRows={3}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/>
</WeaFormItem> :
(type === "INPUTNUMBER" && display) ?
<WeaFormItem label={label} labelCol={{ span: 6 }} wrapperCol={{ span: 12 }}>
<React.Fragment>
2024-06-20 14:06:16 +08:00
<WeaInputNumber
value={key === "width" && value ? parseInt(value) : value}
precision={precision} viewAttr={viewAttr}
onChange={v => this.handleChangeSalaryFiledItems(key, v)}/>
2024-01-10 14:43:07 +08:00
{key === "width" && display &&
<span style={{ paddingLeft: 10, position: "absolute", marginTop: 4 }}>px</span>}
</React.Fragment>
</WeaFormItem> : null
}
2023-02-09 17:24:51 +08:00
</React.Fragment>;
})
}
</WeaSearchGroup>
);
}
}
export default SalaryItemForm;