Browse Source

人事管理菜单结构调整,并增加未开发的界面入口

master
周沫沫历险记 2 years ago
parent
commit
1cbacf8b46
  1. 2
      web/client/index.ejs
  2. 2
      web/client/index.html
  3. 92
      web/client/src/layout/components/header/contant.js
  4. 3
      web/client/src/layout/components/header/index.jsx
  5. 17
      web/client/src/layout/components/sider/index.jsx
  6. 58
      web/client/src/layout/containers/layout/index.jsx
  7. 3
      web/client/src/sections/auth/actions/auth.js
  8. 4
      web/client/src/sections/auth/containers/login.jsx
  9. 14
      web/client/src/sections/humanAffairs/components/empty.js
  10. 42
      web/client/src/sections/humanAffairs/containers/appointmentRecords.jsx
  11. 42
      web/client/src/sections/humanAffairs/containers/attendanceStatistics.jsx
  12. 54
      web/client/src/sections/humanAffairs/containers/deptArchives.jsx
  13. 40
      web/client/src/sections/humanAffairs/containers/employeeAuth.jsx
  14. 4
      web/client/src/sections/humanAffairs/containers/employeeInformation.jsx
  15. 40
      web/client/src/sections/humanAffairs/containers/formMaintenance.jsx
  16. 42
      web/client/src/sections/humanAffairs/containers/highMonthly.jsx
  17. 37
      web/client/src/sections/humanAffairs/containers/index.js
  18. 2
      web/client/src/sections/humanAffairs/containers/leaveStatistics.jsx
  19. 42
      web/client/src/sections/humanAffairs/containers/monthlyProcess.jsx
  20. 2
      web/client/src/sections/humanAffairs/containers/overtimeStatistics.jsx
  21. 42
      web/client/src/sections/humanAffairs/containers/penaltiesRecord.jsx
  22. 5
      web/client/src/sections/humanAffairs/containers/personnelFiles.jsx
  23. 2
      web/client/src/sections/humanAffairs/containers/pmLog.jsx
  24. 42
      web/client/src/sections/humanAffairs/containers/probationerKPI.jsx
  25. 42
      web/client/src/sections/humanAffairs/containers/quarter.jsx
  26. 42
      web/client/src/sections/humanAffairs/containers/regularKPI.jsx
  27. 42
      web/client/src/sections/humanAffairs/containers/resourceRepository.jsx
  28. 2
      web/client/src/sections/humanAffairs/containers/saleLog.jsx
  29. 2
      web/client/src/sections/humanAffairs/containers/weeklyManagement.jsx
  30. 110
      web/client/src/sections/humanAffairs/nav-item.jsx
  31. 172
      web/client/src/sections/humanAffairs/routes.js

2
web/client/index.ejs

@ -9,7 +9,7 @@
<!-- <link rel="shortcut icon" href="/assets/images/favicon.ico"> --> <!-- <link rel="shortcut icon" href="/assets/images/favicon.ico"> -->
<script src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_20231_4.a82ed651163d1db5bc9208ca2d929534.es5.js"></script> <script src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_20231_12.7f8fd1546294d369f0a85f7d68afb538.es5.js"></script>
</head> </head>

2
web/client/index.html

@ -7,7 +7,7 @@
<!-- <link rel="shortcut icon" href="/assets/images/favicon.ico"> --> <!-- <link rel="shortcut icon" href="/assets/images/favicon.ico"> -->
<script src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_20231_4.a82ed651163d1db5bc9208ca2d929534.es5.js"></script> <script src="https://lf1-cdn-tos.bytegoofy.com/obj/iconpark/icons_20231_12.7f8fd1546294d369f0a85f7d68afb538.es5.js"></script>
</head> </head>
<body> <body>

92
web/client/src/layout/components/header/contant.js

