383 lines
12 KiB
JavaScript
383 lines
12 KiB
JavaScript
/*
|
||
* Author: 黎永顺
|
||
* Description: 岗位编号设置
|
||
* Date: 2022-06-06 09:37:39
|
||
* LastEditTime: 2022-06-09 11:33:03
|
||
*/
|
||
import React, { Component, Fragment } from "react";
|
||
import { inject, observer } from "mobx-react";
|
||
import { Button, message } from "antd";
|
||
import {
|
||
WeaTop,
|
||
WeaFormItem,
|
||
WeaCheckbox,
|
||
WeaSearchGroup,
|
||
WeaSelect,
|
||
WeaHelpfulTip,
|
||
} from "ecCom";
|
||
import StartReservedNumberSet from "../branchNumSetting/components/startReservedNumberSet";
|
||
import NumberComposition from "../branchNumSetting/components/numberComposition";
|
||
import { i18n } from "../../../public/i18n";
|
||
import moment from "moment";
|
||
import "../branchNumSetting/index.less";
|
||
|
||
@inject("numberSet")
|
||
@observer
|
||
export default class ResourceNumberSet extends Component {
|
||
constructor() {
|
||
super();
|
||
this.state = {
|
||
options: [],
|
||
loading: false,
|
||
dataSource: [],
|
||
startNumberInfo: {
|
||
columns: [],
|
||
dataSource: [],
|
||
},
|
||
subCompanyInfo: {
|
||
details: [],
|
||
serialenable: "0",
|
||
dateSerial: {
|
||
enable: "0",
|
||
key: "",
|
||
},
|
||
},
|
||
};
|
||
}
|
||
|
||
componentDidMount() {
|
||
this.getCodeSetting();
|
||
}
|
||
|
||
getCodeSetting = () => {
|
||
const { numberSet } = this.props;
|
||
numberSet
|
||
.getCodeSetting({ serialtype: "USER" })
|
||
.then(({ api_status, details, serialenable, dateSerial = {} }) => {
|
||
if (api_status && !_.isEmpty(details)) {
|
||
this.setState({
|
||
subCompanyInfo: { details, serialenable, dateSerial },
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
handleSubmit = () => {
|
||
let promise = new Promise((resolve, reject) => {
|
||
const { numberSet } = this.props;
|
||
const { dataSource, subCompanyInfo } = this.state;
|
||
const { serialenable, dateSerial } = subCompanyInfo;
|
||
const details = _.map(dataSource, (it, showorder) => {
|
||
const { numField, value: rulevalue } = it;
|
||
return {
|
||
ruletype: _.upperCase(numField),
|
||
rulevalue,
|
||
showorder,
|
||
};
|
||
});
|
||
const payload = {
|
||
datas: JSON.stringify({
|
||
serialenable,
|
||
details,
|
||
dateSerial,
|
||
serialtype: "USER",
|
||
}),
|
||
};
|
||
this.setState({ loading: true });
|
||
numberSet.saveOrUpdateCodeSetting(payload).then(({ api_status }) => {
|
||
this.setState({ loading: false });
|
||
if (api_status) {
|
||
message.success("保存成功");
|
||
resolve(api_status);
|
||
} else {
|
||
reject("接口调用失败");
|
||
}
|
||
});
|
||
});
|
||
return promise;
|
||
};
|
||
|
||
handleChangeCode = (data) => {
|
||
const tmpV = _.filter(
|
||
data,
|
||
(it) =>
|
||
it.numField === "year" ||
|
||
it.numField === "month" ||
|
||
it.numField === "day"
|
||
);
|
||
this.setState({
|
||
dataSource: _.cloneDeep(data),
|
||
options: _.map(tmpV, (it) => {
|
||
const { numFieldName: showname, numField: key } = it;
|
||
return { key: _.upperCase(key), showname };
|
||
}),
|
||
});
|
||
};
|
||
|
||
handleSetNumber = (type) => {
|
||
this.handleSubmit().then(() => {
|
||
const { numberSet } = this.props;
|
||
if (type === "start") {
|
||
const payload = {
|
||
coderuleid: 4,
|
||
type: "",
|
||
dateStart: moment().format("YYYY"),
|
||
dateEnd: moment().format("YYYY"),
|
||
subCompanyId: "",
|
||
deptId: "",
|
||
jobtitlesId: "",
|
||
};
|
||
numberSet
|
||
.getStartNumForm(payload)
|
||
.then(({ api_status, columns, dataSource }) => {
|
||
if (api_status) {
|
||
this.setState({
|
||
startNumberInfo: { columns, dataSource },
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
numberSet.getAdvanceSearchCondition();
|
||
numberSet.getSearchReservedCodeList({
|
||
serialtype: "USER",
|
||
checkboxType: "multi",
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
handleChangeTable = (newColumns, datas) => {
|
||
this.setState({
|
||
startNumberInfo: {
|
||
...this.state.startNumberInfo,
|
||
columns: newColumns,
|
||
dataSource: datas,
|
||
},
|
||
});
|
||
};
|
||
|
||
handleSubmitStartNumber = () => {
|
||
const { numberSet } = this.props;
|
||
const payload = {
|
||
datas: JSON.stringify({
|
||
coderuleid: 4,
|
||
...this.state.startNumberInfo,
|
||
}),
|
||
};
|
||
numberSet.saveStartNum(payload).then(({ api_status }) => {
|
||
if (api_status) {
|
||
message.success("保存成功");
|
||
this.numberSetRef.handleClose();
|
||
}
|
||
});
|
||
};
|
||
|
||
/**
|
||
* name: 删除预留编号
|
||
* param {*} ids
|
||
* return {*}
|
||
*/
|
||
deleteReservedNumber = (ids) => {
|
||
const { numberSet } = this.props;
|
||
numberSet.deleteReservedCodeById({ ids }).then(({ api_status }) => {
|
||
if (api_status) {
|
||
message.success("删除成功");
|
||
numberSet.getSearchReservedCodeList({
|
||
serialtype: "USER",
|
||
checkboxType: "multi",
|
||
});
|
||
}
|
||
});
|
||
};
|
||
/**
|
||
* name:新增预留编号
|
||
* return {*}
|
||
*/
|
||
handleAddReservedNumber = () => {
|
||
const { numberSet } = this.props;
|
||
numberSet.getReservedCodeFrom({ serialtype: "USER" });
|
||
};
|
||
/**
|
||
* name: 保存预留设置
|
||
* param {*} params
|
||
* return {*}
|
||
*/
|
||
handleSubmitReservedNumber = (params) => {
|
||
const { numberSet } = this.props;
|
||
const payload = { ...params, serialtype: "USER" };
|
||
numberSet.saveReservedCode(payload).then(({ api_status }) => {
|
||
if (api_status) {
|
||
message.success("保存成功");
|
||
this.numberSetRef.handleCloseReservedModal();
|
||
numberSet.getSearchReservedCodeList({
|
||
serialtype: "USER",
|
||
checkboxType: "multi",
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
/**
|
||
* name:提示文本
|
||
* return {*}
|
||
*/
|
||
helpContent = () => {
|
||
return (
|
||
<div>
|
||
<p>开启后,可根据设置的部门编号规则自动生成部门编号,涉及场景如下:</p>
|
||
<p>1.手动新建和手动编辑部门时可选择重新生成编号和选择预留部门编号;</p>
|
||
<p>2.导入人员-添加时,新创建的部门可自动生成部门编号;</p>
|
||
<p>3.组织结构导入-添加新部门且部门编号列为空时可自动生成部门编号;</p>
|
||
<p>【注意】开启前请先确认部门编号字段已启用!</p>
|
||
</div>
|
||
);
|
||
};
|
||
render() {
|
||
const { options, subCompanyInfo, loading, startNumberInfo } = this.state;
|
||
const { numberSet } = this.props;
|
||
const { details, serialenable, dateSerial } = subCompanyInfo;
|
||
const btns = [
|
||
<Button type="primary" onClick={this.handleSubmit} loading={loading}>
|
||
保存
|
||
</Button>,
|
||
];
|
||
const dropMenuDatas = [
|
||
{
|
||
key: "save",
|
||
disabled: false,
|
||
icon: <i className="icon-coms-Preservation" />,
|
||
content: "保存",
|
||
onClick: (key) => this.handleSubmit(),
|
||
},
|
||
];
|
||
return (
|
||
<div className="dept-number-set">
|
||
<WeaTop
|
||
title={i18n.label.userNumSetting()}
|
||
icon={<i className="icon-coms-hrm" />}
|
||
iconBgcolor="#217346"
|
||
buttons={btns}
|
||
showDropIcon={true}
|
||
dropMenuDatas={dropMenuDatas}
|
||
/>
|
||
<div className="dept-content">
|
||
<div className="switch-wrapper">
|
||
<WeaFormItem
|
||
label="人员编号自动生成"
|
||
labelCol={{ span: 8 }}
|
||
wrapperCol={{ span: 16 }}>
|
||
<WeaCheckbox
|
||
value={serialenable}
|
||
helpfulTip={this.helpContent}
|
||
helpfulTipProps={{ placement: "top" }}
|
||
display="switch"
|
||
id="num-set-switch"
|
||
onChange={(checkVal) =>
|
||
this.setState({
|
||
subCompanyInfo: {
|
||
...subCompanyInfo,
|
||
serialenable: checkVal,
|
||
},
|
||
})
|
||
}
|
||
/>
|
||
</WeaFormItem>
|
||
</div>
|
||
{/* 内容区 */}
|
||
{serialenable === "1" && (
|
||
<Fragment>
|
||
<div className="numberComposition">
|
||
<WeaSearchGroup title={"编号组成"} showGroup>
|
||
<NumberComposition
|
||
onChange={this.handleChangeCode}
|
||
dataSource={details}
|
||
/>
|
||
</WeaSearchGroup>
|
||
</div>
|
||
{!_.isEmpty(options) && (
|
||
<div className="codeNumbering">
|
||
<WeaSearchGroup title={"编号流水规则"} showGroup>
|
||
<div className="switch-wrapper">
|
||
<WeaFormItem
|
||
label="日期单独流水"
|
||
labelCol={{ span: 8 }}
|
||
wrapperCol={{ span: 16 }}>
|
||
<div className="codeNumbering-operateWapper">
|
||
<WeaCheckbox
|
||
value={dateSerial.enable ? dateSerial.enable : "0"}
|
||
display="switch"
|
||
id="dept-date-set-switch"
|
||
onChange={(isSingle) =>
|
||
this.setState({
|
||
subCompanyInfo: {
|
||
...subCompanyInfo,
|
||
dateSerial: {
|
||
...dateSerial,
|
||
enable: isSingle,
|
||
},
|
||
},
|
||
})
|
||
}
|
||
/>
|
||
{dateSerial.enable == "1" && (
|
||
<WeaSelect
|
||
options={options}
|
||
value={dateSerial.key}
|
||
detailtype={3}
|
||
supportCancel
|
||
onChange={(key) =>
|
||
this.setState({
|
||
subCompanyInfo: {
|
||
...subCompanyInfo,
|
||
dateSerial: {
|
||
...dateSerial,
|
||
key,
|
||
},
|
||
},
|
||
})
|
||
}
|
||
/>
|
||
)}
|
||
<WeaHelpfulTip
|
||
width={200}
|
||
title="开启后可设置按年、按月或按天单独流水,如设置按年单独流水,那每年的1月1日开始流水号从001开始重新流水。"
|
||
placement="topLeft"
|
||
/>
|
||
</div>
|
||
</WeaFormItem>
|
||
</div>
|
||
</WeaSearchGroup>
|
||
</div>
|
||
)}
|
||
<div className="startReservedNumberSet">
|
||
<WeaSearchGroup
|
||
title={"起始编号及预留编号设置"}
|
||
showGroup
|
||
center>
|
||
<StartReservedNumberSet
|
||
ref={(dom) => (this.numberSetRef = dom)}
|
||
onSet={this.handleSetNumber}
|
||
loading={loading}
|
||
startNumberInfo={startNumberInfo}
|
||
onChange={this.handleChangeTable}
|
||
onSaveStartNumber={this.handleSubmitStartNumber}
|
||
onDeleteReservedNumber={this.deleteReservedNumber}
|
||
onAddReservedNumber={this.handleAddReservedNumber}
|
||
onSubmitReservedNumber={this.handleSubmitReservedNumber}
|
||
onSearchReservedNumberset={() =>
|
||
numberSet.getSearchReservedCodeList({
|
||
serialtype: "USER",
|
||
checkboxType: "multi",
|
||
})
|
||
}
|
||
/>
|
||
</WeaSearchGroup>
|
||
</div>
|
||
</Fragment>
|
||
)}
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|
||
}
|