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

219 lines
10 KiB
JavaScript

import React from "react";
import { inject, observer } from "mobx-react";
import { Button, Dropdown, Menu, message, Modal } from "antd";
import { WeaInputSearch, WeaLoadingGlobal, WeaLocaleProvider, WeaTop } from "ecCom";
import * as API from "../../apis/item";
import SalaryItemsTable from "./salaryItemsTable";
import { toDecimal_n } from "../../util";
import SystemSalaryItemModal from "./systemSalaryItemModal";
import CustomSalaryItemSlide from "./customSalaryItemSlide";
import SyncToSalaryAccountSetDialog from "./syncToSalaryAccountSetDialog";
import LogDialog from "../../components/logViewModal";
import SalaryItemImportDialog from "./salaryItemImport";
import "./index.less";
const { getLabel } = WeaLocaleProvider;
@inject("salaryItemStore", "taxAgentStore", "salaryFileStore")
@observer
export default class SalaryItem extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "", isQuery: false, loading: false, sysVisible: false,
customItemDialog: { visible: false, title: "", buttons: [] },// 自定义薪资项弹窗
syncSalarySetDialog: { visible: false, id: "" }, // 同步到薪资账套弹窗
logDialogVisible: false, filterConditions: "[]", selectedRowKeys: [],
salaryItemImpDialog: { visible: false, title: getLabel(24023, "数据导入") }
};
}
handleDeleteItem = (recordId) => {
const { selectedRowKeys, isQuery } = this.state;
const params = recordId ? [recordId] : selectedRowKeys;
if (_.isEmpty(params)) {
message.warning(getLabel(111, "请勾选数据!"));
return;
}
Modal.confirm({
title: getLabel(131329, "信息确认"),
content: getLabel(111, "确认删除吗?"),
onOk: () => {
API.deleteItem(params).then(({ status, errormsg }) => {
if (status) {
message.success(getLabel(111, "操作成功!"));
this.setState({ isQuery: !isQuery });
} else {
message.error(errormsg);
}
});
}
});
};
handleValidateForm = () => {
return new Promise((resolve) => {
const { salaryItemStore: { itemsForm: form } } = this.props;
const { formulaId, valueType, sharedType, taxAgentIds } = form.getFormParams();
let taxAgentValidate = true, formulaValidate = true;
if (sharedType === "1" && !taxAgentIds) taxAgentValidate = false;
if (valueType !== "1" && !formulaId) formulaValidate = false;
resolve({ taxAgentValidate, formulaValidate });
});
};
handleSalaryItem = (type) => {
const { customItemDialog: { id }, isQuery } = this.state;
const { salaryItemStore: { itemsForm: form } } = this.props;
Promise.all([form.validateForm(), this.handleValidateForm()])
.then(([f1, f2]) => {
if (f1.isValid && f2.taxAgentValidate && f2.formulaValidate) {
const { formulaContent, valueType, dataType, defaultValue, pattern, ...formData } = form.getFormParams();
const key = valueType === "2" ? "originFormulaContent" : valueType === "3" ? "originSqlContent" : "formulaContent";
this.setState({ loading: true });
API.saveItem({
...formData, valueType, dataType, pattern, [key]: formulaContent, id,
defaultValue: dataType === "number" ? toDecimal_n(defaultValue, parseInt(pattern)) : defaultValue
}).then(({ status, errormsg }) => {
this.setState({ loading: false });
if (status) {
this.setState({ isQuery: !isQuery }, () => {
message.success(getLabel(111, "操作成功"));
type === "SAVECREATE" && form.updateFields({
name: { value: "" }, formulaContent: { value: "" }, formulaId: { value: "" }
});
type !== "SAVECREATE" && this.setState({
customItemDialog: { ...this.state.customItemDialog, visible: false, id: "" }
});
});
} else {
message.error(errormsg);
}
});
} else {
!f1.isValid && f1.showErrors();
!f2.taxAgentValidate && f1.showError("taxAgentIds", getLabel(111, "\"可见性范围\"未填写"));
!f2.formulaValidate && f1.showError("formulaContent", getLabel(111, `\"${form.getFormDatas().valueType.valueSpan}\"未填写`));
this.forceUpdate();
}
});
};
onDropMenuClick = (key, targetid = "") => {
switch (key) {
case "log":
this.setState({
logDialogVisible: true,
filterConditions: targetid ? `[{\"connectCondition\":\"AND\",\"columIndex\":\"targetid\",\"type\":\"=\",\"value\":\"${targetid}\"}]` : "[]"
});
break;
case "export":
WeaLoadingGlobal.start();
const { selectedRowKeys } = this.state;
const promise = API.exportSalaryitem({ ids: selectedRowKeys });
WeaLoadingGlobal.destroy();
break;
case "import":
this.setState({
salaryItemImpDialog: {
...this.state.salaryItemImpDialog, visible: true
}
});
break;
case "customAdd":
case "edit":
const { taxAgentStore: { PageAndOptAuth } } = this.props;
const { loading } = this.state, showOperateBtn = PageAndOptAuth.opts.includes("admin");
const editTitle = !showOperateBtn ? getLabel(111, "查看自定义薪资项目") : getLabel(111, "修改自定义薪资项目");
const title = key === "edit" ? editTitle : getLabel(111, "新建自定义薪资项目");
const buttons = key === "edit" ? [
<Button type="ghost" onClick={() => this.setState({
syncSalarySetDialog: { visible: true, id: targetid }
})}>{getLabel(111, "同步到薪资账套")}</Button>,
<Button type="primary" loading={loading}
onClick={() => this.handleSalaryItem("SAVE")}>{getLabel(111, "保存")}</Button>
] : [
<Button type="primary" loading={loading}
onClick={() => this.handleSalaryItem("SAVE")}>{getLabel(111, "保存")}</Button>,
<Button type="ghost" loading={loading}
onClick={() => this.handleSalaryItem("SAVECREATE")}>{getLabel(111, "保存并继续创建")}</Button>
];
this.setState({
customItemDialog: {
visible: true, title, buttons: showOperateBtn ? buttons : [], id: targetid
}
});
break;
case "delete":
this.handleDeleteItem(targetid);
break;
case "sysAdd":
this.setState({ sysVisible: true });
break;
default:
break;
}
};
render() {
const { taxAgentStore: { PageAndOptAuth } } = this.props;
const {
selectedRowKeys, logDialogVisible, filterConditions, name, isQuery, customItemDialog, sysVisible,
salaryItemImpDialog
} = this.state;
const showOperateBtn = PageAndOptAuth.opts.includes("admin");
const menu = (
<Menu onClick={({ key }) => this.onDropMenuClick(key)}>
<Menu.Item key="sysAdd">{getLabel(111, "新增系统薪资项")}</Menu.Item>
</Menu>
);
let buttons = [
<Dropdown.Button overlay={menu} type="primary"
onClick={() => this.onDropMenuClick("customAdd")}>{getLabel(111, "新增自定义薪资项")}</Dropdown.Button>,
<Button type="ghost" onClick={() => this.handleDeleteItem()}>{getLabel(32136, "批量删除")}</Button>,
<WeaInputSearch value={name} onChange={val => this.setState({ name: val })}
placeholder={getLabel(111, "请输入名称")} onSearch={() => this.setState({ isQuery: !isQuery })}/>
];
let dropMenuDatas = [
{ key: "import", icon: <i className="icon-coms02-Template-import1"/>, content: getLabel(111, "导入") },
{ key: "export", icon: <i className="iconfont icon-daochu"/>, content: getLabel(111, "导出") },
{ key: "log", icon: <i className="iconfont icon-caozuorizhi32"/>, content: getLabel(545781, "操作日志") }
];
!showOperateBtn && (buttons = buttons.slice(-1));
!showOperateBtn && (dropMenuDatas = dropMenuDatas.slice(-1));
return (
<React.Fragment>
<WeaTop title={getLabel(111, "薪资项目管理")} icon={<i className="icon-coms-fa"/>} iconBgcolor="#F14A2D"
buttons={buttons} showDropIcon onDropMenuClick={this.onDropMenuClick} dropMenuDatas={dropMenuDatas}
className="salaryProjectManagement">
<div className="salaryItems_content">
<SalaryItemsTable {...this.props} name={name} isQuery={isQuery} showOperateBtn={showOperateBtn}
selectedRowKeys={selectedRowKeys} onDropMenuClick={this.onDropMenuClick}
onChange={val => this.setState({ selectedRowKeys: val })}/>
</div>
</WeaTop>
{/*添加系统薪资项目*/}
<SystemSalaryItemModal visible={sysVisible} onSearch={() => this.setState({ isQuery: !isQuery })}
onCancel={(callback) => this.setState({ sysVisible: false }, () => callback && callback())}/>
{/*同步薪资账套*/}
<SyncToSalaryAccountSetDialog
{...this.state.syncSalarySetDialog}
onCancel={() => this.setState({ syncSalarySetDialog: { visible: false, id: "" } })}/>
{/*操作日志*/}
<LogDialog visible={logDialogVisible} logFunction="salaryitem" filterConditions={filterConditions}
onCancel={() => this.setState({ logDialogVisible: false })}/>
{/* 导入*/}
<SalaryItemImportDialog {...salaryItemImpDialog}
onCancel={callback => {
this.setState({
salaryItemImpDialog: { ...salaryItemImpDialog, visible: false }
}, () => callback && this.setState({ isQuery: !isQuery }));
}}/>
{/*新增编辑自定义薪资项目*/}
<CustomSalaryItemSlide {...customItemDialog} onSearch={() => this.setState({ isQuery: !isQuery })}
showOperateBtn={showOperateBtn}
onClose={callback => this.setState({
customItemDialog: { ...customItemDialog, visible: false, id: "" }
}, () => callback && callback())}/>
</React.Fragment>
);
}
}