@ -0,0 +1,92 @@
const headerItems = [{
itemKey: "authCenter",
text: "权限中心",
items: [{
fatherKey: "authCenter",
openKey: "authCenter",
itemKey: "employeeAuth",
text: "员工权限",
to: "/humanAffairs/authCenter/employeeAuth"
}, {
fatherKey: 'authCenter',
openKey: "authCenter",
itemKey: "formMaintenance",
text: "表单维护",
to: "/humanAffairs/authCenter/formMaintenance"
}]
}, {
itemKey: "achievements",
text: "绩效考核",
items: [{
fatherKey: "achievements",
itemKey: "basicAction",
text: "基本动作",
to: "/humanAffairs/achievements/basicAction/weeklyManagement"
}, {
fatherKey: 'achievements',
itemKey: "employeeKPI",
text: "员工考核",
to: "/humanAffairs/achievements/employeeKPI/probationer"
}, {
fatherKey: "achievements",
itemKey: "middleKPI",
text: "中层考核",
to: "/humanAffairs/achievements/middleKPI/monthlyProcess"
}, {
fatherKey: 'achievements',
itemKey: "highKPI",
text: "高管考核",
to: "/humanAffairs/achievements/highKPI/highMonthly"
}, {
fatherKey: 'achievements',
itemKey: "penalties",
text: "奖惩信息",
to: "/humanAffairs/achievements/penalties/penaltiesRecord"
}]
}, {
itemKey: "train",
text: "培训",
items: [{
fatherKey: "train",
itemKey: "trainFiles",
text: "培训档案",
to: "/humanAffairs/train/trainFiles/resourceRepository"
}]
}, {
itemKey: "recruit",
text: "招聘",
items: [{
fatherKey: "recruit",
itemKey: "recruitRecord",
text: "招聘记录",
to: "/humanAffairs/recruit/recruitRecord/appointmentRecords"
}]
}, {
itemKey: "employeeRelationship",
text: "员工关系",
items: [{
fatherKey: "employeeRelationship",
itemKey: "leaveManagement",
text: "假勤管理",
to: "/humanAffairs/employeeRelationship/leaveManagement/attendanceStatistics"
}]
}, {
itemKey: "archivesCenter",
text: "档案中心",
items: [{
fatherKey: "archivesCenter",
openKey: "personnelArchives",
itemKey: "personnelFiles",
text: "人员档案",
to: "/humanAffairs/archivesCenter/personnelArchives/personnelFiles"
}, {
fatherKey: 'archivesCenter',
itemKey: "deptArchives",
text: "部门档案",
to: "/humanAffairs/archivesCenter/deptArchives/department"
}]
}]
export {
headerItems
}

3
web/client/src/layout/components/header/index.jsx

