diff --git a/api/app/lib/schedule/attendance.js b/api/app/lib/schedule/attendance.js
index c7a2c43..7e72c81 100644
--- a/api/app/lib/schedule/attendance.js
+++ b/api/app/lib/schedule/attendance.js
@@ -7,7 +7,7 @@ module.exports = function (app, opts) {
{
interval: '34 21 4 * * *',
// interval: '*/3 * * * *',
- immediate: true,
+ // immediate: true,
// proRun: true,
},
async () => {
diff --git a/web/client/assets/images/background/loginBackgroundimg.png b/web/client/assets/images/background/loginBackgroundimg.png
new file mode 100644
index 0000000..ed709cd
Binary files /dev/null and b/web/client/assets/images/background/loginBackgroundimg.png differ
diff --git a/web/client/assets/images/background/loginText.png b/web/client/assets/images/background/loginText.png
new file mode 100644
index 0000000..21fb0fe
Binary files /dev/null and b/web/client/assets/images/background/loginText.png differ
diff --git a/web/client/assets/images/hrImg/back.png b/web/client/assets/images/hrImg/back.png
new file mode 100644
index 0000000..6914924
Binary files /dev/null and b/web/client/assets/images/hrImg/back.png differ
diff --git a/web/client/assets/images/hrImg/department.png b/web/client/assets/images/hrImg/department.png
new file mode 100644
index 0000000..34957a8
Binary files /dev/null and b/web/client/assets/images/hrImg/department.png differ
diff --git a/web/client/assets/images/hrImg/detailBgc.png b/web/client/assets/images/hrImg/detailBgc.png
new file mode 100644
index 0000000..713bfc1
Binary files /dev/null and b/web/client/assets/images/hrImg/detailBgc.png differ
diff --git a/web/client/assets/images/hrImg/export.png b/web/client/assets/images/hrImg/export.png
new file mode 100644
index 0000000..2227ba8
Binary files /dev/null and b/web/client/assets/images/hrImg/export.png differ
diff --git a/web/client/assets/images/hrImg/information.png b/web/client/assets/images/hrImg/information.png
new file mode 100644
index 0000000..28add9d
Binary files /dev/null and b/web/client/assets/images/hrImg/information.png differ
diff --git a/web/client/assets/images/hrImg/man.png b/web/client/assets/images/hrImg/man.png
new file mode 100644
index 0000000..791bab2
Binary files /dev/null and b/web/client/assets/images/hrImg/man.png differ
diff --git a/web/client/assets/images/hrImg/mc.png b/web/client/assets/images/hrImg/mc.png
new file mode 100644
index 0000000..e26217e
Binary files /dev/null and b/web/client/assets/images/hrImg/mc.png differ
diff --git a/web/client/assets/images/hrImg/name.png b/web/client/assets/images/hrImg/name.png
new file mode 100644
index 0000000..98532da
Binary files /dev/null and b/web/client/assets/images/hrImg/name.png differ
diff --git a/web/client/assets/images/hrImg/number.png b/web/client/assets/images/hrImg/number.png
new file mode 100644
index 0000000..edea2b9
Binary files /dev/null and b/web/client/assets/images/hrImg/number.png differ
diff --git a/web/client/assets/images/hrImg/position.png b/web/client/assets/images/hrImg/position.png
new file mode 100644
index 0000000..a93fc5f
Binary files /dev/null and b/web/client/assets/images/hrImg/position.png differ
diff --git a/web/client/assets/images/hrImg/post.png b/web/client/assets/images/hrImg/post.png
new file mode 100644
index 0000000..fd0e1f8
Binary files /dev/null and b/web/client/assets/images/hrImg/post.png differ
diff --git a/web/client/assets/images/hrImg/resume.png b/web/client/assets/images/hrImg/resume.png
new file mode 100644
index 0000000..974058b
Binary files /dev/null and b/web/client/assets/images/hrImg/resume.png differ
diff --git a/web/client/assets/images/hrImg/woman.png b/web/client/assets/images/hrImg/woman.png
new file mode 100644
index 0000000..08bb1cf
Binary files /dev/null and b/web/client/assets/images/hrImg/woman.png differ
diff --git a/web/client/assets/images/hrImg/year.png b/web/client/assets/images/hrImg/year.png
new file mode 100644
index 0000000..50db588
Binary files /dev/null and b/web/client/assets/images/hrImg/year.png differ
diff --git a/web/client/src/app.jsx b/web/client/src/app.jsx
index 14ac081..37d0ba7 100644
--- a/web/client/src/app.jsx
+++ b/web/client/src/app.jsx
@@ -5,6 +5,7 @@ import Layout from './layout';
import Auth from './sections/auth';
import Example from './sections/example';
import NoMatch from './sections/noMatch';
+import HumanAffairs from './sections/humanAffairs';
const App = props => {
const { projectName } = props
@@ -29,8 +30,9 @@ const App = props => {
return (
)
diff --git a/web/client/src/layout/actions/webSocket.js b/web/client/src/layout/actions/webSocket.js
index 106186b..e91971e 100644
--- a/web/client/src/layout/actions/webSocket.js
+++ b/web/client/src/layout/actions/webSocket.js
@@ -12,7 +12,6 @@ export function initWebSocket ({ ioUrl, token, pomsUserId }) {
if (user) {
user = JSON.parse(user)
token = user.token
- pomsUserId = user.pomsUserInfo?.id
}
}
if (!ioUrl || !token || !pomsUserId) {
@@ -28,7 +27,6 @@ export function initWebSocket ({ ioUrl, token, pomsUserId }) {
, {
query: {
token: token,
- pomsUserId: pomsUserId
},
});
dispatch({
diff --git a/web/client/src/layout/components/header/index.jsx b/web/client/src/layout/components/header/index.jsx
index d338a87..41d7436 100644
--- a/web/client/src/layout/components/header/index.jsx
+++ b/web/client/src/layout/components/header/index.jsx
@@ -31,22 +31,30 @@ const Header = (props) => {
}}
header={{
logo: (
-
+
+
+
+
+
+ 项企一体化数字应用平台
+
+
+ //
),
- text: (
- <>
+ // text: (
+ // <>
- {/* */}
-
- {/* { }} menu={{}} trigger="click" position="bottomRight"> */}
- }>
- {/* */}
- {/* */}
- >
- ),
+ // {/* */}
+ //
+ // {/* { }} menu={{}} trigger="click" position="bottomRight"> */}
+ // }>
+ // {/* */}
+ // {/* */}
+ // >
+ // ),
}}
footer={
<>
@@ -75,7 +83,22 @@ const Header = (props) => {
)
}
})}
-
+
+
+
+ {
+ dispatch(actions.auth.logout(user));
+ if (socket) {
+ socket.disconnect();
+ }
+ history.push(`/signin`);
+ }}>
+ 退出
+
+
+
+ {/* {
- {
- history.push(`/userCenter`);
- }}>
-
-
-
-
- 用户中心
-
-
-
-
-
-
-
- 安全认证
-
-
{
dispatch(actions.auth.logout(user));
@@ -138,13 +142,8 @@ const Header = (props) => {
history.push(`/signin`);
}}>
退出
- {/* */}
-
- {/* collapseButton collapseText */}
-
-
-
+ */}
>
}
/>
diff --git a/web/client/src/sections/auth/containers/login.jsx b/web/client/src/sections/auth/containers/login.jsx
index 4b81829..531cce9 100644
--- a/web/client/src/sections/auth/containers/login.jsx
+++ b/web/client/src/sections/auth/containers/login.jsx
@@ -8,136 +8,109 @@ import { IconLock, IconUser } from '@douyinfe/semi-icons';
import '../style.less'
const Login = props => {
- const { dispatch, user, error, actions, apiRoot, isRequesting } = props
- const form = useRef();
+ const { dispatch, user, error, actions, apiRoot, isRequesting } = props
+ const form = useRef();
- useEffect(() => {
- if (error) {
- Toast.error(error);
- form.current.setValue('password', '')
- }
- }, [error])
+ useEffect(() => {
+ if (error) {
+ Toast.error(error);
+ form.current.setValue('password', '')
+ }
+ }, [error])
- useEffect(() => {
- if (user && user.authorized) {
- dispatch(push('/console'));
- localStorage.setItem('poms_open_sider', JSON.stringify([]))
- localStorage.removeItem('poms_selected_sider')
- }
- }, [user])
+ useEffect(() => {
+ if (user && user.authorized) {
+ dispatch(push('/humanAffairs/archivesCenter/personnelFiles'));
+ localStorage.setItem('poms_open_sider', JSON.stringify(["archivesCenter"]))
+ localStorage.setItem('poms_selected_sider', JSON.stringify(["humanAffairs"]))
+ }
+ }, [user])
- return (
-
-
- {/*
*/}
-
-
POMS运维中台管理系统— 为企业数字化转型提供安全、稳定、高效的数字化运维底座
-
高效— 为运维智能化升级提供领先的创新技术和平台管理
-
智能—助力数字化转型和智能化升级一步到位
-
-
+ background: '#F0F4FF',
+ }}>
-
-
}
- style={{ background: '#FFFFFF', height: 46, marginBottom: 33, border: '1px solid rgb(185 211 239)', borderRadius: '4px' }}
- />
-
}
- style={{ background: '#FFFFFF', height: 46, border: '1px solid rgb(185 211 239)', borderRadius: '4px' }}
- />
-
-
+
+
+
+
+
+
+
+ FS-CRM企业信息管理系统
+
+
}
+ style={{ background: '#FFFFFF', height: 46, marginBottom: 33, border: '1px solid rgb(185 211 239)', borderRadius: '4px' }}
+ />
+
}
+ style={{ background: '#FFFFFF', height: 46, border: '1px solid rgb(185 211 239)', borderRadius: '4px' }}
+ />
+
+
-
+
-
+
-
-
- );
+
+
+ );
}
function mapStateToProps (state) {
- const { auth, global } = state;
- return {
- user: auth.user,
- error: auth.error,
- actions: global.actions,
- apiRoot: global.apiRoot,
- isRequesting: auth.isRequesting
- }
+ const { auth, global } = state;
+ return {
+ user: auth.user,
+ error: auth.error,
+ actions: global.actions,
+ apiRoot: global.apiRoot,
+ isRequesting: auth.isRequesting
+ }
}
export default connect(mapStateToProps)(Login);
\ No newline at end of file
diff --git a/web/client/src/sections/auth/style.less b/web/client/src/sections/auth/style.less
index e1bc5e1..29f6615 100644
--- a/web/client/src/sections/auth/style.less
+++ b/web/client/src/sections/auth/style.less
@@ -4,4 +4,7 @@ input:-webkit-autofill{
box-shadow: 0 0 0px 1000px transparent inset !important;
background-color:transparent;
transition: background-color 50000s ease-in-out 0s;
+}
+.zoomImage{
+ width: 100%; height: 100%; background: url(/assets/images/background/loginBackgroundimg.png) right center no-repeat; background-size: contain;
}
\ No newline at end of file
diff --git a/web/client/src/sections/example/containers/example.jsx b/web/client/src/sections/example/containers/example.jsx
index 95a36da..63220fe 100644
--- a/web/client/src/sections/example/containers/example.jsx
+++ b/web/client/src/sections/example/containers/example.jsx
@@ -1,13 +1,11 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Spin, Card, Button } from '@douyinfe/semi-ui';
-import ExportMembersModal from './export-members-modal'
import '../style.less'
const { Meta } = Card;
const Example = (props) => {
const { dispatch, actions, user, loading, socket } = props
- const [exportModalVs, setExportModalVs] = useState(false);
useEffect(() => {
// ACTION 示例
// dispatch(actions.example.getMembers(user.orgId))
@@ -55,10 +53,6 @@ const Example = (props) => {
>
*/}
- {
- exportModalVs ? setExportModalVs(false)} /> : ''
- }
)
}
diff --git a/web/client/src/sections/humanAffairs/actions/index.js b/web/client/src/sections/humanAffairs/actions/index.js
new file mode 100644
index 0000000..b996305
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/actions/index.js
@@ -0,0 +1,6 @@
+'use strict';
+
+import * as personnelFiles from './personnelFiles'
+export default {
+ ...personnelFiles,
+}
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/actions/personnelFiles.js b/web/client/src/sections/humanAffairs/actions/personnelFiles.js
new file mode 100644
index 0000000..eb926f5
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/actions/personnelFiles.js
@@ -0,0 +1,15 @@
+'use strict';
+
+import { ApiTable, basicAction } from '$utils'
+
+export function getMemberSearch (query) {//搜索项企用户
+ return (dispatch) => basicAction({
+ type: "get",
+ dispatch: dispatch,
+ actionType: "GET_MemberSearch",
+ query: query,
+ url: `${ApiTable.getMemberSearch}`,
+ msg: { option: "搜索项企用户" },
+ reducer: { name: "MemberSearch", params: { noClear: true } },
+ });
+}
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/components/personnelModal.jsx b/web/client/src/sections/humanAffairs/components/personnelModal.jsx
new file mode 100644
index 0000000..a1722af
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/components/personnelModal.jsx
@@ -0,0 +1,273 @@
+import React, { useState, useRef, useEffect } from "react";
+import { connect } from "react-redux";
+import { Modal, Form } from "@douyinfe/semi-ui";
+import { IconAlertCircle } from '@douyinfe/semi-icons';
+
+
+function pushModal (props) {
+ const {
+ close,
+ cancel,
+ visible,
+ dispatch,
+ pepList,
+ actions,
+ adminEdit,//是否是编辑
+ editObj,
+ } = props;
+ const { install } = actions;
+ const form = useRef();//表单
+ const [disablePeople, setDisablePeople] = useState(true); //页码信息
+ const [peopleList, setPeopleList] = useState([]); //人员List
+ const [departmentId, setDepartmentId] = useState(); //部门id
+ const [peopleId, setPeopleId] = useState(); //人员id
+ //初始化
+ useEffect(() => {
+ // if (editObj.id) {
+ // let departmentList = []
+ // for (let i = 0; i < pepList.length; i++) {
+ // if (pepList[i].id == editObj.departments[0].id) {
+ // departmentList = pepList[i].users
+ // }
+ // }
+ // setPeopleList(departmentList)
+ // setDepartmentId(editObj.departments[0].id)
+ // setPeopleId(editObj.pepUserId)
+ // setDisablePeople(false)
+ // }
+ }, []);
+
+ function handleOk () {
+ //点击弹框确定 右边按钮
+ form.current
+ .validate()
+ .then((values) => {
+ if (adminEdit) {
+
+ }
+ else {
+
+ }
+ })
+ }
+ function handleCancel () {
+ cancel();
+ //点击弹框取消 左边按钮
+ }
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+function mapStateToProps (state) {
+ const { auth, global, members } = state;
+ return {
+ // loading: members.isRequesting,
+ user: auth.user,
+ actions: global.actions,
+ // members: members.data,
+ };
+}
+
+export default connect(mapStateToProps)(pushModal);
diff --git a/web/client/src/sections/example/containers/export-members-modal.jsx b/web/client/src/sections/humanAffairs/containers/export-members-modal.jsx
similarity index 100%
rename from web/client/src/sections/example/containers/export-members-modal.jsx
rename to web/client/src/sections/humanAffairs/containers/export-members-modal.jsx
diff --git a/web/client/src/sections/humanAffairs/containers/index.js b/web/client/src/sections/humanAffairs/containers/index.js
new file mode 100644
index 0000000..59a3f85
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/containers/index.js
@@ -0,0 +1,6 @@
+'use strict';
+
+import PersonnelFiles from './personnelFiles';
+import PersonnelFilesDetail from './personnelFilesDetail';
+
+export { PersonnelFiles, PersonnelFilesDetail };
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/containers/personnelFiles.jsx b/web/client/src/sections/humanAffairs/containers/personnelFiles.jsx
new file mode 100644
index 0000000..d8024cf
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/containers/personnelFiles.jsx
@@ -0,0 +1,271 @@
+import React, { useEffect, useState } from 'react';
+import { connect } from 'react-redux';
+import { Select, Input, Button, CheckboxGroup } from '@douyinfe/semi-ui';
+import { IconSearch } from '@douyinfe/semi-icons';
+import PersonnelModal from '../components/personnelModal';
+import ExportMembersModal from './export-members-modal'
+import '../style.less'
+
+const Rest = (props) => {
+ const { dispatch, actions, history, user, loading, socket } = props
+
+ const { humanAffairs } = actions;
+ let [departmentValue, setDepartmentValue] = useState('');
+
+ let [archivesList, setArchivesList] = useState(['', '', '', '', '', '', '', '', '', '']);
+ const [personnelModal, setPersonnelModal] = useState(false);//档案弹框
+ const [exportModalVs, setExportModalVs] = useState(false);
+ const options = [
+ { label: '离职', value: 'abc' },
+ { label: '请假', value: 'hotsoon' },
+ { label: '放假', value: 'pipixia' },
+ { label: '在岗', value: 'toutiao' },
+ { label: '加班', value: 'jiaban' }
+ ]
+
+ let [seachValue, setSeachValue] = useState('');
+ let [typeChoose, setTypeChoose] = useState([]);
+ useEffect(() => {
+ getMemberSearchList()
+ }, [])
+
+ function getMemberSearchList() {//搜索项企用户
+ dispatch(humanAffairs.getMemberSearch()).then((res) => {//搜索项企用户
+ if (res.success) {
+ // let mytableData = JSON.parse(JSON.stringify(res.payload.data.rows));
+ // let mytableKey = []
+ // for (let index = 0; index < mytableData.length; index++) {
+ // mytableData[index].key = mytableData[index].id
+ // mytableKey.push(mytableData[index].id)
+ // }
+ // setTableKey(mytableKey)
+ // setTableData(mytableData)
+ // setLimits(res.payload.data.count)
+ // mylimits.current = res.payload.data.rows.length
+ }
+ })
+ }
+
+ function typeOnChange(e) {//角色选择
+ console.log('e.target.value', e.target.value);
+ setTypeChoose(e.target.value);
+ }
+ function seachValueChange() {
+
+ }
+ return (
+ <>
+
+
+
人事管理
+
/
+
档案中心
+
/
+
人员档案
+
+
+
+
+
+
员工档案
+
EMPLOYEE FILE
+
+
+
{
+ setPersonnelModal(true);
+ }}>
+ 新增档案
+
+
setExportModalVs(true)} style={{ padding: '6px 20px', background: '#00BA85', color: '#FFFFFF', fontSize: 14, cursor: "pointer", marginLeft: 20 }}>
+ 导入员工信息
+
+
+
+
+
+
+
+
+
员工档案详情
+
EMPLOYEE FILE DETAILS
+
+
+
+
+
+
+
+ }
+ showClear
+ placeholder='请输入或选择关键词'
+ value={seachValue}
+ style={{ width: 346 }}
+ onChange={seachValueChange}>
+
+
+
+
+
+
+
+
+ 当前显示
+
+
+ 11条
+
+
+ 结果
+
+
+
+
+ 人员状态:
+
+
+
+
+
+
+
+
+
+ 导出
+
+
+
+
+
+ {
+ archivesList.map((item, index) => {
+ return (
+
+
+
+
+
+
+
+ 0012
+
+
+ 行业服务部
+
+ {/*
+
+
*/}
+
+
+
+
+
+
+
+ 刘昊然
+
+
+ 请假中
+
+
+
+ 23岁
+
+
+
+
+
+
+
+
+ 男
+
+
+
+ 未婚
+
+
+
+
+
+
+
+
+ 人力资源部副部长
+
+
+
+ 9年经验
+
+
+
+
+
+
+
+
+ 入职3年
+
+
+
+ 本科
+
+
+
+
+
+
+
+ )
+ })
+ }
+
+
+
+
+ {//成员弹框
+ personnelModal ?
+ {
+ setPersonnelModal(false);
+ }}
+ close={() => {
+ setPersonnelModal(false);
+ // getUserList()
+ }} >
+ : ''
+ }
+ {
+ exportModalVs ? setExportModalVs(false)} /> : ''
+ }
+ >
+ )
+}
+
+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);
diff --git a/web/client/src/sections/humanAffairs/containers/personnelFilesDetail.jsx b/web/client/src/sections/humanAffairs/containers/personnelFilesDetail.jsx
new file mode 100644
index 0000000..eed1147
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/containers/personnelFilesDetail.jsx
@@ -0,0 +1,752 @@
+import React, { useEffect, useState, useMemo } from 'react';
+import { connect } from 'react-redux';
+import { Select, Input, Button, CheckboxGroup, DatePicker, Table } from '@douyinfe/semi-ui';
+import { IconSearch } from '@douyinfe/semi-icons';
+import ReactECharts from 'echarts-for-react';
+import * as echarts from 'echarts';
+
+import '../style.less'
+
+const Rest = (props) => {
+ const { dispatch, actions, user, loading, socket } = props
+
+ const { humanAffairs } = actions;
+ const [option, setOption] = useState({});
+ const [leaveoption, setLeaveOption] = useState({});
+ const [tableData, setTableData] = useState([{}, {}, {}, {}, {}, {}, {}]) //表格数据
+ const [leaveData, setLeaveData] = useState([{}, {}, {}, {}, {}, {}, {}]) //表格数据
+ const [columns, setColumns] = useState([//表格属性
+ {
+ title: "实例号",
+ dataIndex: "index",
+ key: 'index',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "事由",
+ dataIndex: "why",
+ key: 'why',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "类型",
+ dataIndex: "type",
+ key: 'type',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "发起时间",
+ dataIndex: "originatingTime",
+ key: 'originatingTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "开始时间",
+ dataIndex: "startTime",
+ key: 'startTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "结束时间",
+ dataIndex: "endTime",
+ key: 'endTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "总计时间",
+ dataIndex: "allTime",
+ key: 'allTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ },
+ ])
+ const [leaveColumns, setLeaveColumns] = useState([//表格属性
+ {
+ title: "实例号",
+ dataIndex: "index",
+ key: 'index',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "事由",
+ dataIndex: "why",
+ key: 'why',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "类型",
+ dataIndex: "type",
+ key: 'type',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "发起时间",
+ dataIndex: "originatingTime",
+ key: 'originatingTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "开始时间",
+ dataIndex: "startTime",
+ key: 'startTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "结束时间",
+ dataIndex: "endTime",
+ key: 'endTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ }, {
+ title: "总计时间",
+ dataIndex: "allTime",
+ key: 'allTime',
+ render: (text, r, index) => {
+ return index + 1;
+ },
+ },
+ ])
+ const scroll = useMemo(() => ({ y: 248 }), []);
+
+ useEffect(() => {
+ getMemberSearchList()
+ getWorkOption()
+ getLeaveOption()
+ }, [])
+ function getWorkOption () {//请假折线图
+ var date = [];
+ date.push([2017, 6, 1].join("/"));
+ date.push([2017, 6, 2].join("/"));
+ date.push([2017, 6, 3].join("/"));
+ date.push([2017, 6, 4].join("/"));
+ date.push([2017, 6, 5].join("/"));
+ date.push([2017, 6, 6].join("/"));
+ date.push([2017, 6, 7].join("/"));
+ date.push([2017, 6, 8].join("/"));
+ date.push([2017, 6, 9].join("/"));
+ 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: [
+ ["2017/6/1", 1],
+ ["2017/6/3", 3],
+ ["2017/6/5", 5],
+ ["2017/6/7", 4],
+ ["2017/6/9", 4],
+ ],
+ },
+ {
+ name: "折算",
+ type: "line",
+ areaStyle: {
+ color: 'rgba(254,152,18,0.2)',
+ },
+ smooth: true,
+ data: [
+ ["2017/6/2", 3],
+ ["2017/6/4", 1],
+ ["2017/6/6", 6],
+ ["2017/6/8", 3],
+ ],
+ },
+ ],
+ }
+ setOption(data)
+ }
+ function getLeaveOption () {//请假折线图
+ var date = [];
+ date.push([2017, 6, 1].join("/"));
+ date.push([2017, 6, 2].join("/"));
+ date.push([2017, 6, 3].join("/"));
+ date.push([2017, 6, 4].join("/"));
+ date.push([2017, 6, 5].join("/"));
+ date.push([2017, 6, 6].join("/"));
+ date.push([2017, 6, 7].join("/"));
+ date.push([2017, 6, 8].join("/"));
+ date.push([2017, 6, 9].join("/"));
+ let data = {
+ 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: [
+ ["2017/6/1", 1],
+ ["2017/6/3", 3],
+ ["2017/6/5", 5],
+ ["2017/6/7", 4],
+ ["2017/6/9", 4],
+ ],
+ },
+ ],
+ }
+ setLeaveOption(data)
+ }
+ function getMemberSearchList () {//搜索项企用户
+ dispatch(humanAffairs.getMemberSearch()).then((res) => {//搜索项企用户
+ if (res.success) {
+ // let mytableData = JSON.parse(JSON.stringify(res.payload.data.rows));
+ // let mytableKey = []
+ // for (let index = 0; index < mytableData.length; index++) {
+ // mytableData[index].key = mytableData[index].id
+ // mytableKey.push(mytableData[index].id)
+ // }
+ // setTableKey(mytableKey)
+ // setTableData(mytableData)
+ // setLimits(res.payload.data.count)
+ // mylimits.current = res.payload.data.rows.length
+ }
+ })
+ }
+ return (
+ <>
+
+
+
人事管理
+
/
+
档案中心
+
/
+
人员档案
+
/
+
档案详情
+
+
+
+
+
+
+
+
+
张小小的个人档案
+
+
+
+
+
+
+
+
+
+
+ {/* 基本信息 */}
+
+
+ 基本信息
+
+
+
+
+ 证件号:
+
+
+ 3211011290000022
+
+
+
+
+ 联系方式:
+
+
+ 13221212211
+
+
+
+
+
+
+
+
+ 出生日期:
+
+
+ 1998年6月15日
+
+
+
+
+
+
+
+
+
+
+
+ 工作地点:
+
+
+ 江西-南昌
+
+
+
+
+
+ {/* 学历信息 */}
+
+
+ 学历信息
+
+
+
+
+
+ 毕业时间:
+
+
+ 2022年12月31日
+
+
+
+
+
+
+ {/* 职务信息 */}
+
+
+ 职务信息
+
+
+
+
+
+ 所属部门:
+
+
+ 行业服务部
+
+
+
+
+
+
+
+
+ 转试用期时间:
+
+
+ 2022年12月31日
+
+
+
+
+ 转正时间:
+
+
+ 2022年12月31日
+
+
+
+
+
+
+
+
+
+
+
+
+ 他/她的简历
+
+
+
+
+
+
+
+
+
+
+
+ 基础动作
+
+
+ 时间筛选:
+
+
+
+
+
+
+ 加班信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 累计加班时长:
+
+
+ 436小时
+
+
+
+
+
+
+
+
+
+
+
+ 请假信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 剩余年假:
+
+
+ 436小时
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+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);
diff --git a/web/client/src/sections/humanAffairs/index.js b/web/client/src/sections/humanAffairs/index.js
new file mode 100644
index 0000000..e011eb7
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/index.js
@@ -0,0 +1,15 @@
+'use strict';
+
+import reducers from './reducers';
+import routes from './routes';
+import actions from './actions';
+import { getNavItem } from './nav-item';
+
+export default {
+ key: 'humanAffairs',
+ name: '人事管理',
+ reducers: reducers,
+ routes: routes,
+ actions: actions,
+ getNavItem: getNavItem
+};
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/nav-item.jsx b/web/client/src/sections/humanAffairs/nav-item.jsx
new file mode 100644
index 0000000..e2f2869
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/nav-item.jsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { IconCode } from '@douyinfe/semi-icons';
+
+export function getNavItem (user, dispatch) {
+ return (
+ [
+ {
+ itemKey: 'humanAffairs',
+ text: '人事管理',
+ icon: ,
+ items: [
+ {
+ itemKey: 'archivesCenter',
+ text: '档案中心',
+ icon: ,
+ to: '/humanAffairs/archivesCenter/personnelFiles',
+ items: [{
+ itemKey: 'personnelFiles', to: '/humanAffairs/archivesCenter/personnelFiles', text: '人员档案'
+ }]
+ },
+ ]
+ },
+ ]
+ );
+}
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/reducers/index.js b/web/client/src/sections/humanAffairs/reducers/index.js
new file mode 100644
index 0000000..7ed1088
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/reducers/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+export default {
+
+}
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/routes.js b/web/client/src/sections/humanAffairs/routes.js
new file mode 100644
index 0000000..9fb9882
--- /dev/null
+++ b/web/client/src/sections/humanAffairs/routes.js
@@ -0,0 +1,30 @@
+import { PersonnelFiles,PersonnelFilesDetail } from './containers';
+
+export default [{
+ type: 'inner',
+ route: {
+ path: '/humanAffairs',
+ key: 'humanAffairs',
+ breadcrumb: '人事管理',
+ // 不设置 component 则面包屑禁止跳转
+ childRoutes: [{
+ path: '/archivesCenter',
+ key: 'archivesCenter',
+ breadcrumb: '档案中心',
+ childRoutes: [{
+ path: '/personnelFiles',
+ key: 'personnelFiles',
+ component: PersonnelFiles,
+ breadcrumb: '人员档案',
+ }]
+ },]
+ }
+},{
+ type: 'inner',
+ route: {
+ path: "/personnelFilesDetail",
+ key: 'personnelFilesDetail',
+ breadcrumb: '人员档案详情',
+ component: PersonnelFilesDetail
+ }
+}];
\ No newline at end of file
diff --git a/web/client/src/sections/humanAffairs/style.less b/web/client/src/sections/humanAffairs/style.less
new file mode 100644
index 0000000..e69de29
diff --git a/web/client/src/utils/webapi.js b/web/client/src/utils/webapi.js
index 7ed808c..e49acad 100644
--- a/web/client/src/utils/webapi.js
+++ b/web/client/src/utils/webapi.js
@@ -16,40 +16,8 @@ export const ApiTable = {
login: "login",
logout: "logout",
- //设置-鉴权管理
- getOrganizationDeps: 'organization/deps',//获取项企(PEP)全部部门及其下用户
- getOrganizationUser: 'organization/user',//获取成员列表
- putOrganizationUser: 'organization/user/{pomsUserId}',//更新成员状态
- postOrganizationUser: 'organization/user',//添加/编辑成员
- deteleOrganizationAdmin: 'organization/admin/{pomsUserId}',//删除管理员
-
- //设置-关系映射
- getProjectPoms: 'project/poms',//获取已绑定项目列表
- getProjectAnxincloud: 'project/anxincloud',//获取安心云项目
- getProjectPmanage: 'project/pmanage',//获取PEP项目管理项目
- postProjectBind: 'project/bind',//绑定安心云、项目管理项目
- getProjectAppList: 'project/app_list',//获取应用列表
- deleteProjectBind: 'project/bind/{bindId}',//删除安心云、项目管理项目绑定关系
-
-
- //告警
- getProjectPoms: 'project/poms', //获取已绑定项目
- getAlarmLnspection: 'alarm/application/inspection', //查询应用巡检信息
- putAlarmApplicationNoted: 'alarm/application/noted', //预览状态
- getAlarmLnspectionApi: 'alarm/application/api', //查询应用接口/元素错误信息
- postApiConfirm: "alarm/application/api_confirm", //确认应用接口/元素错误信息
- getAlarmDataGroup: 'alarm/data/group', //获取数据告警分类
- getAlarmDataList: "alarm/data/list", //查询数据告警列表
- getAlarmDataDetailAgg: 'alarm/data/detail_agg', //查询数据告警详情聚集数据
- getAlarmDataDetail: 'alarm/data/detail', //查询数据告警详情
- putAlarmdataConfirm: "alarm/data/confirm", //确认数据告警
- getAlarmVideoList: 'alarm/video/list', //查询视频告警列表
- getAlarmVideoDeviceKind: 'alarm/video/device_kind', //查询视频设备类型
- putAlarmVideoConfirm: 'alarm/video/confirm', //确认视频告警信息
- getVcmpAuth: 'vcmp/auth', // 获取视频平台应用鉴权token
-
- //服务-信鸽服务
- getPush: "push", //获取推送配置列表
+ //人事管理-人员档案
+ getMemberSearch: 'member/search',//搜索项企用户
};
export const RouteTable = {
diff --git a/web/routes/attachment/index.js b/web/routes/attachment/index.js
index d1621e0..8ba1021 100644
--- a/web/routes/attachment/index.js
+++ b/web/routes/attachment/index.js
@@ -51,7 +51,9 @@ module.exports = {
let upload = async function (ctx, next) {
try {
+ console.log('-------------');
const { token } = ctx.request.query
+ console.log(token);
if (token) {
const { files } = await parse(ctx.req)
const file = files[0]