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

130 lines
3.9 KiB

'use strict';
const Hex = require('crypto-js/enc-hex');
const MD5 = require('crypto-js/md5');
const moment = require('moment');
const uuid = require('uuid');
async function getDataRange(ctx) {
//null为所有权限,不加条件过滤
let userIds = null;
let departmentNames = null;
let userNames = null;
let dataRange = null;
const { adminHr, id, department, allDepartment } = ctx.fs.api.userInfo;
//人资管理-所有权限
if (adminHr.filter(admin => admin.id == id).length) {
dataRange = 1;
} else {
const models = ctx.fs.dc.models;
//获取用户对应角色的最高数据范围
let roleRes = await models.Role.findAll({
include: [{
model: models.UserRole,
where: { userId: id }
}]
})
if (roleRes.some(r => r.dataRange && r.dataRange === 1)) {
dataRange = 1;
} else {
const departments = allDepartment.departments;
dataRange = 2;
userIds = [];
userNames = [];
if (department && departments) {
let userDeps = department.map(d => d.id);
departmentNames = department.map(d => d.name);
let deps = departments.filter(d => userDeps.indexOf(d.id) > -1)
if (deps && deps.length > 0) {
deps.map(d => d.users.map(u => {
if (userIds.indexOf(u.id) < 0) {
userIds.push(u.id);
userNames.push(u.name);
}
}));
}
}
}
}
return { dataRange, userIds, departmentNames, userNames };
}
async function login(ctx, next) {
// const transaction = await ctx.fs.dc.orm.transaction();
try {
const models = ctx.fs.dc.models;
const params = ctx.request.body;
let emisLoginRes = null
if (params.username && params.password) {
emisLoginRes = await ctx.app.fs.emisRequest.post('login', {
data: { ...params, code: 'HR' }
})
} else if (params.token) {
emisLoginRes = await ctx.app.fs.emisRequest.get('user-info', {
query: {
token: params.token, code: 'HR'
}
})
}
if (!emisLoginRes) {
throw "无此用户,请使用正确的登录信息"
} else {
emisLoginRes.authorized = true
emisLoginRes.expired = moment().add(1, 'day')
emisLoginRes.hrUserInfo = undefined
await ctx.redis.hmset(emisLoginRes.token, {
expired: moment().add(1, 'day'),
userInfo: JSON.stringify(emisLoginRes)
});
ctx.status = 200;
ctx.body = emisLoginRes;
}
// await transaction.commit();
} catch (error) {
// await transaction.rollback();
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
let message = typeof error == 'string' ? error
: error.response && error.response.body && error.response.body.message ?
error.response.body.message
: "登录失败"
if (message == '账号或密码错误') {
message = '无此用户,请使用正确的登录信息'
}
ctx.body = {
message: message
}
}
}
async function logout(ctx) {
try {
const models = ctx.fs.dc.models;
const params = ctx.request.body;
await ctx.app.fs.emisRequest.put('logout', {
data: params
})
await ctx.redisTools.hdelall(token);
ctx.status = 204;
} catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400;
ctx.body = {
}
}
}
module.exports = {
login,
logout,
getDataRange
};