/* eslint-disable no-inner-declarations */ import React, { Component } from 'react'; import InfiniteScroll from 'react-infinite-scroller'; import moment from 'moment'; // import getDepartMockData from './departmentMockData'; import { connect } from 'dva'; import { Form, Input, Button, Icon, Breadcrumb, Table, Modal, Tree, notification, TreeSelect, message, Alert, Row, Col, List, Spin, DatePicker } from 'antd'; import lodash from 'lodash'; import { gup } from '../../../utils/utils'; import AddDepartment from './AddDepartment'; import EditDepartment from './EditDepartment'; import AppDrawer from './AppDrawer'; import fImg from '../../../assets/images/frown.png'; import DepartSelect from '../../../components/user/DepartSelect'; const { TextArea } = Input; // import GetPlanBook from './getPlanBook'; import './less/depart.less'; import { systemComDepartGetDepartTree, //获取公司的组织架构数(含数据权限)新 systemComDepartGetOrgPersonList, //获取组织机构右边的人员列表(新) systemComDepartGetWebPerListByKeyword, /**web通过姓名/手机号码/身份证搜索人员信息*/ saveDepartAppAuthInfo, /**保存部门app通讯录权限设置信息*/ systemComDepartPageTreeType,//部门人员分页功能(包含部门、人员) systemComDepartSave, //部门新增-添加子部 systemComDepartDelete, //删除部门功能 systemComDepartUpdateLeaveDate, //部门批量离职----误报错误有使用----- systemComDepartGetTreeDepart, //选择部门 getTreeperBydepart, //选择人员 systemComDepartAdjustDepart, //调整部门人员 getOnlineInsBlbLink, enterpriseInsComInsGetOnlineInsBlbPreservationLink, //生成保全 enterpriseInsComInsSaveBookScheme, //保存方案书 // enterpriseInsComInsPromptInitEnterpriseIns, //是否需要保险提示 enterpriseInsComInsGetOnlineInsPerList, //获取投保人员信息 } from '../../../services/api'; const { confirm } = Modal; const { Search } = Input; const { TreeNode, DirectoryTree } = Tree; @connect( state => ({ profile: state.profile, global: state.global }) ) @Form.create() /** * 部门管理组件 */ export default class DepartmentManagement extends Component { constructor(props, context) { super(props, context); this.state = { departTreeData: [], //组织架构数据 接口获取 treeData: [], // 不含disable rightListShow: false, //组织架构右边是否展示,不展示显示遮罩层 requestData: { departId: '', perID: '' }, //请求表格数据的参数(部门id和人员id) departName: '', // 右边列表页的title展示 loadMore: false, //搜索人员列表没有更多了 drawerShow: false, // 搜索人员列表的展示的显示隐藏 perDrawerLoading: false, //搜索人员列表加载显示 hasMore: true, //搜索人员列表是否可以据悉加载 perList: [], // 搜索人员列表数据 searchData: { keyword: '', pageNumber: '1', pageSize: '10' }, searchListTotal: 0, //搜索列表的总数 breadCrumbArr: [], // 面包屑 perIds: '', dataSource: [], perTotal: 0, // modelInit: gup('model'), otherbook: gup('otherbook'), selectedRows: [], //选中的行 selectedRowsLength: '', selectedRowKeys: [], //选中的行key AddDepartmentVisible: false, EditDepartmentVisible: false, selectDepartmentVisible: false, appDrawerVisible: false, //设置app通讯录 getOnlineInsBlbVisible: false, // 保全model onlineInsBlbUrl: '', //获取相应保全的路径 TipsVisible: false, //展开的离职提示 TipsOKVisible: false, //确认离职提示 batchQuitData: [], //批量离职成功数据 searchValue: '', pos: '', dataList: [], expandedKeys: ["-1"], autoExpandParent: true, selectedKeys: ["-1"], newDepartId: '-1', // treeData: [ // //树 // { title: '', key: '', personCount: '' } // ], treeDataSearch: [{ title: '', key: '' }], /** * 抽屉需要 */ // placeholder: '请输入关键字', title: '', //当前标题 departId: '-1', //部门id chidrens: [], tableData: [], //组织架构的分页 pagenav: { current: 1, pageSize: 10, showQuickJumper: true, showSizeChanger: true, showTotal: total => `总共 ${total} 条`, onShowSizeChange: (current, pageSize) => { const pagenav = Object.assign({}, this.state.pagenav); pagenav.current = current; pagenav.pageSize = pageSize; this.setState({ pagenav }, () => { this.__getOrgPersonList(this.state.requestData); }); }, onChange: (page, pageSize) => { const pagenav = Object.assign({}, this.state.pagenav); pagenav.current = page; pagenav.pageSize = pageSize; this.setState({ pagenav }, () => { this.__getOrgPersonList(this.state.requestData); }); }, total: 0 }, //第一个离职提示的分页 tipPegenav: { current: 1, pageSize: 5, showQuickJumper: true, showSizeChanger: true, showTotal: total => `总共 ${total} 条`, onShowSizeChange: (current, pageSize) => { const tipPegenav = Object.assign({}, this.state.tipPegenav); tipPegenav.current = current; tipPegenav.pageSize = pageSize; this.setState({ tipPegenav }); }, onChange: (page, pageSize) => { const tipPegenav = Object.assign({}, this.state.tipPegenav); tipPegenav.current = page; tipPegenav.pageSize = pageSize; this.setState({ tipPegenav }); }, total: 0 }, //有离职失败时候的提示的分页 tipPegenav2: { current: 1, pageSize: 5, showQuickJumper: true, showSizeChanger: true, showTotal: total => `总共 ${total} 条`, onShowSizeChange: (current, pageSize) => { const tipPegenav2 = Object.assign({}, this.state.tipPegenav2); tipPegenav2.current = current; tipPegenav2.pageSize = pageSize; this.setState({ tipPegenav2 }); }, onChange: (page, pageSize) => { const tipPegenav2 = Object.assign({}, this.state.tipPegenav2); tipPegenav2.current = page; tipPegenav2.pageSize = pageSize; this.setState({ tipPegenav2 }); }, total: 0 }, reducepeoplevisible: false, visible: false, insurancetipsvisible: false, //提示模板 onlineUrl: '', //购买在线保险的url accessbookvisible: false, //获取方案书 // isIns: '', // comName:"",//企业名称 onlineInsPerDataSource: [], selectedRowKeysforOrder: '', reasonVisible: false, //离职原因弹窗 outReason: '', // 离职原因 outReasonDate: '', //选择的离职时间 requestDate: moment() //请求接口的时间用于控制离职时间 }; } componentDidMount() { // 获取到组织架构列表 this.__getDepartTree(data => { const { departId } = this.props.profile; // 判断数据里是否存在对应的部门id (防止切换账号后找不到对应的部门id) let item = null; function valueInData(data) { for(let i = 0; i < data.length; i++) { if(data[i].departId == departId) { item = data[i]; break; }else { if(data[i].childDepart) { valueInData(data[i].childDepart); } } } } // 初始化菜单栏 const initMenu = item => { if(item) { if (item.isExistsDataAuth == 0) { // 显示阴影 this.setState({ rightListShow: true }); } else { this.setState({ rightListShow: false, departName: item.departName, selectedKeys: [item.departId], expandedKeys: [item.parentDepartId?item.parentDepartId: '-1'], requestData: { departId: item.departId, perID: '' } }, () => { this.__getOrgPersonList(this.state.requestData); }); } } } valueInData(data); item = item || data[0]; initMenu(item); }); } /**递归部门数据 * @param {部门数据} treeData * @param {是否添加disable属性} 、通过treeData的isExistsDataAuth判断权限 */ recursionTreeData(treeData, hasDisable) { treeData = JSON.parse(JSON.stringify(treeData)); // TreeSelect组件所需值: title, value, key, children disabled return treeData.map(item => { item.title = item.departName; item.key = item.departId; item.value = item.departId; if (hasDisable) { // "isExistsDataAuth": "1", //权限 1有权限 0:没权限 item.disabled = item.isExistsDataAuth == 0; } else { // 没有权限的部门名称后面新增人数 item.title = `${item.departName}(${item.personCount})`; } // 不展示下级部门 // if(idArr.some(id => id == item.departId)) return item; if (item.childDepart) { item.children = this.recursionTreeData(item.childDepart, hasDisable); } return item; }); } /**不展示下级部门 * @param {treeData} 部门数据 * @param {idArr} 不展示下级部门的id数组 * @param {disabled} disabled * @param {isNext} 是否属于下级,如果是,直接disable */ disableNext(treeData, idArr, disabled = false, isNext) { treeData = JSON.parse(JSON.stringify(treeData)); return treeData.map(item => { if (disabled) { item.disabled = disabled; } if (item.children) { if (isNext) { item.children = this.disableNext(item.children, idArr, true, true); } else { if (idArr.some(id => id == item.departId)) { item.children = this.disableNext(item.children, idArr, true, true); } else { item.children = this.disableNext(item.children, idArr, false); } } } return item; }); } __getDepartTree(cb) { // 获取到组织架构列表 systemComDepartGetDepartTree().then(res => { // 初始化页面判断右边列表的展示 if (res.data[0] && res.data[0].isExistsDataAuth == 0) { this.setState({ rightListShow: true }); } this.setState({ departTreeData: this.recursionTreeData(res.data, true), //含有disable属性 editTreeData: this.recursionTreeData(res.data, true), treeData: this.recursionTreeData(res.data) }, () => { cb && cb(res.data); }); }); } /** *LYQ 2019-07-17 *获取列表数据 部门id和人员id只传一个 * @param { * departId, * perId * } data * @memberof DepartmentManagement */ __getOrgPersonList(data) { const POST_DATA = { pageSize: this.state.pagenav.pageSize, pageNumber: this.state.pagenav.current, ...data }; systemComDepartGetOrgPersonList(POST_DATA).then(response => { const { pageNumber, pageSize } = response.data; const tableData = response.data.data.map((val, i) => { val.key = i; val.number = (pageNumber - 1) * pageSize + i + 1; return val; }); const pagenav = Object.assign({}, this.state.pagenav); pagenav.total = response.data.total; this.setState({ tableData, selectedRows: [], selectedRowKeys: [], pagenav, requestDate: response.date }); }); } // 搜索人员数据 __getSearchPerList(cb) { const { keyword } = this.state.searchData; if (keyword.trim() == '') return; systemComDepartGetWebPerListByKeyword(this.state.searchData).then(res => { let loadMore = false; // 搜索列表的“没有更多了”的显示判断 if (this.state.searchData.pageNumber >= res.data.totalPage) { if (res.data.data.length == 0) { loadMore = false; } else { loadMore = true; } } else { loadMore = false; } this.setState({ loadMore, perList: [...this.state.perList, ...res.data.data], searchListTotal: res.data.total //搜索结果总数 }, () => { cb && cb(); }); }); } renderRightContainer() { return (

