基于PHP的企业考勤管理系统设计与实现(源码+lw+部署文档+讲解等)
具体实现截图
主要功能:
基于php的企业考勤管理系统
系统分为员工,经理,管理员三个角色:
员工功能:
员工可以登录系统网站
员工查看公司的公告系统
员工查看公司的部门信息
员工查看公司同事的通讯录信息
员工查看自己的工资信息
员工可以在线签到,签退,查看每日的考勤记录
员工可以在线申请请假,请假需要经理审核
员工可以查看自己的缺勤记录信息
密码修改
经理功能:
经理登录系统后台
经理查看个人信息,修改个人信息
经理查看公司的公告信息
经理查看自己部门下的员工信息
经理对部门的员工考勤进行查看
经理对员工的请假进行审批
经理可以记录员工的缺勤信息
密码修改
管理员功能:
管理员登录系统后台
公告管理,管理员添加,删除公司的公告信息
部门管理,管理员可以添加,删除公司的部门
员工管理,管理员可以添加,删除,修改公司的员工
经理管理,管理员可以为部门添加经理
工资管理,管理员可以为部门员工发放工资和记录
考勤统计,管理员可以查看各部门的考勤情况,并且进行图标统计
请假统计,管理员可以查看各部门的请假情况,并且进行图标统计
密码修改php版本: 5.3以上
开发工具: notepad++,sublime,phpstorm都可
数据库: mysql
服务器: apache
集成环境: phpstudy
详细技术:HTML+CSS+JS+PHP+MYSQL+PhpStudy
代码参考
@IgnoreAuth
@PostMapping(value = “/login”)
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq(“username”, username));
if(user==null || !user.getPassword().equals(password)) {
return R.error(“账号或密码不正确”);
}
String token = tokenService.generateToken(user.getId(),username, “users”, user.getRole());
return R.ok().put(“token”, token);
}
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
String token = CommonUtil.getRandomString(32);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
if(tokenEntity!=null) {
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
}
return token;
}
/**
-
权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {public static final String LOGIN_TOKEN_KEY = “Token”;
@Autowired
private TokenService tokenService;@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//支持跨域请求 response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization"); response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
response.setStatus(HttpStatus.OK.value());
return false;
}IgnoreAuth annotation; if (handler instanceof HandlerMethod) { annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class); } else { return true; } //从header中获取token String token = request.getHeader(LOGIN_TOKEN_KEY); /** * 不需要验证权限的方法直接放过 */ if(annotation!=null) { return true; } TokenEntity tokenEntity = null; if(StringUtils.isNotBlank(token)) { tokenEntity = tokenService.getTokenEntity(token); } if(tokenEntity != null) { request.getSession().setAttribute("userId", tokenEntity.getUserid()); request.getSession().setAttribute("role", tokenEntity.getRole()); request.getSession().setAttribute("tableName", tokenEntity.getTablename()); request.getSession().setAttribute("username", tokenEntity.getUsername()); return true; } PrintWriter writer = null; response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); try { writer = response.getWriter(); writer.print(JSONObject.toJSONString(R.error(401, "请先登录"))); } finally { if(writer != null){ writer.close(); } }
// throw new EIException(“请先登录”, 401);
return false;
}
}
- 点赞
- 收藏
- 关注作者
评论(0)