diff --git a/api/app/lib/controllers/auth/index.js b/api/app/lib/controllers/auth/index.js
index 7f529da..32cb1bf 100644
--- a/api/app/lib/controllers/auth/index.js
+++ b/api/app/lib/controllers/auth/index.js
@@ -82,13 +82,14 @@ async function login(ctx, next) {
});
const { adminHr, id } = emisLoginRes;
let codes = [];
+ let resources = [];
//人资管理员-所有权限
if (adminHr.some(admin => admin.id == id)) {
- const resource = await models.Resource.findAll({
- attributes: ['code'],
+ resources = await models.Resource.findAll({
+ attributes: ['id', 'name', 'code', 'parentId'],
order: [['id', 'asc']]
})
- codes = resource.map(r => r.code);
+ codes = resources.map(r => r.code);
} else {
const userResources = await models.RoleResource.findAll({
attributes: ['id', 'resId'],
@@ -104,18 +105,18 @@ async function login(ctx, next) {
}, {
required: true,
model: models.Resource,
- attributes: ['id', 'name', 'code'],
+ attributes: ['id', 'name', 'code', 'parentId'],
}],
order: [['id', 'asc']]
});
- let rslt = [];
userResources && userResources.map(ur => {
- if (!rslt.some(r => r.id === ur.resId)) {
- rslt.push(ur.resource);
+ if (!resources.some(r => r.id === ur.resId)) {
+ resources.push(ur.resource);
codes.push(ur.resource.code);
}
})
}
+ emisLoginRes.resources = resources;
emisLoginRes.codes = codes;
ctx.status = 200;
ctx.body = emisLoginRes;
diff --git a/web/client/src/layout/components/header/index.jsx b/web/client/src/layout/components/header/index.jsx
index 1ddd5ab..30bf342 100644
--- a/web/client/src/layout/components/header/index.jsx
+++ b/web/client/src/layout/components/header/index.jsx
@@ -1,8 +1,7 @@
"use strict";
import React, { useState, useEffect } from 'react';
import { connect } from "react-redux";
-import { SplitButtonGroup, Dropdown, Button, Nav, Avatar } from '@douyinfe/semi-ui';
-import { IconTreeTriangleDown } from '@douyinfe/semi-icons';
+import { Nav } from '@douyinfe/semi-ui';
import { headerItemsFun } from './contant';
import "./index.less";
diff --git a/web/client/src/layout/containers/layout/index.jsx b/web/client/src/layout/containers/layout/index.jsx
index 56f4a73..1b20308 100644
--- a/web/client/src/layout/containers/layout/index.jsx
+++ b/web/client/src/layout/containers/layout/index.jsx
@@ -10,7 +10,7 @@ import { resize } from '../../actions/global';
import * as NProgress from 'nprogress';
import PerfectScrollbar from 'perfect-scrollbar';
import { useLocation } from "react-router";
-import { RouteTable } from '$utils';
+import { RouteTable, defaultUrl } from '$utils';
import { RouteRequest } from '@peace/utils';
import Cookie from 'js-cookie';
import { login, LOGIN_SUCCESS } from '../../../sections/auth/actions/auth';
@@ -207,6 +207,19 @@ const LayoutContainer = props => {
}
}
})
+ const getRouteUrl = (resources) => {
+ let newCodes = [];
+ let firstParentIds = resources.filter(c => !c.parentId);
+ firstParentIds = firstParentIds.map(p => p.id);
+ let resourcesNew = resources.filter(c => c.parentId);
+ resourcesNew.map(c => {
+ if (firstParentIds.includes(c.parentId)) {
+ newCodes.push({ id: c.id, code: c.code });
+ }
+ })
+ newCodes = newCodes.sort((a, b) => (a.id - b.id))
+ return newCodes;
+ }
const getUserInfoByToken = () => {
if (requestUser) {
requestUser = false;
@@ -215,9 +228,11 @@ const LayoutContainer = props => {
dispatch(login({ token })).then(res => {
if (res.type == 'LOGIN_SUCCESS') {
const data = res.payload?.user || {}
- if (data.codes && data.codes.length) {
+ let newCodes = getRouteUrl(data.resources);
+ if (newCodes && newCodes.length) {
+ let url = defaultUrl[newCodes[0].code].url;
dispatch(actions.layout.initWebSocket({ ioUrl: apiRoot, token: data.token, hrUserId: data.hrUserInfo && hrUserInfo.id }))
- history.push('/humanAffairs/archivesCenter/personnelArchives/personnelFiles')
+ history.push(url)
localStorage.setItem('poms_open_sider', JSON.stringify(["archivesCenter"]))
localStorage.setItem('poms_selected_sider', JSON.stringify(["humanAffairs"]))
setLoading(false);
diff --git a/web/client/src/sections/humanAffairs/containers/employeeAuth.jsx b/web/client/src/sections/humanAffairs/containers/employeeAuth.jsx
index 4b70b16..88d01cd 100644
--- a/web/client/src/sections/humanAffairs/containers/employeeAuth.jsx
+++ b/web/client/src/sections/humanAffairs/containers/employeeAuth.jsx
@@ -109,17 +109,6 @@ const EmployeeAuth = (props) => {
const dataRangeChange = (e) => {
setDataRange(e.target.value);
};
- const treeList = []
- if (resourceList && resourceList.rows) {
- resourceList.rows.forEach((item) => {
- item.child = resourceList.rows.filter((sec) => {
- return sec.parentId === item.id
- })
- if (item.parentId === null) {
- treeList.push(item)
- }
- })
- }
const getValues = () => {
let two = {}
let checkedList = [];
@@ -144,6 +133,22 @@ const EmployeeAuth = (props) => {
})
return { two, checkedList };
}
+ const treeList = []
+ if (resourceList && resourceList.rows) {
+ resourceList.rows.forEach((item) => {
+ item.child = resourceList.rows.filter((sec) => {
+ return sec.parentId === item.id
+ })
+ if (item.parentId === null) {
+ treeList.push(item)
+ }
+ })
+ let values = getValues();
+ if (!Alltwo)
+ Alltwo = values.two;
+ if (!AllCheckedList)
+ AllCheckedList = values.checkedList;
+ }
const onChangeAll = (value) => {
if (value.target.checked) {
setAllChecked(true);
@@ -169,7 +174,8 @@ const EmployeeAuth = (props) => {
resourceIdAll = [...values.checkedList, ...resourceIdAll];
resourceIdAll = resourceIdAll.sort((a, b) => (a - b));
} else {
- resourceIdAll = [...AllCheckedList, ...Alltwo];
+ resourceIdAll = Object.keys(Alltwo);
+ resourceIdAll = [...AllCheckedList, ...resourceIdAll];
resourceIdAll = resourceIdAll.sort((a, b) => (a - b));
}
return resourceIdAll;
@@ -235,7 +241,7 @@ const EmployeeAuth = (props) => {
setCheckedList([...checkedList, ...selList])
twos[value.target.value] = true
twos[recod.id] = true
- setTwo(two)
+ setTwo(twos)
const resourceIdAll = getResourceIdAll();
const resourceIds = getResourceIds(two, [...checkedList, ...selList])
if (resourceIds.toString() === resourceIdAll.toString()) {
@@ -245,9 +251,10 @@ const EmployeeAuth = (props) => {
}
} else {
setAllChecked(false);
+ selList.push(value.target.value);
setCheckedList(getDiffer(checkedList, selList));
twos[value.target.value] = false
- setTwo(two)
+ setTwo(twos)
}
};
const checkItem = (e, recod) => {
@@ -315,9 +322,11 @@ const EmployeeAuth = (props) => {
let two = {}
let checkList = []
if (res.payload.data && res.payload.data.rows.length) {
- checkList = res.payload.data.rows.map(e => {
- two[e.resId] = true
- return e.resId
+ res.payload.data.rows.map(e => {
+ if (Alltwo[e.resId])
+ two[e.resId] = true
+ if (AllCheckedList.includes(e.resId))
+ checkList.push(e.resId)
})
setDataRange(res.payload.data.rows[0].role.dataRange || 1);
setCheckedList(checkList)
@@ -342,6 +351,8 @@ const EmployeeAuth = (props) => {
for (let item in two) {
if (two[item]) {
resourceId.push(parseInt(item));
+ } else {
+ setCheckedList(getDiffer(checkedList, [parseInt(item)]));
}
}
resourceId = [...checkedList, ...resourceId]
diff --git a/web/client/src/sections/humanAffairs/nav-item.jsx b/web/client/src/sections/humanAffairs/nav-item.jsx
index e5784e2..4d7ba64 100644
--- a/web/client/src/sections/humanAffairs/nav-item.jsx
+++ b/web/client/src/sections/humanAffairs/nav-item.jsx
@@ -16,7 +16,7 @@ export function getNavItem(user, dispatch) {
text: '人事管理',
icon: ,
items: [
- isAuthorized('PERSONNELFILEMANAGEMENT') ? {
+ isAuthorized('PERSONNELFILES') || isAuthorized('EMPLOYEEINFORMATION') || isAuthorized('JOBRATING') ? {
itemKey: 'personnelArchives',
text: '人员档案',
icon: ,
@@ -42,7 +42,7 @@ export function getNavItem(user, dispatch) {
itemKey: 'department', to: '/humanAffairs/archivesCenter/deptArchives/department', text: '部门档案'
} : {}]
} : {},
- isAuthorized('LEAVEMANAGEMENT') ? {
+ isAuthorized('ATTENDANCESTATISTICS') || isAuthorized('LEAVESTATISTICS') || isAuthorized('OVERTIMESTATISTICS') ? {
itemKey: 'leaveManagement',
text: '假勤管理',
icon: ,
@@ -102,7 +102,7 @@ export function getNavItem(user, dispatch) {
} : {}
]
} : {},
- isAuthorized('TRAININGMANAGEMENT') ? {
+ isAuthorized('PERSONALTRAININGRECORDS') || isAuthorized('DEPARTMENTTRAININGRECORDS') ? {
itemKey: 'trainingManagement',
text: '培训管理',
icon: ,
@@ -115,7 +115,7 @@ export function getNavItem(user, dispatch) {
itemKey: 'departmentTrainRecord', to: '/humanAffairs/train/trainingManagement/departmentTrainRecord', text: '部门培训记录'
} : {}]
} : {},
- isAuthorized('BASICACTIONMANAGEMENT') ? {
+ isAuthorized('WEEKLYREPORTMANAGEMENT') || isAuthorized('SALESLOG') || isAuthorized('ENGINEERINGLOG') ? {
itemKey: 'basicAction',
text: '基本动作',
icon: ,
@@ -131,7 +131,7 @@ export function getNavItem(user, dispatch) {
itemKey: 'pmLog', to: '/humanAffairs/achievements/basicAction/pmLog', text: '工程日志'
} : {}]
} : {},
- isAuthorized('EMPLOYEEASSESSMENT') ? {
+ isAuthorized('EMPLOYEEASSESSMENTDURINGPROBATIONARYPERIOD') || isAuthorized('FORMALEMPLOYEEASSESSMENT') ? {
itemKey: 'employeeKPI',
text: '员工考核',
icon: ,
@@ -144,7 +144,7 @@ export function getNavItem(user, dispatch) {
itemKey: 'regular', to: '/humanAffairs/achievements/employeeKPI/regular', text: '正式员工考核'
} : {}]
} : {},
- isAuthorized('MIDDLELEVELASSESSMENT') ? {
+ isAuthorized('MIDDLELEVELMONTHLYPROCESSASSESSMENT') || isAuthorized('MIDLEVELQUARTERLYASSESSMENT') ? {
itemKey: 'middleKPI',
text: '中层考核',
icon: ,
@@ -157,7 +157,7 @@ export function getNavItem(user, dispatch) {
itemKey: 'quarter', to: '/humanAffairs/achievements/middleKPI/quarter', text: '季度考核'
} : {}]
} : {},
- isAuthorized('SENIORASSESSMENT') ? {
+ isAuthorized('MONTHLYPROCESSASSESSMENTFORSENIORMANAGEMENT') || isAuthorized('QUARTERLYASSESSMENTOFSENIORMANAGEMENT') ? {
itemKey: 'highKPI',
text: '高管考核',
icon: ,
diff --git a/web/client/src/utils/func.js b/web/client/src/utils/func.js
index a66537d..bace4c5 100644
--- a/web/client/src/utils/func.js
+++ b/web/client/src/utils/func.js
@@ -6,4 +6,75 @@ export const isAuthorized = (authcode) => {
const { codes } = userInfo
return codes && codes.includes(authcode);
}
+}
+export const defaultUrl = {
+ "PERSONNELFILES": {//人员档案
+ url: 'humanAffairs/archivesCenter/personnelArchives/personnelFiles'
+ },
+ "EMPLOYEEINFORMATION": {//员工信息
+ url: 'humanAffairs/archivesCenter/personnelArchives/employeeInformation'
+ },
+ "JOBRATING": {//岗位评级
+ url: 'humanAffairs/archivesCenter/personnelArchives/positionRating'
+ },
+ "DEPARTMENTARCHIVES": {//部门档案
+ url: 'humanAffairs/archivesCenter/deptArchives/department'
+ },
+ "ATTENDANCESTATISTICS": {//出勤统计
+ url: 'humanAffairs/employeeRelationship/leaveManagement/attendanceStatistics'
+ },
+ "LEAVESTATISTICS": {//请假统计
+ url: 'humanAffairs/employeeRelationship/leaveManagement/leaveStatistics'
+ },
+ "OVERTIMESTATISTICS": {//加班统计
+ url: 'humanAffairs/employeeRelationship/leaveManagement/overtimeStatistics'
+ },
+ "EMPLOYEECOMMUNICATIONSTATISTICS": {//员工沟通统计
+ url: 'humanAffairs/employeeRelationship/communication/employeeCommunication'
+ },
+ "APPOINTMENTRECORD": {//任用记录
+ url: 'humanAffairs/recruit/recruitRecord/appointmentRecords'
+ },
+ "SALESPERSONNELDISTRIBUTION": {//销售人员分布
+ url: 'humanAffairs/recruit/salesStatistics/personnelDistribution'
+ },
+ "TRAININGRESOURCEREPOSITORY": {//培训资源储存库
+ url: 'humanAffairs/train/trainFiles/resourceRepository'
+ },
+ "PERSONALTRAININGRECORDS": {//个人培训记录
+ url: 'humanAffairs/train/trainingManagement/personalTrainRecord'
+ },
+ "DEPARTMENTTRAININGRECORDS": {//部门培训记录
+ url: 'humanAffairs/train/trainingManagement/departmentTrainRecord'
+ },
+ "WEEKLYREPORTMANAGEMENT": {//周报管理
+ url: 'humanAffairs/achievements/basicAction/weeklyManagement'
+ },
+ "SALESLOG": {//销售日志
+ url: 'humanAffairs/achievements/basicAction/saleLog'
+ },
+ "ENGINEERINGLOG": {//工程日志
+ url: 'humanAffairs/achievements/basicAction/pmLog'
+ },
+ "EMPLOYEEASSESSMENTDURINGPROBATIONARYPERIOD": {//试用期员工考核
+ url: 'humanAffairs/achievements/employeeKPI/probationer'
+ },
+ "FORMALEMPLOYEEASSESSMENT": {//正式员工考核
+ url: 'humanAffairs/achievements/employeeKPI/regular'
+ },
+ "MIDDLELEVELMONTHLYPROCESSASSESSMENT": {//中层月度过程考核
+ url: 'humanAffairs/achievements/middleKPI/monthlyProcess'
+ },
+ "MIDLEVELQUARTERLYASSESSMENT": {//中层季度考核
+ url: 'humanAffairs/achievements/middleKPI/quarter'
+ },
+ "MONTHLYPROCESSASSESSMENTFORSENIORMANAGEMENT": {//高层月度过程考核
+ url: 'humanAffairs/achievements/highKPI/highMonthly'
+ },
+ "QUARTERLYASSESSMENTOFSENIORMANAGEMENT": {//高层季度考核
+ url: 'humanAffairs/achievements/highKPI/Highquarter'
+ },
+ "REWARDANDPUNISHMENTINFORMATION": {//奖惩信息
+ url: 'humanAffairs/achievements/penalties/penaltiesRecord'
+ }
}
\ No newline at end of file
diff --git a/web/client/src/utils/index.js b/web/client/src/utils/index.js
index 860a315..9b8f619 100644
--- a/web/client/src/utils/index.js
+++ b/web/client/src/utils/index.js
@@ -1,21 +1,22 @@
'use strict';
-import { isAuthorized } from './func';
+import { isAuthorized, defaultUrl } from './func';
import { AuthorizationCode } from './authCode';
import {
- ApiTable, RouteTable,
- AxyRequest, EmisRequest,
- basicAction, RouteRequest
+ ApiTable, RouteTable,
+ AxyRequest, EmisRequest,
+ basicAction, RouteRequest
} from './webapi'
import { UserAttribute } from './userAttribute';
export {
- isAuthorized,
- AuthorizationCode,
+ isAuthorized,
+ defaultUrl,
+ AuthorizationCode,
- RouteTable,
- ApiTable,
- AxyRequest,
- EmisRequest,
- basicAction,
- RouteRequest,
- UserAttribute
+ RouteTable,
+ ApiTable,
+ AxyRequest,
+ EmisRequest,
+ basicAction,
+ RouteRequest,
+ UserAttribute
}
\ No newline at end of file