{this.state.departName ? this.state.departName : ''} {this.state.requestData.departId === '-1' || this.state.requestData.departId === undefined ? ( '' ) : ( )} { this.state.requestData.departId != '-1' && }

{ this.state.drawerShow && {this.state.departName} } { !this.state.drawerShow && {this.renderBread()} }
部门人员
{/* */}
{this.renderDepartMan()}
); } handlereducepeopleOk = () => { this.setState({ reducepeoplevisible: false, // 订单大于1,选择订单 visible: true }); }; handlereducepeopleCancel = () => { this.setState({ reducepeoplevisible: false }); }; // 选择订单 showModal = () => { this.setState({ visible: true }); }; handleOk = () => { this.setState({ visible: false }); }; handleCancel = () => { this.setState({ visible: false }); }; // 温馨提示 showsurancetipsModal = () => { this.setState({ insurancetipsvisible: true }); }; handlesuranceOk = e => { this.setState({ insurancetipsvisible: false, accessbookvisible: true }); }; handleonline = e => { this.setState({ insurancetipsvisible: false }); window.open(this.state.onlineUrl); }; handlesurancetipxCancel = e => { this.setState({ insurancetipsvisible: false // insurancetipvisible:true, }); }; handlesurancetipCancel = e => { this.setState({ // insurancetipvisible: false, insurancetipsvisible: false }); this.props.history.push( // 跳转到1-4-4 '/enterprise/company' ); }; // 获取方案书 showaccessbookModal = () => { this.setState({ accessbookvisible: true }); }; handlenextpeopleOk = e => { //获取方案书表单提交 e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { const obj = { contactper: values.contactper ? values.contactper : '', contactPhone: values.contactPhone ? values.contactPhone : '', comPerNum: values.comPerNum ? values.comPerNum : '', guaranteeAmountLow: values.guaranteeAmountLow ? values.guaranteeAmountLow : '', insAmountUp: values.insAmountUp ? values.insAmountUp : '', proCode: '' }; enterpriseInsComInsSaveBookScheme(obj).then( res => { console.log('成功信息-方案书values', res); // message.success("保存成功!"); }, error => { message.error(error); console.log('错误信息-方案书values', error); } ); this.props.re; this.setState({ accessbookvisible: false }); } }); }; handlereducepeopleCancel = e => { this.setState({ accessbookvisible: false, insurancetipsvisible: false, reducepeoplevisible: false }); }; handleSubmit = e => { e.preventDefault(); this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { console.log('表单提交中.........', values); } }); }; handleproductCancel = e => { this.setState({ accessbookvisible: true }); }; showsurancetipModal = () => { this.setState({ // insurancetipvisible: true, }); }; //在线购买保险的链接生成 messageOnline = () => { getOnlineInsBlbLink({ comId: this.props.global.companyInfo.comId }).then(data => { this.setState({ onlineUrl: data.data }); }); }; // 初始化温馨提示 // getPrimotInt = () => { // enterpriseInsComInsPromptInitEnterpriseIns({}).then(data => { // console.log('是否初始化', data); // this.setState({ // isIns: data.data.isIns // }); // if (this.state.modelInit === 'init') { // this.setState({ // insurancetipsvisible: true // }); // } // }, (err) => { // console.log(err); // }); // }; // 选择其他产品 getotherbook = () => { if (this.state.otherbook === 'init') { this.setState({ accessbookvisible: true }); } }; checkPhone = (rule, value, callback) => { if (value && !/^1[0-9]{10}$/.test(value)) { callback('请输入正确的手机号码!'); } else { callback(); } }; checkpeoplenum = (rule, value, callback) => { if (value && !/^[0-9]*$/.test(value)) { callback('请输入数字!'); } else { callback(); } }; // 温馨提示马上查看 rightCheckClick = () => { this.props.history.push(`/insurancemanagement/enterpriseinsurance`); }; //保存方案书 // saveBookSchema = () => { // enterpriseInsComInsSaveBookScheme({}).then(data => { // // this.setState({ // // onlineUrl: data.data // // }); // setTimeout(() => { // console.log("保存方案书",data); // },500); // }); // }; //保险选择 renderTable = () => { const rowSelection = { type: 'radio', // selectedRowKeys: this.state.selectedRowKeys, // onChange: selectedRowKeys => { // this.setState({ selectedRowKeys }); // }, selectedRowKeys: this.state.selectedRowKeysforOrder, onChange: (selectedRowKeys, selectedRows) => { // this.setState({ selectedRowKeysforOrder:selectedRowKeys }); this.setState({ selectedRowKeysforOrder: selectedRows[0].blbOrderId }); }, getCheckboxProps: record => ({ disabled: record.name === 'Disabled User' // Column configuration not to be checked }) }; const columns = [ { title: '订单号', dataIndex: 'blbOrderId', key: 'blbOrderId' }, { title: '保险产品', dataIndex: 'productName', key: 'productName' }, { title: '投保总人数', dataIndex: 'perNum', key: 'perNum' }, { title: '需保全人数', dataIndex: 'insPerCount', key: 'insPerCount' }, { title: '购买时间', dataIndex: 'buyTime', key: 'buyTime' } ]; return ( record.blbOrderId} // dataSource={this.state.dataSource} dataSource={this.state.onlineInsPerDataSource} /> ); }; //保全链接生成 enterpriseInsComInsGetOnlineInsBlbPreservationLink() { enterpriseInsComInsGetOnlineInsBlbPreservationLink({ // orderId: this.state.selectedRowKeys, orderId: this.state.selectedRowKeysforOrder, perIds: this.state.perIds, reviseType: '2' }) .then(res => { console.log(res, '保全链接生成-res'); this.setState({ visible: false, onlineInsBlbUrl: res.data }); // window.open(res.data); // this.newwin.location.href = res.data; }) .catch(err => console.log(err, '保全链接生成-err')); } /* 搜索----------------start */ onChange = e => { const { value } = e.target; let { treeData } = this.state; const { treeDataSearch } = this.state; if (value.trim().length > 0) { //输入搜索的数据不是空 treeData = treeDataSearch; } let expandedKeys = this.state.dataList .map(item => { if (item.title.indexOf(value) > -1) { return this.getParentKey(item.key, treeData); } return null; }) .filter((item, i, self) => item && self.indexOf(item) === i); if (value.trim().length === 0) { expandedKeys = [treeData[0].key]; } this.setState({ expandedKeys, searchValue: value, autoExpandParent: true }); }; getParentKey = (key, tree) => { let parentKey; for (let i = 0; i < tree.length; i++) { const node = tree[i]; if (node.children) { if (node.children.some(item => item.key === key)) { parentKey = node.key; } else if (this.getParentKey(key, node.children)) { parentKey = this.getParentKey(key, node.children); } } } return parentKey; }; generateList = data => { for (let i = 0; i < data.length; i++) { const node = data[i]; const { key, title } = node; this.state.dataList.push({ key, title }); //把部门名称跟人员名称合集 if (node.children) { this.generateList(node.children, node.key); } } }; //部门人员分页功能---(接口新增一个treeType) systemComDepartPageTreeType = (departId, treeType) => { systemComDepartPageTreeType({ // pageSize: 5000, // pageNumber: 1, pageSize: this.state.pagenav.pageSize, pageNumber: this.state.pagenav.current, departId: departId || this.state.departId, treeType }).then( response => { const tableData = response.data.data.map((val, i) => { val.key = i; return val; }); const pagenav = Object.assign({}, this.state.pagenav); pagenav.total = response.data.total; this.setState({ tableData, selectedRows: [], selectedRowKeys: [], pagenav }); }, err => { console.log(err, 'systemComDepartPage-err-部门人员分页功能s'); } ); }; //部门新增-添加子部门 systemComDepartSave = () => { systemComDepartSave({ departName: '', perID: '', parentDepartId: '' }).then( () => { this.setState({ tableData: this.state.data }); }, err => { console.log(err, 'systemComDepartSave-err-部门更新--编辑保存'); } ); }; //删除树结点 splicTreeNode = () => { const { treeData } = this.state; const posArr = this.state.pos.split('-').slice(1); if (posArr.length === 2) { treeData[posArr[0]].children.splice(posArr[1], 1); } if (posArr.length === 3) { treeData[posArr[0]].children[posArr[1]].children.splice(posArr[2], 1); } if (posArr.length === 4) { treeData[posArr[0]].children[posArr[1]].children[ posArr[2] ].children.splice(posArr[3], 1); } this.setState({ treeData, title: treeData[0].title, pos: '0-0' }); }; //获取你节点 getParentNode = () => { const { treeData } = this.state; const posArr = this.state.pos.split('-').slice(1); let parentNode = treeData[0]; if (posArr.length === 3) { parentNode = treeData[posArr[0]].children[posArr[1]]; } if (posArr.length === 4) { parentNode = treeData[posArr[0]].children[posArr[1]].children[posArr[2]]; } return parentNode; }; // 删除部门功能 systemComDepartDelete = () => { systemComDepartDelete({ departId: this.state.requestData.departId }).then( response => { notification['success']({ message: '删除部门成功' }); this.setState({ EditDepartmentVisible: false, departId: '-1' }); this.__getDepartTree(data => { // 初始化后判断右边列表的权限 if (data[0]) { if (data[0].isExistsDataAuth == 0) { // 显示阴影 this.setState({ rightListShow: true }); } else { this.setState({ pos: '', //更新pos重置面包屑 rightListShow: false, departName: data[0].departName, requestData: { departId: data[0].departId, perID: '' } }, () => { this.__getOrgPersonList(this.state.requestData); }); } } }); // this.splicTreeNode(); }, err => { console.log(err, 'systemComDepartDelete-err- 删除部门功能'); } ); }; //生成当前树的位置 generateTreeDataPosition = (treeData, pos) => { return treeData.map((val, i) => { const newObj = val; if (newObj.children && newObj.children.length > 0) { newObj.children = this.generateTreeDataPosition( newObj.children, `${pos}-${i}` ); } newObj.pos = `${pos}-${i}`; return newObj; }); }; //过滤掉treeType='2'(人员)的对象 filterTreeType = treeData => { return treeData.filter(val => { if (val.children && val.children.length > 0) { val.children = this.filterTreeType(val.children); } return val.treeType !== '2'; }); }; //选择部门 getTreeDepart = () => { systemComDepartGetTreeDepart({}).then( response => { let { data } = response; data = JSON.parse( JSON.stringify(data).replace(/\"children\":\[\]/g, '"isLeaf":true') ); data = this.generateTreeDataPosition(data, '0'); if (data.length > 0) { this.setState({ treeData: data, chidrens: data[0].children, // title: `${data[0].title}(${data[0]['personCount']})`,//标题去掉统计数值 title: `${data[0].title}`, departId: data[0].key, expandedKeys: [data[0].key], selectedKeys: [data[0].key] }); } }, err => { console.log(err, 'getTreeDepart-选择部门-err'); } ); }; generaUserData = (data, keyvalue) => { return data.map(val => { if (val.clildren && val.clildren.length > 0) { val.clildren.filter(val1 => { if (val1.title.indexOf(keyvalue) !== -1) { return true; } else { return false; } }); return val; } return val; }); }; //选择人员 getTreeperBydepart = () => { getTreeperBydepart({}).then( response => { const data = JSON.parse( JSON.stringify(response.data).replace( /\"children\":\"\"/g, '"isLeaf":true' ) ); // 获取总人数 function getPerTotal(array) { let total = 0; function recursion(array) { array.forEach(item => { // treeType为2的时候是人员 if (item.treeType == '2') { total++; } if (item.children) { recursion(item.children); } }); } recursion(array); return total; } this.setState({ perTotal: getPerTotal(data) }); const allData = this.generateTreeDataPosition(data, '0'); //这个数据里面包含人员跟部门 this.generateList(allData); this.setState({ treeDataSearch: allData }); const publicData = JSON.parse(JSON.stringify(allData)); const dataOnlyDepart = JSON.parse( //拆分出来只有部门的数据 JSON.stringify( this.generateTreeDataPosition(this.filterTreeType(publicData), '0') ).replace(/\"children\":\[\]/g, '"isLeaf":true') ); if (dataOnlyDepart.length > 0) { this.setState({ treeData: dataOnlyDepart, chidrens: dataOnlyDepart[0].children, // title: `${data[0].title}(${data[0]['personCount']})`,//标题去掉统计数值 title: `${dataOnlyDepart[0].title}`, // departId: dataOnlyDepart[0].key, // expandedKeys: [dataOnlyDepart[0].key], // selectedKeys: [dataOnlyDepart[0].key] }); } }, err => { console.log(err, 'getTreeperBydepart-选择人员-err'); } ); }; //部门批量操作功能 // systemComDepartBatchInsertDepart = () => { // systemComDepartBatchInsertDepart({}).then( // response => { // console.log( // response, // 'systemComDepartBatchInsertDepart-部门批量操作功能-response' // ); // }, // err => { // console.log( // err, // 'systemComDepartBatchInsertDepart-部门批量操作功能-err' // ); // } // ); // }; //调整部门人员 systemComDepartAdjustDepart = () => { const perIds = []; let oldDepartId = ''; const { selectedRows, newDepartId } = this.state; selectedRows.forEach(item => { perIds.push(item.perId); oldDepartId = item.departId || ''; }); systemComDepartAdjustDepart({ perIds: JSON.stringify(perIds), oldDepartId, newDepartId }).then( response => { console.log( response, 'systemComDepartAdjustDepart-调整部门人员-response' ); this.__getDepartTree(); this.__getOrgPersonList(this.state.requestData); }, err => { console.log(err, 'systemComDepartAdjustDepart-调整部门人员-err'); } ); }; //部门批量离职 systemComDepartUpdateLeaveDate = () => { const leaveDate = this.state.outReasonDate; if (leaveDate == "") return notification.error({ message: '请选择日期' }); const perIds = []; this.state.selectedRows.forEach(val => { perIds.push(val.perId); }); this.setState({ perIds: perIds.join(',') }); const leaveReason = this.state.outReason == '' ? '员工自动提交离职申请,现已解除劳动合同关系,系统离职处理' : this.state.outReason; systemComDepartUpdateLeaveDate({ perIds: perIds.join(','), orgId: this.state.departId, leaveReason, leaveDate }).then( response => { // 2019-06-14 人员从组织架构离职时,减员弹窗去除(冠楠) // this.enterpriseInsComInsGetOnlineInsPerList(response.data); this.setState({ batchQuitData: response.data, leaveReason: '' }); //存在失败的数据 if (response.data.failList.length > 0) { this.setState({ TipsOKVisible: true }); const tipPegenav2 = Object.assign({}, this.state.tipPegenav2); tipPegenav2.total = response.data; } //没有失败数据,且有成功数据 && (是服务公司或者自行招用保安单位) if ( response.data.failCount === 0 && response.data.successCount > 0 && (this.props.global.companyInfo.institutionType == '0102' || this.props.global.companyInfo.institutionType == '0104')) { const sucCount = response.data.successCount; Modal.success({ title: sucCount + '个员工全部离职成功!', content: '可在离职记录中查看离职成功的人员。', okText: '确定', onOk: () => { this.props.dispatch({ type: 'insurance/showQuitModal', payload: { title: '保险减员提示', warningText: '*保险产品的新增、减员等操作可通过【人员投保管理】-【未投保】【已投保】选择相应人员进行保全增减操作!', contentText: '存在在保的离职人员共count位,请及时对离职人员办理保险保全的减员操作,以降低保险成本!', okCallBack: () => { this.props.history.push('/insurancemanagement/insurance-management?tab=1'); } } }); } }); } this.setState({ selectedRows: [], selectedRowKeys: [] }); // 重新渲染列表 this.__getOrgPersonList(this.state.requestData); // this.getTreeperBydepart(); // //删除记录存在失败的情况 // if(response.data.fileCount > 0) { // } }, err => { console.log(err, 'systemComDepartUpdateLeaveDate-部门批量离职-err'); } ); }; //获取选择的人员是否有投保险 enterpriseInsComInsGetOnlineInsPerList = batchQuitData => { const idCardNo = []; this.state.selectedRows.forEach(val => { idCardNo.push(val.idCardNo.toString()); }); enterpriseInsComInsGetOnlineInsPerList({ idCardNoJson: JSON.stringify(idCardNo) }).then( response => { // 保险员减员提示 //1、离职时,都有投保,但只有失败人员,没有成功人员,不显示减员弹框 //2、离职成功并且有投保,才显示保险减员 if (batchQuitData.failCount > 0 && batchQuitData.successCount === 0) { return; } if (batchQuitData.successCount > 0 && response.data.length > 0) { this.setState({ reducepeoplevisible: true, onlineInsPerDataSource: response.data }); } }, err => { console.log(err); } ); }; // 递归展示树状组织架构 renderTreeNodes = (data, parentkey, parentTitle) => { return data.map((item, index) => ( { (() => { if (item.childDepart.length > 0) { parentkey++; return this.renderTreeNodes(item.childDepart, parentkey); } })() } ) ); }; // 下级部门组别 handleList = () => { if (this.state.chidrens !== '' && this.state.chidrens !== undefined) { return this.state.chidrens.map((val, i) => { if (val.treeType === '2') { return ''; } return (
  • { this.setState({ chidrens: val.children && val.children.length > 0 ? val.children : [], pos: val.pos, title: val.title, departId: val.key }); this.systemComDepartPage(val.key); }} key={i} > {val.title}({val.personCount ? val.personCount : 0})
  • ); }); } }; //确定是否要删除部门 showConfirm = () => { confirm({ title: '提示', content: '是否确认删除', okText: '确认', cancelText: '取消', onOk: () => { this.systemComDepartDelete(); }, onCancel() { console.log('Cancel'); } }); }; //确定是否要离职 withdrawnShowConfirm = () => { const mobiles = []; const name = []; const tipPegenav = Object.assign({}, this.state.tipPegenav); tipPegenav.total = this.state.selectedRows.length; this.state.selectedRows.forEach(val => { name.push(val.name); mobiles.push(val.mobilePhone); }); this.setState({ selectedRowsLength: this.state.selectedRows.length, reasonVisible: false }); if (mobiles.length === 0) { notification['warning']({ message: '请选择人员' }); return; } this.setState({ TipsVisible: true }); }; handleTipsOk = () => { this.systemComDepartUpdateLeaveDate(); // this.enterpriseInsComInsGetOnlineInsPerList(); this.setState({ TipsVisible: false, reasonVisible: false }); // // 保险员减员提示 // //判断对应的人员有没有投保,没有投保就不显示保险减员 // if (this.state.dataSource.length > 0 && this.state.batchQuitData.successCount !== 0) { // this.setState({ // reducepeoplevisible: true, // }); // } }; handleTipsCancel = () => { this.setState({ TipsVisible: false, TipsOKVisible: false, reasonVisible: false }); }; //部门人员表格 renderDepartMan = () => { // 表格选择设置 const rowSelection = { selectedRowKeys: this.state.selectedRowKeys, onChange: (selectedRowKeys, selectedRows) => { this.setState({ selectedRows, selectedRowKeys }); }, getCheckboxProps: record => ({ disabled: record.name === 'Disabled User' // Column configuration not to be checked }) }; const columns = [ { title: '序号', dataIndex: 'number', key: 'number', render: text => { text = parseInt(text, 10); return {text}; } }, { title: '姓名', dataIndex: 'name', key: 'name', render: text =>
    {text}
    }, { title: '身份证', key: 'idCardNo', dataIndex: 'idCardNo', // render: text => text.replace(/(\d{4}).*(\d{3})/,'$1***********$2') }, { title: '手机号', key: 'mobilePhone', dataIndex: 'mobilePhone', // render: text => text.replace(/(\d{3})\d{4}(\d{4})/,'$1****$2') }, { title: '人员类别', key: 'perTypeName', dataIndex: 'perTypeName' }, { title: '激活状态', key: 'isAppActive', render: (text, record) => (
    {record.isAppActive === '1' ? '已激活' : '未激活'}
    ) }, { title: '认证状态', key: 'authStatus', render: (text, record) => (
    {(() => { let result = ''; switch (record.authStatus) { case '0': result = '未认证'; break; case '1': result = '已认证'; break; case '2': result = '认证中'; break; case '3': result = '认证失败'; break; } return result; })()} {/* {record.authStatus === '1' ? '已认证' : '未认证'} */}
    ) }, { title: '操作', key: 'option', render: (text, record) => ( { this.props.history.push( `/PersonnelRecruitment/departmentmanagement/PersonnelInformationNav?perId=${record.perId}&authStatus=${record.authStatus}` ); }} > 修改 ) } ]; return (
    ); }; //获取当前节点的子节点 getPosChidrens = (target, data) => { return lodash.get( data, lodash.toPath( target .split('-') .slice(1) .map(p => `[${p}]`) .join('.children') ) ); }; //保存编辑部门表单提交 handleSubmit = e => { e.preventDefault(); this.props.form.validateFieldsAndScroll((err, values) => { console.log(values, 'handleSubmit-values'); if (!err) { console.log('Received values of form: ', values); } }); }; getNodeDate = (treeData, index) => { const { pos } = this.state; let posArrs = pos.split('-'); posArrs = posArrs.slice(1); for (let i = 0; i < index; i++) { if (i === 0) { return treeData[posArrs[i]]; } else { return treeData[posArrs[i]]; } } }; getPosArray() { // 通过部门数据和当前所在位置获取面包屑 const { departTreeData, pos } = this.state; const posArr = pos.split('-'); posArr.shift(); let parentArray = []; let posResult = []; // 通过pos获取到面包屑的数组 posArr.forEach((key, index) => { if (index == 0) { if (departTreeData[key]) { // posResult.push(departTreeData[key].departName); posResult.push({ departName: departTreeData[key].departName, departId: departTreeData[key].departId }); parentArray = departTreeData[key].childDepart; } } else { if (parentArray[key]) { // posResult.push(parentArray[key].departName); posResult.push({ departName: parentArray[key].departName, departId: parentArray[key].departId }); parentArray = parentArray[key].childDepart; } } }); if (posResult.length == 0 && this.state.departTreeData[0]) { // posResult.push(this.state.departName); posResult.push({ departName: this.state.departTreeData[0].departName, departId: this.state.departTreeData[0].departId }); } return posResult; } //面包屑 renderBread = () => { // 通过部门数据和当前所在位置获取面包屑 // const { departTreeData, pos } = this.state; // const posArr = pos.split('-'); // posArr.shift(); // let parentArray = []; // let posResult = []; // // 通过pos获取到面包屑的数组 // posArr.forEach((key, index) => { // if(index == 0) { // if(departTreeData[key]) { // posResult.push(departTreeData[key].departName); // parentArray = departTreeData[key].childDepart; // } // }else { // if(parentArray[key]) { // posResult.push(parentArray[key].departName); // parentArray = parentArray[key].childDepart; // } // } // }); // if(posResult.length == 0) { // posResult.push(this.state.departName); // } const posResult = this.getPosArray(); return ( posResult.map((item, index) => { return {item.departName} }) // { // }} // > // {i === posArrs.length - 1 ? nodeData.title : {nodeData.title}} // ); }; render() { const { treeDataSearch, departTreeData, searchValue } = this.state; if (searchValue.trim().length > 0) { departTreeData = treeDataSearch; } const TipsColumns = [ { title: '姓名', dataIndex: 'name', render: text =>
    {text}
    }, { title: '手机号', dataIndex: 'mobilePhone' }, { title: '所属组织', render: (text, record) => {record.orgName ? record.orgName : this.state.departName} } ]; const TipsOkColumns = [ { title: '姓名', dataIndex: 'name', render: text =>
    {text}
    }, { title: '手机号', dataIndex: 'mobilePhone' }, { title: '所属组织', dataIndex: 'orgName' }, { title: '校验提示', dataIndex: 'errorMsg', render: (text, record) => ( {text} ) } ]; return (
    {this.props.global.companyInfo.authStatus === '1' ? (
    { const { value } = e.target; this.setState({ drawerShow: value !== '', perList: [] }); if (value == '') { // 等于空的时候通过pos找到对应的departId const currentDepartID = this.getPosArray()[0] ? this.getPosArray()[this.getPosArray().length - 1].departId : this.state.departTreeData[0].departId; this.setState({ departName: this.getPosArray()[0] ? this.getPosArray()[this.getPosArray().length - 1].departName : this.state.departTreeData[0].departName, requestData: { perID: '', departId: currentDepartID } }, () => { this.__getOrgPersonList(this.state.requestData); }); } else { this.setState({ searchData: { keyword: value, pageNumber: '1', pageSize: '10' } }, () => { this.__getSearchPerList(); }); } }} maxLength={20} /> {/*
    */} { // 部门展示 !this.state.drawerShow && this.state.treeData.length > 0 &&
    {/* 查询下级部门功能 */} { this.setState({ expandedKeys }); }} onSelect={(selectedKeys, e) => { this.setState({ selectedKeys }); // 获取到对应部门的departId, isExistsDataAuth // "isExistsDataAuth": "1", //权限 1请求接口 0:不请求 加载阴影 const { departId, isExistsDataAuth, pos, departName } = e.node.props; this.props.dispatch({ type: 'profile/changeDepartId', departId }); // console.log(this.props.saveDepartId,'this.props.dispatchthis.props.dispatch'); // this.props.saveDepartId({departId}); setTimeout(() => { console.log(this.props.profile); }, 1000); this.setState({ editTreeData: this.disableNext(this.state.departTreeData, [departId]) }); if (isExistsDataAuth == 0) { // 显示阴影 this.setState({ rightListShow: true }); } else {//发起请求,更新列表 this.setState({ departName: departName, pos, rightListShow: false, requestData: { departId, perID: '' } }, () => { this.__getOrgPersonList(this.state.requestData); }); } }} > {/* {this.renderTreeNodes(departTreeData, 0)} */}
    } {/* 人员列表 */} { this.state.drawerShow &&
    {/* */}

    注:只能检索权限范围内的人员信息。

    { this.state.perList.length == 0 &&

    搜索无记录

    } { let { perList } = this.state; this.setState({ perDrawerLoading: true }); if (perList.length > this.state.searchListTotal) { this.setState({ loadMore: true, perDrawerLoading: false, hasMore: false }); return; } let { pageNumber } = this.state.searchData; pageNumber++; this.setState({ searchData: { ...this.state.searchData, pageNumber } }); this.__getSearchPerList(() => { this.setState({ perDrawerLoading: false }); }); }} hasMore={!this.state.perDrawerLoading && this.state.hasMore} useWindow={false} > ( { console.log(item.departName); // 更新右边表格 const departId = item.departId; const perID = item.perId; this.setState({ rightListShow: false, departId, departName: item.departName ? item.departName : this.state.departTreeData[0].departName, requestData: { departId, perID }, pagenav: { pageSize: '10', current: 1 } }, () => { this.__getOrgPersonList(this.state.requestData); }); // this.setState({ // drawerShow: false // }); }} > { return (
    {item.departName ? item.departName : this.state.departTreeData[0].departName} {item.idCardNo} {item.mobilePhone}
    ); })()} /> {/*
    {item.departName}
    */}
    )} > {this.state.loading && (
    )} {this.state.loadMore && (
    没有更多了
    )}
    }
    { // 右边显示部分 (() => { // 是否限制阴影 if (!this.state.rightListShow) { return this.renderRightContainer(); } else { return (

    您没有该部门的管理权限

    ); } })() }
    ) : (
    )} { this.state.selectDepartmentVisible && { if (this.state.newDepartId === '') { notification['error']({ message: '请选择新的部门' }); return; } this.setState({ selectDepartmentVisible: false }); this.systemComDepartAdjustDepart(); }} onCancel={() => { this.setState({ selectDepartmentVisible: false }); }} > { this.setState({ newDepartId: value.indexOf('-1') == 0 ? '-1' : value.split('-')[0] }); }} /> {/* { console.log(newDepartId, 'TreeSelect-newDepartId'); this.setState({ newDepartId }); }} /> */} } {/* 弹出添加子部门-抽屉 */} { this.__getDepartTree(); this.__getOrgPersonList(this.state.requestData); }} ok={open => { this.setState({ AddDepartmentVisible: open }); }} /> {/* 弹出编辑部门-抽屉 */} { // 更新组织架构和列表 this.__getDepartTree(() => { // 更新title this.setState({ departName }); this.__getOrgPersonList(this.state.requestData); }); }} ok={open => { this.setState({ EditDepartmentVisible: open }); }} /> {/* app设置 */} { this.setState({ appDrawerVisible: false }); }} onOk={data => { if (data.limitSeeAppSwitch == 1 && !data.limitSeeAppType) return notification.error({ message: '请选择类型' }); // 开关为开启的时候判断是否有指定对应的部门 if ( data.limitSeeAppSwitch == 1 && data.limitSeeAppType == '4' && data.visibleDepartIds == '' ) return notification.error({ message: '请选择指定部门' }); saveDepartAppAuthInfo(data).then(res => { this.setState({ appDrawerVisible: false }); }); }} onChange={visible => { this.setState({ appDrawerVisible: visible }) }} /> {/* 保险员减员提示 */} { this.setState({ reducepeoplevisible: false, visible: true }); }} > 查看保险订单 ]} >

    {/* 本次离职人员共 {this.state.selectedRows.length} 位,[保险日期]已为其中 {this.state.dataSource.length} 位员工购买过团意险产品[产品名称](订单号:[订单编号]),企业可对离职人员办理保险保全的减员操作,以降低保险成本! */} {/* 本次离职人员共 {this.state.selectedRowsLength} 位,其中已为 {this.state.dataSource.length} 位员工购买过团意险保险产品,企业可对离职人员办理保险保全的减员操作,以降低保险成本! */} 本次离职人员共 {this.state.selectedRowsLength}{' '} 位,其中有员工购买过团意险保险产品,企业可对离职人员办理保险保全的减员操作,以降低保险成本!

    {/* 订单大于1时,选择订单 */} { // if (!this.state.selectedRowKeys) { // message.error('请选择订单'); // return null; // } if (!this.state.selectedRowKeysforOrder) { message.error('请选择订单'); return null; } else { // this.newwin = window.open('about:blank'); this.setState({ visible: false, getOnlineInsBlbVisible: true }); this.enterpriseInsComInsGetOnlineInsBlbPreservationLink(); } }} onCancel={this.handleCancel} > {this.renderTable()} {/* 初始化时保险弹窗 */} {/* { this.setState({ [field]: value }); }} isIns={this.state.isIns} accessbookvisible={this.state.accessbookvisible} insurancetipsvisible={this.state.insurancetipsvisible} /> */} {/* 离职原因弹窗 */} { const leaveDate = this.state.outReasonDate; if (leaveDate == "") return notification.error({ message: '请选择日期' }); this.withdrawnShowConfirm(); }} onCancel={() => this.setState({ reasonVisible: false })} >
    *离职时间: { // return current && current > moment().endOf('day'); return (current && current < moment(this.state.requestDate).startOf('day')) || (current && current > moment(this.state.requestDate).endOf('day')); }} onChange={(date, dateString) => { this.setState({ outReasonDate: dateString }); }} /> 离职原因:
    注:
    1、若不填写,则自动写入默认的离职原因;
    2、批量离职时,离职原因共用。
    1、离职后将取消关联的任务、考勤组,医社保记录中将自动移除离职人员,离职人员对应的劳动合同也将变更为终止;
    2、人员在线缴费的报名费用、保单信息需要请到相应管理页面人工处理。
    {/* 离职结果 */}
    {this.state.batchQuitData.successCount} 个员工离职成功,{' '} {this.state.batchQuitData.failCount}{' '} 个员工离职失败,请核对。离职失败的员工请根据提示调整后再离职。离职成功的人员可在离职记录中查看。
    this.setState({ getOnlineInsBlbVisible: false }) } width={1150} footer={[ ]} >