人力资源
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

975 lines
54 KiB

import React, { useEffect, useState, useMemo } from 'react';
import { connect } from 'react-redux';
import { Select, Input, Button, Tooltip, DatePicker, Table } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';
import ReactECharts from 'echarts-for-react';
import * as echarts from 'echarts';
import DeleteModal from '../components/deleteModal';
import PersonnelModal from '../components/personnelModal';
import moment from 'moment'
import { UserAttribute } from '$utils'
import { isAuthorized } from '$utils'
import '../style.less'
const Rest = (props) => {
const { dispatch, actions, user, loading, socket, history } = props
const { humanAffairs } = actions;
const [option, setOption] = useState({});
const [leaveoption, setLeaveOption] = useState({});
const [tableData, setTableData] = useState([]) //表格数据
const [leaveData, setLeaveData] = useState([]) //表格数据
const [tableStatistic, setTableStatistic] = useState({}) //加班总数据
const [leaveStatistic, setLeaveStatistic] = useState({}) //请假总数据
const [deleteModal, setDeleteModal] = useState(false) //删除弹框
const [personnelModal, setPersonnelModal] = useState(false);//档案弹框
const [columns, setColumns] = useState([//表格属性
{
title: "实例号",
dataIndex: "storyId",
key: 'storyId',
render: (text, r, index) => {
return <span style={{ color: '#1890FF' }}>{text}</span>;
},
}, {
title: "事由",
dataIndex: "reason",
key: 'reason',
render: (text, r, index) => {
return text;
},
}, {
title: "类型",
dataIndex: "compensate",
key: 'compensate',
render: (text, r, index) => {
return text;
},
}, {
title: "发起时间",
dataIndex: "createTime",
key: 'createTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "开始时间",
dataIndex: "startTime",
key: 'startTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "结束时间",
dataIndex: "endTime",
key: 'endTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "核定时间",
dataIndex: "duration",
key: 'duration',
render: (text, r, index) => {
return (text / 60 / 60 + '小时');
},
},
])
const [leaveColumns, setLeaveColumns] = useState([//表格属性
{
title: "实例号",
dataIndex: "storyId",
key: 'storyId',
render: (text, r, index) => {
return <span style={{ color: '#1890FF' }}>{text}</span>;
},
}, {
title: "事由",
dataIndex: "reason",
key: 'reason',
render: (text, r, index) => {
return text;
},
}, {
title: "类型",
dataIndex: "type",
key: 'type',
render: (text, r, index) => {
return text;
},
}, {
title: "发起时间",
dataIndex: "createTime",
key: 'createTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "开始时间",
dataIndex: "startTime",
key: 'startTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "结束时间",
dataIndex: "endTime",
key: 'endTime',
render: (text, r, index) => {
return moment(text).format('YYYY-MM-DD HH:mm');
},
}, {
title: "核定时间",
dataIndex: "duration",
key: 'duration',
render: (text, r, index) => {
return (text / 60 / 60 + '小时');
},
},
])
const [pepUserCode, setPepUserCode] = useState('');
const [pepUserId, setPepUserId] = useState('');
const [pepObj, setPepObj] = useState({});
const scroll = useMemo(() => ({ y: 248 }), []);
const [startDate, setStartDate] = useState('');//开始时间
const [endDate, setEndDate] = useState('');//结束时间
useEffect(() => {
setPepUserCode(history?.location?.search.slice(1).split('-')[0])
setPepUserId(history?.location?.search.slice(1).split('-')[1])
peopleDetail()
}, [])
useEffect(() => {
getWorkOption()//加班信息
getLeaveOption()//请假信息
}, [startDate, endDate])
function peopleDetail() {
dispatch(humanAffairs.getMemberList({ keywordTarget: 'number', keyword: history?.location?.search.slice(1).split('-')[0] })).then((res) => {//搜索项企用户
if (res.success) {
setPepObj(res.payload?.data?.rows[0])
}
})
}
function getWorkOption() {//加班折线图
let date = [];
let showdate = []
let showdate1 = []
dispatch(humanAffairs.getMemberOvertime({ pepUserId: history?.location?.search.slice(1).split('-')[1], startDate: startDate, endDate: endDate })).then((res) => {//搜索项企用户
if (res.success) {
setTableData(res.payload?.data?.data)
setTableStatistic(res.payload?.data)
let textdate = [];
for (let i = 0; i < res.payload?.data?.dayStatisticData?.length; i++) {
if (textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM') && ev.compensate == res.payload.data.dayStatisticData[i].compensate
}) !== -1) {
textdate[textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM') && ev.compensate == res.payload.data.dayStatisticData[i].compensate
})].num
=
textdate[textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM') && ev.compensate == res.payload.data.dayStatisticData[i].compensate
})].num + res.payload.data.dayStatisticData[i].duration / 3600
}
else {
textdate.push({
time: moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM'),
num: res.payload.data.dayStatisticData[i].duration / 3600,
compensate: res.payload.data.dayStatisticData[i].compensate
})
}
}
for (let l = 0; l < textdate.length; l++) {
if (textdate[l].compensate == '调休') {
showdate.push([textdate[l].time, textdate[l].num])
}
else {
showdate1.push([textdate[l].time, textdate[l].num])
}
}
if (!startDate && !endDate) {
for (let i = 0; i < 12; i++) {
date.unshift(moment(new Date()).subtract(i, 'months').format('YYYY/MM'));
}
}
else {
let nowdate = moment(startDate).format('YYYY/MM')
date.push(nowdate)
for (let o = 0; o < 10000; o++) {
if (nowdate !== moment(endDate).format('YYYY/MM')) {
nowdate = moment(nowdate).add(1, 'months').format('YYYY/MM')
date.push(nowdate)
}
else {
break
}
}
}
let data = {
legend: {
data: ["调休", "折算"],
left: 'right',
icon: 'roundRect',
itemHeight: 3, // 粗细
},
color: ['#0F7EFB', '#FE9812'], //两条折线的颜色
xAxis: [
{
boundaryGap: false,
data: date,
},
],
yAxis: [
{
type: "value",
name: '小时'
},
],
dataZoom: [
{
id: "dataZoomX",
type: "slider",
start: 0,
end: 100,
handleIcon:
"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z",
handleSize: "80%",
},
],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
name: "调休",
type: "line",
areaStyle: {
color: 'rgba(14,156,255,0.5)',
opacity: 0.1
},
smooth: true,
data: showdate,
},
{
name: "折算",
type: "line",
areaStyle: {
color: 'rgba(254,152,18,0.2)',
},
smooth: true,
data: showdate1,
},
],
}
setOption(data)
}
})
}
function getLeaveOption() {//请假折线图
let date = [];
let showdate = []
dispatch(humanAffairs.getMemberVacate({ pepUserId: history?.location?.search.slice(1).split('-')[1], startDate: startDate, endDate: endDate })).then((res) => {//搜索项企用户
if (res.success) {
setLeaveData(res.payload?.data?.data)
let year = 0;
let compassionate = 0;
let sick = 0;
let other = 0;
let all = 0;
for (let i = 0; i < res.payload?.data?.statistic.length; i++) {
if (res.payload?.data?.statistic[i].type == '事假') {
compassionate = compassionate + (res.payload?.data?.statistic[i].sumDuration / 60 / 60)
}
else if (res.payload?.data?.statistic[i].type == '病假') {
sick = sick + (res.payload?.data?.statistic[i].sumDuration / 60 / 60)
}
else if (res.payload?.data?.statistic[i].type == '年休假') {
year = year + (res.payload?.data?.statistic[i].sumDuration / 60 / 60)
}
else {
other = other + (res.payload?.data?.statistic[i].sumDuration / 60 / 60)
}
all = all + (res.payload?.data?.statistic[i].sumDuration / 60 / 60)
}
setLeaveStatistic({
compassionate, sick, year, other, all
})
let textdate = [];
for (let i = 0; i < res.payload?.data?.dayStatisticData?.length; i++) {
if (textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM')
}) !== -1) {
textdate[textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM')
})].num
=
textdate[textdate.findIndex((ev) => {
return ev.time == moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM')
})].num + res.payload.data.dayStatisticData[i].duration / 3600
}
else {
textdate.push({
time: moment(res.payload.data.dayStatisticData[i].day).format('YYYY/MM'),
num: res.payload.data.dayStatisticData[i].duration / 3600
})
}
}
for (let l = 0; l < textdate.length; l++) {
showdate.push([textdate[l].time, textdate[l].num])
}
if (!startDate && !endDate) {
for (let i = 0; i < 12; i++) {
date.unshift(moment(new Date()).subtract(i, 'months').format('YYYY/MM'));
}
}
else {
let nowdate = moment(startDate).format('YYYY/MM')
date.push(nowdate)
for (let o = 0; o < 10000; o++) {
if (nowdate !== moment(endDate).format('YYYY/MM')) {
nowdate = moment(nowdate).add(1, 'months').format('YYYY/MM')
date.push(nowdate)
}
else {
break
}
}
}
let data = {
legend: {
data: ["请假"],
left: 'right',
icon: 'roundRect',
itemHeight: 3, // 粗细
},
color: ['#0F7EFB', '#FE9812'], //两条折线的颜色
xAxis: [
{
boundaryGap: false,
data: date,
},
],
yAxis: [
{
type: "value",
name: '小时'
},
],
dataZoom: [
{
id: "dataZoomX",
type: "slider",
start: 0,
end: 100,
handleIcon:
"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z",
handleSize: "80%",
},
],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
name: "请假",
type: "line",
areaStyle: {
color: 'rgba(14,156,255,0.5)',
opacity: 0.1
},
smooth: true,
data: showdate,
},
],
}
setLeaveOption(data)
}
})
}
function handleChange(date) {
if (date.length > 1) {
setStartDate(moment(date[0]).format('YYYY-MM-DD'))
setEndDate(moment(date[1]).format('YYYY-MM-DD'))
}
else {
setStartDate('')
setEndDate('')
}
}
return (
<>
<div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}>
<div style={{ color: 'rgba(0,0,0,0.45)', fontSize: 14 }}>人事管理</div>
<div style={{ color: 'rgba(0,0,0,0.45)', fontSize: 14, margin: '0px 8px' }}>/</div>
<div style={{ color: 'rgba(0,0,0,0.45)', fontSize: 14 }}>档案中心</div>
<div style={{ color: 'rgba(0,0,0,0.45)', fontSize: 14, margin: '0px 8px' }}>/</div>
<div style={{ color: 'rgba(0,0,0,0.45)', fontSize: 14 }}>人员档案</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>
<div style={{ color: '#033C9A', fontSize: 14 }}>档案详情</div>
</div>
<div style={{ background: '#FFFFFF', boxShadow: '0px 0px 12px 2px rgba(220,222,224,0.2)', borderRadius: 2, padding: '20px 0px 20px 19px ', marginTop: 12 }}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
<div style={{ display: 'flex', alignItems: 'baseline' }}>
<div style={{ width: 20, height: 20, marginRight: 10, cursor: "pointer" }} onClick={() => {
history.goBack();
}}>
<img src="/assets/images/hrImg/back.png" alt="" style={{ width: '100%', height: '100%' }} />
</div>
<div style={{ width: 0, height: 20, borderLeft: '3px solid #0F7EFB', borderTop: '3px solid transparent', borderBottom: '3px solid transparent' }}></div>
<div style={{ fontFamily: "YouSheBiaoTiHei", fontSize: 24, color: '#033C9A', marginLeft: 8 }}>{pepObj?.userName}的个人档案</div>
</div>
<div style={{ display: 'flex', marginRight: 20 }}>
{
isAuthorized('EDITPROFILE') ? <div style={{ padding: '6px 20px', background: '#0F7EFB', color: '#FFFFFF', fontSize: 14, cursor: "pointer" }}
onClick={() => {
setPersonnelModal(true);
}}
>
编辑档案
</div> : ''
}
{
isAuthorized('DELETEFILES') ? <div style={{ padding: '6px 20px', background: '#FF5254', color: '#FFFFFF', fontSize: 14, cursor: "pointer", marginLeft: 20 }}
onClick={() => { setDeleteModal(true) }}
>
删除档案
</div> : ''
}
</div>
</div>
<div style={{ borderBottom: '1px solid #DCDEE0', margin: '16px 0px 16px -20px' }}></div>
<div style={{ display: 'flex', width: '100%' }}>
<div style={{ width: 160, height: 240, marginLeft: 17 }}>
<img src={pepObj.idPhoto ? '/_file-server/' + pepObj.idPhoto : '/assets/images/hrImg/defaultAvatar.png'} alt="" style={{ width: '100%', height: '100%' }} />
</div>
<div style={{ marginLeft: 40, marginTop: 8, width: '61.452%' }}>
<div style={{ display: 'flex' }}>
{/* 基本信息 */}
<div style={{ width: '60%' }}>
<div style={{ color: '#4A4A4A', fontSize: 14, fontWeight: 'bold' }}>
基本信息
</div>
<div style={{ display: 'flex', marginTop: 13 }}>
<div style={{ display: 'flex', width: '40.82%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 48 }}>
证件号
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.idNumber || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '59.18%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
联系方式
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.phoneNumber || '暂无'}
</div>
</div>
</div>
<div style={{ display: 'flex', marginTop: 8 }}>
<div style={{ display: 'flex', width: '40.82%' }}>
<div style={{ display: 'flex', width: '45.57%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 48, textAlign: 'end' }}>
姓名
</div>
<div style={{ color: '#005ABD', fontSize: 13 }}>
{pepObj.userName || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '54.43%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 48, textAlign: 'end' }}>
性别
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.gender || '暂无'}
</div>
</div>
</div>
<div style={{ display: 'flex', width: '59.18%' }}>
<div style={{ display: 'flex', width: '53.166%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
出生日期
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.birthday || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '46.834%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
政治面貌
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.politicsStatus || '暂无'}
</div>
</div>
</div>
</div>
<div style={{ display: 'flex', marginTop: 8 }}>
<div style={{ display: 'flex', width: '40.82%' }}>
<div style={{ display: 'flex', width: '45.57%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 48, textAlign: 'end' }}>
年龄
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.birthday ? moment(new Date()).diff(pepObj.birthday, 'years') + '岁' : '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '54.43%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 48, textAlign: 'end' }}>
籍贯
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.nativePlace || '暂无'}
</div>
</div>
</div>
<div style={{ display: 'flex', width: '59.18%' }}>
<div style={{ display: 'flex', width: '53.166%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
婚育状态
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.marital || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '46.834%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
工作地点
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.workPlace || '暂无'}
</div>
</div>
</div>
</div>
</div>
{/* 学历信息 */}
<div style={{ width: '40%' }}>
<div style={{ color: '#4A4A4A', fontSize: 14, fontWeight: 'bold' }}>
学历信息
</div>
<div style={{ display: 'flex', marginTop: 13 }}>
<div style={{ display: 'flex', width: '43.05%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
毕业院校
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.graduatedFrom || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '56.95' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
毕业时间
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.graduationDate || '暂无'}
</div>
</div>
</div>
<div style={{ display: 'flex', marginTop: 9 }}>
<div style={{ display: 'flex', width: '43.05%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60, textAlign: 'end' }}>
学历
</div>
<div style={{ color: '#005ABD', fontSize: 13 }}>
{pepObj.educationBackground || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '56.95' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60, textAlign: 'end' }}>
专业
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.specialty || '暂无'}
</div>
</div>
</div>
</div>
</div>
{/* 职务信息 */}
<div style={{ marginTop: 20 }}>
<div style={{ color: '#4A4A4A', fontSize: 14, fontWeight: 'bold' }}>
职务信息
</div>
<div style={{ marginTop: 13, display: 'flex' }}>
<div style={{ display: 'flex', width: '15.715%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
员工编号
</div>
<div style={{ color: '#005ABD', fontSize: 13 }}>
{pepObj.userCode || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '17.072%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
入职时间
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.hiredate || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '32.395%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 84 }}>
转试用期时间
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.turnProbationPeriod || '暂无'}
</div>
</div>
<div style={{ display: 'flex', width: '' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
转正时间
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.regularDate || '暂无'}
</div>
</div>
</div>
<div style={{ marginTop: 9, display: 'flex' }}>
<div style={{ display: 'flex', width: '15.715%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
员工职位
</div>
<div style={{ color: '#005ABD', fontSize: 13 }}>
{
pepObj.userJob ? UserAttribute.jobDataSource[pepObj.userJob - 1] : '暂无'
}
</div>
</div>
<div style={{ display: 'flex', width: '17.072%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
员工岗位
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{
pepObj.userPost || '暂无'
}
</div>
</div>
<div style={{ display: 'flex', width: '32.395%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 84, textAlign: 'end' }}>
所属机构
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{
pepObj.userOrganization ? UserAttribute.organizationDataSource[pepObj.userOrganization - 1] : '暂无'
}
</div>
</div>
<div style={{ display: 'flex', width: '' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
所属部门
</div>
{
pepObj.departmrnt?.map((ite, idx) => {
let departmentsArr = []
for (let i = 0; i < pepObj.departmrnt.length; i++) {
departmentsArr.push(pepObj.departmrnt[i].name)
}
return (
<div key={idx}>
{idx < 3 ?
(<div style={{ padding: '0px 4px 1px 4px ', color: '#FFFFFF', fontSize: 12, background: 'rgba(0,90,189,0.8)', borderRadius: 2, marginRight: 4 }}>
{ite.name}
</div>) : ('')
}
{
pepObj.departmrnt.length > 3 && idx == 3 ? (
<Tooltip content={departmentsArr.join(',')} trigger="click" style={{ lineHeight: 2 }}>
<div style={{ padding: '0px 4px 1px 4px ', color: 'rgba(0,90,189,0.8)', fontSize: 12, marginRight: 4, cursor: "pointer", }}>
+{pepObj.departmrnt.length - 3}
</div>
</Tooltip>
) : ('')
}
</div>
)
})
}
</div>
</div>
<div style={{ display: 'flex' }}>
<div style={{ marginTop: 9, display: 'flex', width: '15.715%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
工作经验
</div>
<div style={{ color: '#005ABD', fontSize: 13 }}>
{pepObj.experienceYear ? pepObj.experienceYear + '年' : '暂无'}
</div>
</div>
<div style={{ marginTop: 9, display: 'flex', width: '17.072%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 60 }}>
入职年限
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.hiredate ? String(moment(new Date()).diff(pepObj.hiredate, 'years', true)).substring(0, 3) + '年' : '暂无'}
</div>
</div>
<div style={{ marginTop: 9, display: 'flex', width: '32.395%' }}>
<div style={{ color: 'rgba(0, 0, 0,0.6)', fontSize: 12, width: 84, textAlign: 'end' }}>
试用期
</div>
<div style={{ color: '#4A4A4A', fontSize: 13 }}>
{pepObj.regularDate ? moment(pepObj.regularDate).diff(pepObj.hiredate, 'months', true).toFixed(1) + '个月' : '暂无'}
</div>
</div>
{
pepObj.vitae ? (
<a href={`/_file-server/${pepObj.vitae}`}
style={{ display: 'flex', width: 139, height: 27, background: '#E5F2FF', borderRadius: 14, cursor: "pointer", alignItems: 'center', justifyContent: 'center' }}>
<div style={{ width: 18, height: 18 }}>
<img src="/assets/images/hrImg/resume.png" alt="" style={{ width: '100%', height: '100%' }} />
</div>
<div style={{ marginLeft: 10, fontSize: 13, color: '#4A4A4A' }}>
/她的简历
</div>
</a>) : ''
}
</div>
</div>
</div>
<div style={{ borderRight: '1px solid #DCDEE0', margin: '-16px 0px -20px 0px' }}></div>
<div style={{ marginLeft: 30, marginTop: 8, paddingRight: 30, width: '38%' }}>
<div style={{ color: '#4A4A4A', fontSize: 14 }}>
/她的历史工作经历与职务
</div>
<div style={{ marginTop: 12, fontSize: 13, display: 'flex', alignItems: 'center' }}>
<div style={{ width: 4, height: 4, borderRadius: '50%', marginRight: 6, background: '#005ABD' }}></div>{pepObj.occupationalHistory || ''}
</div>
</div>
</div>
<div style={{ borderBottom: '1px solid #DCDEE0', margin: '24px 0px 24px -20px' }}></div>
<div style={{ paddingLeft: 17 }}>
<div style={{ color: '#4A4A4A', fontSize: 14, marginBottom: 10, fontWeight: 'bold' }}>
基本动作
</div>
<div style={{ color: '#4A4A4A', fontSize: 14, display: 'flex', alignItems: 'center' }}>
时间筛选<DatePicker onChange={handleChange} type="dateRange" density="compact" style={{ width: 242 }} />
</div>
<div style={{ display: 'flex', alignItems: 'center', margin: '5px 0px 12px' }}>
<div style={{ width: 18, height: 18 }}>
<img src="/assets/images/hrImg/information.png" alt="" style={{ width: '100%', height: '100%' }} />
</div>
<div style={{ marginLeft: 12, color: '#4A4A4A', fontSize: 14 }}>
加班信息
</div>
</div>
<div style={{ display: 'flex', width: '100%' }}>
<div style={{ width: 540, boxShadow: '0px 0px 8px 1px rgba(0,0,0,0.1)', padding: 13 }}>
<ReactECharts
option={option}
notMerge={true}
lazyUpdate={true}
theme={"theme_name"}
/>
</div>
<div style={{ marginLeft: 17, boxShadow: '0px 0px 8px 1px rgba(0,0,0,0.1)', width: '64.424%' }}>
<div style={{ display: 'flex', background: '#F4F5FC', height: 40, alignItems: 'center', width: '100%' }}>
<div style={{ width: 6, height: 40, background: '#005ABD' }}></div>
<div style={{ display: 'flex', alignItems: 'center', marginLeft: 24, width: '19.964%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
加班次数
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{tableData.length}
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '19.124%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
工作日
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{tableStatistic.sumPayWorkday / 3600 + tableStatistic.sumTakeRestWorkday / 3600 || 0}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '19.87%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
普通假日
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{tableStatistic.sumTakeRestDayoff / 3600 + tableStatistic.sumPayDayoff / 3600 || 0}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '19.03%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
法定假日
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{tableStatistic.sumPayFestivals / 3600 + tableStatistic.sumTakeRestFestivals / 3600 || 0}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '19.217%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
累计加班时长
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{(tableStatistic.sumPayWorkday / 3600 + tableStatistic.sumTakeRestWorkday / 3600 + tableStatistic.sumTakeRestDayoff / 3600 + tableStatistic.sumPayDayoff / 3600 + tableStatistic.sumPayFestivals / 3600 + tableStatistic.sumTakeRestFestivals / 3600) || 0}小时
</div>
</div>
</div>
<div>
<Table
columns={columns}
dataSource={tableData}
bordered={false}
empty="暂无数据"
pagination={false}
scroll={scroll}
/>
</div>
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', margin: '19px 0px 12px' }}>
<div style={{ width: 18, height: 18 }}>
<img src="/assets/images/hrImg/information.png" alt="" style={{ width: '100%', height: '100%' }} />
</div>
<div style={{ marginLeft: 12, color: '#4A4A4A', fontSize: 14 }}>
请假信息
</div>
</div>
<div style={{ display: 'flex', width: '100%' }}>
<div style={{ width: 540, boxShadow: '0px 0px 8px 1px rgba(0,0,0,0.1)', padding: 13 }}>
<ReactECharts
option={leaveoption}
notMerge={true}
lazyUpdate={true}
theme={"theme_name2"}
/>
</div>
<div style={{ marginLeft: 17, boxShadow: '0px 0px 8px 1px rgba(0,0,0,0.1)', width: '64.424%' }}>
<div style={{ display: 'flex', background: '#F4F5FC', height: 40, alignItems: 'center', width: '100%' }}>
<div style={{ width: 6, height: 40, background: '#005ABD' }}></div>
<div style={{ display: 'flex', alignItems: 'center', marginLeft: 24, width: '16.964%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
请假次数
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveData.length}
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '15.124%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
年休假
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveStatistic.year}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '15.87%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
事假
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveStatistic.compassionate}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '15.03%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
病假
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveStatistic.sick}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '18%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
其他类型请假
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveStatistic.other}小时
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', width: '16.217%' }}>
<div style={{ fontSize: 13, color: '#4A4A4A' }}>
合计请假时长
</div>
<div style={{ fontSize: 14, color: '#005ABD', marginLeft: 5 }}>
{leaveStatistic.all}小时
</div>
</div>
</div>
<div>
<Table
columns={leaveColumns}
dataSource={leaveData}
bordered={false}
empty="暂无数据"
pagination={false}
scroll={scroll}
/>
</div>
</div>
</div>
</div>
</div>
</div>
{//新增档案弹框
personnelModal ?
<PersonnelModal
visible={true}
editObj={pepObj}
adminEdit={true}
cancel={() => {
setPersonnelModal(false);
}}
close={() => {
setPersonnelModal(false);
peopleDetail()
}} >
</PersonnelModal> : ''
}
{//删除弹框
deleteModal ?
<DeleteModal
visible={true}
pepUserId={pepUserId}
cancel={() => {
setDeleteModal(false);
}}
close={() => {
setDeleteModal(false);
history.goBack()
}} >
</DeleteModal> : ''
}
</>
)
}
function mapStateToProps(state) {
const { auth, global, members, webSocket } = state;
return {
// loading: members.isRequesting,
// user: auth.user,
actions: global.actions,
// members: members.data,
// socket: webSocket.socket
};
}
export default connect(mapStateToProps)(Rest);