import React, { PureComponent } from 'react'; import { connect } from 'dva'; import style from 'styled-components'; import { // Tabs, // Select, Input, Button, message, Modal, // Icon, DatePicker, // Table, // List, // Card, Form, Radio, TreeSelect, // Checkbox, // Cascader, Row, Col, Breadcrumb } from 'antd'; import moment from 'moment'; import "moment/locale/zh-cn"; import { checkMember } from '../../utils/utils'; import { getTreeperBydepart, //部门人员 taskSalaryTempGetConfigSalaryType, taskSalaryTempGetComSalaryTempInfo, //查询企业薪酬模板详情 taskSalaryTempSaveComSalaryTemp, //保存 taskSalaryTempCheckSalaryTempPer //校验薪资模板人员 } from '../../services/api'; import './salarymanagement.less'; const { MonthPicker } = DatePicker; const monthFormat = 'YYYY-MM'; // const { TabPane } = Tabs; // const dateFormat = 'YYYY-MM-DD'; // const { confirm } = Modal; const FormItem = Form.Item; const RadioGroup = Radio.Group; // const CheckboxGroup = Checkbox.Group; // const { Option } = Select; const { TextArea } = Input; @connect(state => ({ monitor: state.monitor })) @Form.create() export default class Add extends PureComponent { constructor(props, context) { super(props, context); this.state = { comSalaryTempId: this.props.match.params.comSalaryTempId, type: this.props.match.params.type, treeData: [], //人员数据 salaryListArr: [], //模板配置 visible: false, //过滤人员弹窗 existsPerList: [], //过滤人员 valuesSave: {}, //保存模板存放数据 comSalaryTemp: {}, //编辑详情 perList: [], //编辑人员选中详情 taskPerArrayList: [], //不包含没有权限的人员的id taskPerArrayNoIdList: [] //只有没有权限的人员的id }; } componentDidMount = () => { this.getTreeperBydepart(); this.taskSalaryTempGetConfigSalaryType(); this.taskSalaryTempGetComSalaryTempInfo(); }; /*********************ajax请求********************* */ // 获取薪酬项目配置 新增 taskSalaryTempGetConfigSalaryType = () => { if (this.state.comSalaryTempId === '00') { taskSalaryTempGetConfigSalaryType().then( response => { const resData = response.data; const tmp = resData.map(v => { return { categoryName: v.categoryName, salaryProjectList: v.salaryTypeList }; }); this.setState({ salaryListArr: tmp }, () => { console.log(this.state.salaryListArr, 'response'); }); }, err => { console.log(err, 'err-获取薪酬项目配置'); } ); } }; //查询企业薪酬模板详情 编辑 taskSalaryTempGetComSalaryTempInfo = () => { if (this.state.comSalaryTempId !== '00') { console.log(this.state.comSalaryTempId); taskSalaryTempGetComSalaryTempInfo({ comSalaryTempId: this.state.comSalaryTempId }).then(data => { console.log('查询企业薪酬模板详情', data); const resData = data.data; if (data.data) { this.setState({ salaryListArr: resData.categoryList, comSalaryTemp: resData.comSalaryTemp, perList: resData.perList, taskPerArrayNoIdList: resData.perList //先把所有数据给他,之后在删除 }); if (this.state.treeData.length > 0) { //如果是组织机构先加载完,就在这里处理删除没有权限人员的id const perIdList = this.removeNOpowerId( this.state.perList, this.state.treeData ); const { setFieldsValue } = this.props.form; setFieldsValue({ perList: perIdList }); } } }); } }; //部门人员 getTreeperBydepart = () => { getTreeperBydepart().then( response => { console.log(response, 'response-部门人员-getTreeperBydepart'); const responseData = checkMember(response.data); this.setState({ treeData: responseData }); if (this.state.perList.length > 0) { //如果选择参与人员的数据先加载了,就在这里处理删除没有权限的人员id const treeData = JSON.parse(JSON.stringify(responseData)); const perIdList = this.removeNOpowerId(this.state.perList, treeData); const { setFieldsValue } = this.props.form; setFieldsValue({ perList: perIdList }); } }, err => { console.log(err, 'err-部门人员-getTreeperBydepart'); } ); }; //删掉没有权限的人员id removeNOpowerId = (perList, treeData) => { treeData.map(item => { if (item.children && item.children.length > 0) { item.children = this.removeNOpowerId(perList, item.children); } }); if (treeData.length > 0) { treeData.map(tdata => { perList.filter((item, i) => { if (item === tdata.key) { //给的人员id有在树结构里面 this.state.taskPerArrayList.push(item); this.state.taskPerArrayNoIdList.splice(i, 1); } }); }); } console.log(this.state.taskPerArrayNoIdList); return this.state.taskPerArrayList; }; taskSalaryTempSaveComSalaryTemp = values => { taskSalaryTempSaveComSalaryTemp(values).then( response => { console.log(response, '保存'); this.props.history.push('/salarymanagement/template'); }, err => { console.log(err, 'err-保存'); } ); }; handleSubmit = e => { e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { console.log(values, 'values'); if (this.state.taskPerArrayNoIdList.length > 0) { values.perList = values.perList.concat( this.state.taskPerArrayNoIdList ); } if (!values.perList || values.perList.length === 0) { message.error('请选择参与人员'); return; } if (values.perList.length > 1000) { message.error('选择人员最多1000人'); return; } values.startYears = moment(values.startYears).format('YYYY-MM'); values.endYears = moment(values.endYears).format('YYYY-MM'); values.perList = values.perList.toString(); if (values.startYears > values.endYears) { message.error('结束月份必须大于等于开始月份'); return; } const checkPerObj = { startYears: values.startYears, endYears: values.endYears, perList: values.perList }; // 编辑加comSalaryTempId if (this.state.comSalaryTempId !== '00') { values.comSalaryTempId = this.state.comSalaryTempId; checkPerObj.comSalaryTempId = this.state.comSalaryTempId; } //校验薪资模板人员,没有重复人员,直接保存,否则,弹框后再保存 taskSalaryTempCheckSalaryTempPer(checkPerObj).then( response => { console.log(response, '校验薪资模板人员'); const existsPerList = response.data.existsPerList; if (existsPerList.length === 0 || !existsPerList) { this.taskSalaryTempSaveComSalaryTemp(values); } else { this.setState({ existsPerList, visible: true, valuesSave: values }); } }, err => { console.log(err, 'err-校验薪资模板人员'); } ); } }); }; // 校验人员 handleCancel = () => { this.setState({ visible: false }); }; handleOk = () => { const { valuesSave } = this.state; this.taskSalaryTempSaveComSalaryTemp(valuesSave); this.setState({ visible: false }); }; //加载特殊字段薪酬 renderSalaryList = () => { const { getFieldDecorator } = this.props.form; const formItemLayoutNew = { labelCol: { xs: { span: 24 }, sm: { span: 8 } }, wrapperCol: { xs: { span: 24 }, sm: { span: 12 }, md: { span: 12 } } }; const formItemLayoutCheckBox = { labelCol: { xs: { span: 3 }, sm: { span: 4 } }, wrapperCol: { xs: { span: 12 }, sm: { span: 12 }, md: { span: 12 } } }; const arr = this.state.salaryListArr.map((v, i) => { return (
有{this.state.existsPerList.length} 人在该时段内已有模板,需先将其再旧模板中减去,再重新关联。
人员名单: {this.state.existsPerList.join('、')}。