@ -3,10 +3,11 @@ import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { SplitButtonGroup, Dropdown, Button, Nav, Avatar } from '@douyinfe/semi-ui'; import { SplitButtonGroup, Dropdown, Button, Nav, Avatar } from '@douyinfe/semi-ui';
import { IconTreeTriangleDown } from '@douyinfe/semi-icons'; import { IconTreeTriangleDown } from '@douyinfe/semi-icons';
import { headerItems } from './contant';
import "./index.less"; import "./index.less";
const Header = (props) => { const Header = (props) => {
const { dispatch, history, user, actions, socket, headerItems, tochange } = props; const { dispatch, history, user, actions, socket, tochange } = props;
return ( return (
<> <>

17
web/client/src/layout/components/sider/index.jsx

@ -22,18 +22,13 @@ const Sider = (props) => {
dispatch(push(homePath)) dispatch(push(homePath))
} }
}, [leftItems]) }, [leftItems])
let routeSelectedKey = [useLocation().pathname.split('/')[1]]// let routeSelectedKey = useLocation().pathname.split('/');
let routeSelectedKeys = [useLocation().pathname.split('/')[2]]// // let routeSelectedKey = [useLocation().pathname.split('/')[1]]//
let routeSelectedKeyss = [useLocation().pathname.split('/')[3]]// // let routeSelectedKeys = [useLocation().pathname.split('/')[2]]//
// let routeSelectedKeyss = [useLocation().pathname.split('/')[3]]//
useEffect(() => { useEffect(() => {
if (routeSelectedKeyss[0]) { if (routeSelectedKey.length) {
setSelectedKeys(routeSelectedKeyss) setSelectedKeys([routeSelectedKey[routeSelectedKey.length - 1]])
}
else if (routeSelectedKeys[0]) {
setSelectedKeys(routeSelectedKeys)
}
else {
setSelectedKeys(routeSelectedKey)
} }
const lastOpenKeys = localStorage.getItem('poms_open_sider') const lastOpenKeys = localStorage.getItem('poms_open_sider')
if (lastOpenKeys) { if (lastOpenKeys) {

58
web/client/src/layout/containers/layout/index.jsx

@ -81,7 +81,7 @@ const LayoutContainer = props => {
} }
} }
const [allItems, setAllItems] = useState([]) const [allItems, setAllItems] = useState([])
const [headerItems, setHeaderItems] = useState([]) // const [headerItems, setHeaderItems] = useState([])
const [leftItems, setLeftItems] = useState([]) const [leftItems, setLeftItems] = useState([])
const [leftChange, setLeftChange] = useState(true) const [leftChange, setLeftChange] = useState(true)
const [leftShow, setLeftShow] = useState(false) const [leftShow, setLeftShow] = useState(false)
@ -102,10 +102,10 @@ const LayoutContainer = props => {
itm.items[i].fatherKey = itm.itemKey itm.items[i].fatherKey = itm.itemKey
delete itm.items[i].items delete itm.items[i].items
} }
topItems.push(itm) // topItems.push(itm)
} // }
else { // else {
topItems.push.apply(topItems, item) // topItems.push.apply(topItems, item)
} }
} }
} }
@ -113,16 +113,16 @@ const LayoutContainer = props => {
} }
} }
setAllItems(nextItems) setAllItems(nextItems)
setHeaderItems(topItems) // setHeaderItems(topItems)
if (lastSelectedKeys) {// if (lastSelectedKeys) {//
for (let i = 0; i < nextItems.length; i++) { for (let i = 0; i < nextItems.length; i++) {
if (JSON.parse(lastSelectedKeys)[0] == nextItems[i].itemKey) { if (JSON.parse(lastSelectedKeys)[0] == nextItems[i].itemKey) {
let openArr = [] // let openArr = []
for (let j = 0; j < nextItems[i].items.length; j++) { // for (let j = 0; j < nextItems[i].items.length; j++) {
openArr.push(nextItems[i].items[j].itemKey) // openArr.push(nextItems[i].items[j].itemKey)
} // }
localStorage.setItem('poms_open_sider', JSON.stringify(openArr)) // localStorage.setItem('poms_open_sider', JSON.stringify(openArr))
setLeftItems(nextItems[i].items) setLeftItems(nextItems[i].items)
} }
} }
@ -151,7 +151,7 @@ const LayoutContainer = props => {
openArr.push(allItems[i].items[o].itemKey) openArr.push(allItems[i].items[o].itemKey)
} }
localStorage.setItem('poms_selected_sider', JSON.stringify([pathnameArr[1]])) localStorage.setItem('poms_selected_sider', JSON.stringify([pathnameArr[1]]))
localStorage.setItem('poms_open_sider', JSON.stringify(openArr)) // localStorage.setItem('poms_open_sider', JSON.stringify(openArr))
setLeftItems(allItems[i].items) setLeftItems(allItems[i].items)
setLeftShow(true) setLeftShow(true)
} }
@ -229,7 +229,7 @@ const LayoutContainer = props => {
<> <>
<Layout.Header> <Layout.Header>
<Header <Header
headerItems={headerItems} // headerItems={headerItems} //
user={user} user={user}
pathname={location.pathname} pathname={location.pathname}
toggleCollapsed={() => { toggleCollapsed={() => {
@ -238,25 +238,29 @@ const LayoutContainer = props => {
collapsed={collapsed} collapsed={collapsed}
history={history} history={history}
tochange={(val) => { tochange={(val) => {
setLeftChange(!leftChange) // setLeftChange(!leftChange) //
if (val.fatherKey) { if (val.fatherKey) {
for (let i = 0; i < allItems.length; i++) { localStorage.setItem('poms_selected_sider', JSON.stringify([val.itemKey]));
if (val.fatherKey == allItems[i].itemKey) { const historyOpenKeys = localStorage.getItem('poms_open_sider');
let openArr = [] const openKeys = historyOpenKeys && JSON.parse(historyOpenKeys).concat(val.openKey || val.itemKey) || [val.openKey || val.itemKey]
for (let j = 0; j < allItems[i].items.length; j++) { localStorage.setItem('poms_open_sider', JSON.stringify(openKeys));
openArr.push(allItems[i].items[j].itemKey) // for (let i = 0; i < allItems.length; i++) {
} // if (val.fatherKey == allItems[i].itemKey) {
localStorage.setItem('poms_selected_sider', JSON.stringify([val.fatherKey])) // let openArr = []
localStorage.setItem('poms_open_sider', JSON.stringify(openArr)) // for (let j = 0; j < allItems[i].items.length; j++) {
setLeftItems(allItems[i].items) // openArr.push(allItems[i].items[j].itemKey)
} // }
} // localStorage.setItem('poms_selected_sider', JSON.stringify([val.fatherKey]))
setLeftShow(true) // localStorage.setItem('poms_open_sider', JSON.stringify(openArr))
// setLeftItems(allItems[i].items)
// }
// }
// setLeftShow(true)
} }
else { else {
localStorage.setItem('poms_open_sider', JSON.stringify([])) localStorage.setItem('poms_open_sider', JSON.stringify([]))
localStorage.removeItem('poms_selected_sider') localStorage.removeItem('poms_selected_sider')
setLeftShow(false) // setLeftShow(false)
} }
history.push(val.to); history.push(val.to);
}} }}

3
web/client/src/sections/auth/actions/auth.js

@ -71,6 +71,9 @@ export function logout () {
code: 'POMS' code: 'POMS'
}) : null; }) : null;
sessionStorage.removeItem('hrUser'); sessionStorage.removeItem('hrUser');
localStorage.removeItem('poms_selected_sider');
localStorage.removeItem('poms_open_sider');
return { return {
type: LOGOUT type: LOGOUT
}; };

4
web/client/src/sections/auth/containers/login.jsx

@ -20,7 +20,7 @@ const Login = props => {
useEffect(() => { useEffect(() => {
if (user && user.authorized) { if (user && user.authorized) {
dispatch(push('/humanAffairs/archivesCenter/personnelFiles')); dispatch(push('/humanAffairs/archivesCenter/personnelArchives/personnelFiles'));
localStorage.setItem('poms_open_sider', JSON.stringify(["archivesCenter"])) localStorage.setItem('poms_open_sider', JSON.stringify(["archivesCenter"]))
localStorage.setItem('poms_selected_sider', JSON.stringify(["humanAffairs"])) localStorage.setItem('poms_selected_sider', JSON.stringify(["humanAffairs"]))
} }
@ -67,7 +67,7 @@ const Login = props => {
dispatch(login(values.username, values.password)).then(res => { dispatch(login(values.username, values.password)).then(res => {
const data = res.payload.user const data = res.payload.user
localStorage.setItem('word', JSON.stringify(values.password)) localStorage.setItem('word', JSON.stringify(values.password))
dispatch(actions.layout.initWebSocket({ ioUrl: apiRoot, token: data.token, hrUserId: data.hrUserInfo.id })) dispatch(actions.layout.initWebSocket({ ioUrl: apiRoot, token: data.token, hrUserId: data.hrUserInfo && hrUserInfo.id }))
}) })
}} }}
getFormApi={formApi => form.current = formApi} getFormApi={formApi => form.current = formApi}

14
web/client/src/sections/humanAffairs/components/empty.js

@ -0,0 +1,14 @@
import React from 'react';
import { Empty as EmptySemi } from '@douyinfe/semi-ui';
import { IllustrationConstruction, IllustrationConstructionDark } from '@douyinfe/semi-illustrations';
const Empty = (props) => {
return (<EmptySemi
image={<IllustrationConstruction style={{ width: 150, height: 150 }} />}
darkModeImage={<IllustrationConstructionDark style={{ width: 150, height: 150 }} />}
title={'功能建设中'}
description="当前功能暂未开放,敬请期待。"
/>
)
}
export default Empty

42
web/client/src/sections/humanAffairs/containers/appointmentRecords.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const AppointmentRecords = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>任用记录</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>APPOINTMENT RECORDS</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(AppointmentRecords);

42
web/client/src/sections/humanAffairs/containers/attendanceStatistics.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const AttendanceStatistics = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>出勤统计</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>ATTENDANCE STATISTICS</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(AttendanceStatistics);

54
web/client/src/sections/humanAffairs/containers/deptArchives.jsx

@ -0,0 +1,54 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const DeptArchives = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>部门档案</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>DEPARTMENT FILE</div>
</div>
</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: 9 }}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
<div style={{ display: 'flex', alignItems: 'baseline' }}>
<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 }}>部门档案详情</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>DEPARTMENT FILE DETAILS</div>
</div>
</div>
<div >
<Empty
/>
</div>
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions
};
}
export default connect(mapStateToProps)(DeptArchives);

