基于PHP的企业考勤管理系统设计与实现(源码+lw+部署文档+讲解等)

举报
小蔡coding 发表于 2024/11/01 11:04:45 2024/11/01
【摘要】 基于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;
}
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。