40
web/client/src/sections/humanAffairs/containers/employeeAuth.jsx

@ -0,0 +1,40 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const EmployeeAuth = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>员工权限</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>EMPLOYEE AUTHORITY</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(EmployeeAuth);

4
web/client/src/sections/humanAffairs/containers/employeeInformation.jsx

@ -452,9 +452,9 @@ const employeeInformation = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>档案中心</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, 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 }}>人员档案</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>
<div style={{ color: '#033C9A', fontSize: 14 }}>员工信息</div> <div style={{ color: '#033C9A', fontSize: 14 }}>员工信息</div>
</div> </div>

40
web/client/src/sections/humanAffairs/containers/formMaintenance.jsx

@ -0,0 +1,40 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const FormMaintenance = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>表单维护</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>FORM MAINTENANCE</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(FormMaintenance);

42
web/client/src/sections/humanAffairs/containers/highMonthly.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const HighMonthly = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>月度过程考核</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>MONTHLY PROCESS ASSESSMENT</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(HighMonthly);

37
web/client/src/sections/humanAffairs/containers/index.js

@ -1,17 +1,42 @@
'use strict'; 'use strict';
//档案中心
import PersonnelFiles from './personnelFiles'; import PersonnelFiles from './personnelFiles';
import PersonnelFilesDetail from './personnelFilesDetail';
import EmployeeInformation from './employeeInformation'; import EmployeeInformation from './employeeInformation';
import DeptArchives from './deptArchives';
//员工关系
import AttendanceStatistics from './attendanceStatistics';
import LeaveStatistics from './leaveStatistics';
import OvertimeStatistics from './overtimeStatistics';
//招聘
import AppointmentRecords from './appointmentRecords';
//培训
import ResourceRepository from './resourceRepository';
//绩效考核
import WeeklyManagement from './weeklyManagement'; import WeeklyManagement from './weeklyManagement';
import SaleLog from './saleLog'; import SaleLog from './saleLog';
import PMLog from './pmLog'; import PMLog from './pmLog';
import LeaveStatistics from './leaveStatistics'; import ProbationerKPI from './probationerKPI';
import OvertimeStatistics from './overtimeStatistics'; import RegularKPI from './regularKPI';
import MonthlyProcess from './monthlyProcess';
import Quarter from './quarter';
import HighMonthly from './highMonthly';
import PenaltiesRecord from './penaltiesRecord';
//权限中心
import EmployeeAuth from './employeeAuth';
import FormMaintenance from './formMaintenance';
//其它
import PersonnelFilesDetail from './personnelFilesDetail';
export { export {
PersonnelFiles, PersonnelFilesDetail, EmployeeInformation, PersonnelFiles, EmployeeInformation, DeptArchives,
AttendanceStatistics, LeaveStatistics, OvertimeStatistics,
AppointmentRecords,
ResourceRepository,
WeeklyManagement, SaleLog, PMLog, WeeklyManagement, SaleLog, PMLog,
LeaveStatistics, OvertimeStatistics ProbationerKPI, RegularKPI,
MonthlyProcess, Quarter, HighMonthly, PenaltiesRecord,
EmployeeAuth, FormMaintenance,
PersonnelFilesDetail,
}; };

2
web/client/src/sections/humanAffairs/containers/leaveStatistics.jsx

@ -259,7 +259,7 @@ const leaveStatistics = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>员工关系</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, 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 }}>假勤管理</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>

42
web/client/src/sections/humanAffairs/containers/monthlyProcess.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const MonthlyProcess = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>月度过程考核</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>Monthly process assessment</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(MonthlyProcess);

2
web/client/src/sections/humanAffairs/containers/overtimeStatistics.jsx

@ -354,7 +354,7 @@ const overtimeStatistics = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>员工关系</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, 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 }}>假勤管理</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>

42
web/client/src/sections/humanAffairs/containers/penaltiesRecord.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const PenaltiesRecord = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>奖惩信息</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>REWARD AND PUNISHMENT INFORMATION</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(PenaltiesRecord);

5
web/client/src/sections/humanAffairs/containers/personnelFiles.jsx

@ -6,7 +6,6 @@ import PersonnelModal from '../components/personnelModal';
import ImportMembersModal from './import-members-modal' import ImportMembersModal from './import-members-modal'
import '../style.less' import '../style.less'
import moment from 'moment' import moment from 'moment'
import { set } from 'nprogress';
const Rest = (props) => { const Rest = (props) => {
const { dispatch, actions, history, user, loading, socket, xqMembers } = props const { dispatch, actions, history, user, loading, socket, xqMembers } = props
@ -51,9 +50,9 @@ const Rest = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>档案中心</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, margin: '0px 8px' }}>/</div>
<div style={{ color: '#033C9A', fontSize: 14 }}>人员档案</div> <div style={{ color: '#033C9A', fontSize: 14 }}>人员档案</div>
</div> </div>

2
web/client/src/sections/humanAffairs/containers/pmLog.jsx

@ -224,7 +224,7 @@ const PMLog = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>绩效考核</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, 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 }}>基本动作</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>

42
web/client/src/sections/humanAffairs/containers/probationerKPI.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const ProbationerKPI = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>试用期员工考核</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>EMPLOYEE EVALUATION DURING PROBATION PERIOD</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(ProbationerKPI);

42
web/client/src/sections/humanAffairs/containers/quarter.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const Quarter = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>季度考核</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>QUARTERLY ASSESSMENT</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(Quarter);

42
web/client/src/sections/humanAffairs/containers/regularKPI.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const RegularKPI = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>正式员工考核</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>FORMAL EMPLOYEE ASSESSMENT</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(RegularKPI);

42
web/client/src/sections/humanAffairs/containers/resourceRepository.jsx

@ -0,0 +1,42 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import Empty from '../components/empty';
import '../style.less'
const ResourceRepository = (props) => {
const { dispatch, actions } = props
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: '#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: 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 }}>培训资源储存库</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>RESOURCE REPOSITORY</div>
</div>
</div>
<Empty />
</div>
</div>
</>
)
}
function mapStateToProps(state) {
const { auth, global } = state;
return {
user: auth.user,
actions: global.actions,
};
}
export default connect(mapStateToProps)(ResourceRepository);

2
web/client/src/sections/humanAffairs/containers/saleLog.jsx

@ -224,7 +224,7 @@ const SaleLog = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>绩效考核</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, 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 }}>基本动作</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>

2
web/client/src/sections/humanAffairs/containers/weeklyManagement.jsx

@ -249,7 +249,7 @@ const WeeklyManagement = (props) => {
<> <>
<div style={{ padding: '0px 12px' }}> <div style={{ padding: '0px 12px' }}>
<div style={{ display: 'flex' }}> <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 }}>绩效考核</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, 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 }}>基本动作</div>
<div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div> <div style={{ color: '#033C9A', fontSize: 14, margin: '0px 8px' }}>/</div>

110
web/client/src/sections/humanAffairs/nav-item.jsx

@ -8,47 +8,111 @@ export function getNavItem(user, dispatch) {
itemKey: 'humanAffairs', itemKey: 'humanAffairs',
text: '人事管理', text: '人事管理',
icon: <IconCode />, icon: <IconCode />,
items: [ items: [{
{ itemKey: 'personnelArchives',
itemKey: 'archivesCenter', text: '人员档案',
text: '档案中心',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbrengongdangan"></iconpark-icon>, icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbrengongdangan"></iconpark-icon>,
to: '/humanAffairs/archivesCenter/personnelFiles', to: '/humanAffairs/archivesCenter/personnelArchives/personnelFiles',
items: [{ items: [{
itemKey: 'personnelFiles', to: '/humanAffairs/archivesCenter/personnelFiles', text: '人员档案' itemKey: 'personnelFiles', to: '/humanAffairs/archivesCenter/personnelArchives/personnelFiles', text: '人员档案'
}, {
itemKey: 'employeeInformation', to: '/humanAffairs/archivesCenter/personnelArchives/employeeInformation', text: '员工信息'
}] }]
}, { }, {
itemKey: 'employeeRelations', itemKey: 'deptArchives',
text: '员工关系', text: '部门档案',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbyuangongguanxi"></iconpark-icon>, icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbbumen"></iconpark-icon>,
to: '/humanAffairs/employeeRelations/employeeInformation', to: '/humanAffairs/archivesCenter/deptArchives/department',
items: [{ items: [{
itemKey: 'employeeInformation', to: '/humanAffairs/employeeRelations/employeeInformation', text: '员工信息' itemKey: 'department', to: '/humanAffairs/archivesCenter/deptArchives/department', text: '部门档案'
}]
}, {
itemKey: 'leaveManagement',
text: '假勤管理',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbjiaqinguanli"></iconpark-icon>,
to: '/humanAffairs/employeeRelationship/leaveManagement/attendanceStatistics',
items: [{
itemKey: 'attendanceStatistics', to: '/humanAffairs/employeeRelationship/leaveManagement/attendanceStatistics', text: '出勤统计'
}, {
itemKey: 'leaveStatistics', to: '/humanAffairs/employeeRelationship/leaveManagement/leaveStatistics', text: '请假统计'
}, {
itemKey: 'overtimeStatistics', to: '/humanAffairs/employeeRelationship/leaveManagement/overtimeStatistics', text: '加班统计'
}]
}, {
itemKey: 'recruitRecord',
text: '招聘记录',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbzhaopin"></iconpark-icon>,
to: '/humanAffairs/recruit/recruitRecord/appointmentRecords',
items: [{
itemKey: 'appointmentRecords', to: '/humanAffairs/recruit/recruitRecord/appointmentRecords', text: '任用记录'
}]
}, {
itemKey: 'trainFiles',
text: '培训档案',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbpeixundangan"></iconpark-icon>,
to: '/humanAffairs/train/trainFiles/resourceRepository',
items: [{
itemKey: 'resourceRepository', to: '/humanAffairs/train/trainFiles/resourceRepository', text: '培训资源储存库'
}] }]
}, { }, {
itemKey: 'basicAction', itemKey: 'basicAction',
text: '基本动作', text: '基本动作',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbjiben"></iconpark-icon>, icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbjiben"></iconpark-icon>,
to: '/humanAffairs/basicAction/weeklyManagement', to: '/humanAffairs/achievements/basicAction/weeklyManagement',
items: [{ items: [{
itemKey: 'weeklyManagement', to: '/humanAffairs/basicAction/weeklyManagement', text: '周报管理' itemKey: 'weeklyManagement', to: '/humanAffairs/achievements/basicAction/weeklyManagement', text: '周报管理'
}, { }, {
itemKey: 'saleLog', to: '/humanAffairs/basicAction/saleLog', text: '销售日志' itemKey: 'saleLog', to: '/humanAffairs/achievements/basicAction/saleLog', text: '销售日志'
}, { }, {
itemKey: 'pmLog', to: '/humanAffairs/basicAction/pmLog', text: '工程日志' itemKey: 'pmLog', to: '/humanAffairs/achievements/basicAction/pmLog', text: '工程日志'
}] }]
}, { }, {
itemKey: 'leaveManagement', itemKey: 'employeeKPI',
text: '假勤管理', text: '员工考核',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbjiaqinguanli"></iconpark-icon>, icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbyuangongkaohe"></iconpark-icon>,
to: '/humanAffairs/leaveManagement/leaveStatistics', to: '/humanAffairs/achievements/employeeKPI/probationer',
items: [{ items: [{
itemKey: 'leaveStatistics', to: '/humanAffairs/leaveManagement/leaveStatistics', text: '请假统计' itemKey: 'probationer', to: '/humanAffairs/achievements/employeeKPI/probationer', text: '试用期员工考核'
}, { }, {
itemKey: 'overtimeStatistics', to: '/humanAffairs/leaveManagement/overtimeStatistics', text: '加班统计' itemKey: 'regular', to: '/humanAffairs/achievements/employeeKPI/regular', text: '正式员工考核'
}]
}, {
itemKey: 'middleKPI',
text: '中层考核',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbzhongceng"></iconpark-icon>,
to: '/humanAffairs/achievements/middleKPI/monthlyProcess',
items: [{
itemKey: 'monthlyProcess', to: '/humanAffairs/achievements/middleKPI/monthlyProcess', text: '月度过程考核'
}, {
itemKey: 'quarter', to: '/humanAffairs/achievements/middleKPI/quarter', text: '季度考核'
}]
}, {
itemKey: 'highKPI',
text: '高管考核',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbgaojiguanli"></iconpark-icon>,
to: '/humanAffairs/achievements/highKPI/highMonthly',
items: [{
itemKey: 'highMonthly', to: '/humanAffairs/achievements/highKPI/highMonthly', text: '月度过程考核'
}]
}, {
itemKey: 'penalties',
text: '奖惩信息',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbjiangcheng"></iconpark-icon>,
to: '/humanAffairs/achievements/penalties/penaltiesRecord',
items: [{
itemKey: 'penaltiesRecord', to: '/humanAffairs/achievements/penalties/penaltiesRecord', text: '奖惩信息'
}]
}, {
itemKey: 'authCenter',
text: '权限中心',
icon: <iconpark-icon style={{ width: 20, height: 20 }} name="iconcbquanxian"></iconpark-icon>,
to: '/humanAffairs/authCenter/employeeAuth',
items: [{
itemKey: 'employeeAuth', to: '/humanAffairs/authCenter/employeeAuth', text: '员工权限'
}, {
itemKey: 'formMaintenance', to: '/humanAffairs/authCenter/formMaintenance', text: '表单维护'
}]
}] }]
},
]
}, },
] ]
); );

172
web/client/src/sections/humanAffairs/routes.js

@ -1,7 +1,14 @@
import { import {
PersonnelFiles, PersonnelFilesDetail, EmployeeInformation, PersonnelFiles, EmployeeInformation, //人员档案
DeptArchives, //部门档案
AttendanceStatistics, LeaveStatistics, OvertimeStatistics,
AppointmentRecords,
ResourceRepository,
WeeklyManagement, SaleLog, PMLog, WeeklyManagement, SaleLog, PMLog,
LeaveStatistics, OvertimeStatistics ProbationerKPI, RegularKPI,
MonthlyProcess, Quarter, HighMonthly, PenaltiesRecord,
EmployeeAuth, FormMaintenance,
PersonnelFilesDetail,
} from './containers'; } from './containers';
export default [{ export default [{
@ -11,17 +18,99 @@ export default [{
key: 'humanAffairs', key: 'humanAffairs',
breadcrumb: '人事管理', breadcrumb: '人事管理',
// 不设置 component 则面包屑禁止跳转 // 不设置 component 则面包屑禁止跳转
childRoutes: [{ childRoutes: [
{
path: '/archivesCenter', path: '/archivesCenter',
key: 'archivesCenter', key: 'archivesCenter',
breadcrumb: '档案中心', breadcrumb: '档案中心',
childRoutes: [{
path: '/personnelArchives',
key: 'personnelArchives',
component: PersonnelFiles,
breadcrumb: '人员档案',
childRoutes: [{ childRoutes: [{
path: '/personnelFiles', path: '/personnelFiles',
key: 'personnelFiles', key: 'personnelFiles',
component: PersonnelFiles, component: PersonnelFiles,
breadcrumb: '人员档案', breadcrumb: '人员档案',
}, {
path: '/employeeInformation',
key: 'employeeInformation',
component: EmployeeInformation,
breadcrumb: '员工信息',
}]
}, {
path: '/deptArchives',
key: 'deptArchives',
breadcrumb: '部门档案',
childRoutes: [{
path: '/department',
key: 'department',
component: DeptArchives,
breadcrumb: '部门档案',
}]
}]
}, {
path: '/employeeRelationship',
key: 'employeeRelationship',
breadcrumb: '员工关系',
childRoutes: [{
path: '/leaveManagement',
key: 'leaveManagement',
breadcrumb: '假勤管理',
childRoutes: [{
path: '/attendanceStatistics',
key: 'attendanceStatistics',
component: AttendanceStatistics,
breadcrumb: '出勤统计',
}, {
path: '/leaveStatistics',
key: 'leaveStatistics',
component: LeaveStatistics,
breadcrumb: '请假统计',
}, {
path: '/overtimeStatistics',
key: 'overtimeStatistics',
component: OvertimeStatistics,
breadcrumb: '加班统计',
}]
}]
}, {
path: '/recruit',
key: 'recruit',
breadcrumb: '招聘',
childRoutes: [{
path: '/recruitRecord',
key: 'recruitRecord',
breadcrumb: '招聘记录',
childRoutes: [{
path: '/appointmentRecords',
key: 'appointmentRecords',
component: AppointmentRecords,
breadcrumb: '任用记录',
}]
}] }]
}, { }, {
path: '/train',
key: 'train',
breadcrumb: '培训',
childRoutes: [{
path: '/trainFiles',
key: 'trainFiles',
breadcrumb: '培训档案',
childRoutes: [{
path: '/resourceRepository',
key: 'resourceRepository',
component: ResourceRepository,
breadcrumb: '培训资源储存库',
}]
}]
},
{
path: '/achievements',
key: 'achievements',
breadcrumb: '绩效考核',
childRoutes: [{
path: '/basicAction', path: '/basicAction',
key: 'basicAction', key: 'basicAction',
breadcrumb: '基本动作', breadcrumb: '基本动作',
@ -42,29 +131,70 @@ export default [{
breadcrumb: '工程日志', breadcrumb: '工程日志',
}] }]
}, { }, {
path: '/employeeRelations', path: '/employeeKPI',
key: 'employeeRelations', key: 'employeeKPI',
breadcrumb: '员工关系', breadcrumb: '员工考核',
childRoutes: [{ childRoutes: [{
path: '/employeeInformation', path: '/probationer',
key: 'employeeInformation', key: 'probationer',
component: EmployeeInformation, component: ProbationerKPI,
breadcrumb: '员工信息', breadcrumb: '试用期员工考核',
}, {
path: '/regular',
key: 'regular',
component: RegularKPI,
breadcrumb: '正式员工考核',
}] }]
}, { }, {
path: '/leaveManagement', path: '/middleKPI',
key: 'leaveManagement', key: 'middleKPI',
breadcrumb: '假勤管理', breadcrumb: '中层考核',
childRoutes: [{ childRoutes: [{
path: '/leaveStatistics', path: '/monthlyProcess',
key: 'leaveStatistics', key: 'monthlyProcess',
component: LeaveStatistics, component: MonthlyProcess,
breadcrumb: '请假统计', breadcrumb: '月度过程考核',
}, { }, {
path: '/overtimeStatistics', path: '/quarter',
key: 'overtimeStatistics', key: 'quarter',
component: OvertimeStatistics, component: Quarter,
breadcrumb: '加班统计', breadcrumb: '季度考核',
}]
}, {
path: '/highKPI',
key: 'highKPI',
breadcrumb: '高管考核',
childRoutes: [{
path: '/highMonthly',
key: 'highMonthly',
component: HighMonthly,
breadcrumb: '月度过程考核',
}]
}, {
path: '/penalties',
key: 'penalties',
breadcrumb: '奖惩信息',
childRoutes: [{
path: '/penaltiesRecord',
key: 'penaltiesRecord',
component: PenaltiesRecord,
breadcrumb: '奖惩信息',
}]
}]
}, {
path: '/authCenter',
key: 'authCenter',
breadcrumb: '权限中心',
childRoutes: [{
path: '/employeeAuth',
key: 'employeeAuth',
breadcrumb: '员工权限',
component: EmployeeAuth
}, {
path: '/formMaintenance',
key: 'formMaintenance',
component: FormMaintenance,
breadcrumb: '表单维护',
}] }]
}] }]
} }

Loading…
Cancel
Save