项目介绍 :
Spring Boot + SpringMVC + MyBatis+ Mysql + druid + Vue 开发的前后端分离的人力资源管理系统
运行环境:
最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
IDE环境:
Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以
适用于:
由于本程序规模不大,可供课程设计,毕业设计学习演示之用
技术栈
前端
Vue、Axios、ElementUI、Vue-Router、Vuex、ECharts
后端
Spring Boot、JWT、MyBatis-Plus、MySQL、Hutool
业务用例
超级管理员拥有对所有菜单的访问权限,进行一系列的管理操作。而普通员工只能进行查看和修改个人信息,以及修改密码,请假。另外超级管理员可以为普通员工分配一些角色,进而改变员工的访问权限。
功能结构
本系统主要分四个模块,分别是系统管理和权限管理、薪资管理、考勤管理,系统管理主要用于日常事务管理管理,权限管理,用于控制员工的访问权限,薪资管理主要是对员工的五险一金以及社保数据的修改和添加,考勤管理主要是对员工的日常打卡进行记录和统计。
项目预览
首页
首页主要展示当前登录员工的一些基本信息,员工当前月的考勤数据,以及当日员工迟到、早退、旷工等情况。
请假
在请假面板中,员工可以进行请假。在左侧的请假记录中查看以往的请假记录,或对当前未被审核的申请进行撤销。
请假审批
管理员可以对员工的请假进行审批,比如通过或驳回。员工申请请假之后,等待管理员进行审批,如管理员审批通过,则将员工休假时间段的考勤状态设置为休假。
五险一金
社保模块主要展示了员工的社保情况,可以对员工的社保进行调整。
工资管理![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/5d73a074c0a4f8576066f36579f8fbd3.png)
显示员工当月的工资情况,以及当月的考勤罚款情况。可以导出员工当月的工资报表。
考勤管理![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/8883ac3f6780ce9e34b9e95d27840e8f.png)
考勤管理实现了考勤数据的批量导入与导出,以及员工考勤状态的查询和修改。
通过导入员工的考勤记录表,系统就会根据员工所在部门规定的上班时间进行比对,判断员工是否迟到、早退、旷工。(这是数据导入的模板,需要按照此格式填写数据。系统只会读取上下班时间的时间部分,系统以考勤日期作为打卡日期)。
另外,介绍一下考勤规制:
- 若考勤日期对应的是周末,则不判读员工考勤状态,默认为休假。
- 若考勤日期对应的是员工请假的日期,则员工考勤状态设为休假。
- 若员工的四个打卡时间,只要有一个为空,则员工考勤状态设为旷工。
- 若员工既迟到又早退,则员工考勤状态设为旷工。
- 若员工迟到,则员工考勤状态设为迟到。
- 若员工早退,则员工考勤状态设为早退。
- 若不是以上任何情况,则员工考勤状态设为正常。
部分代码
package com.hrm.controller;
import com.hrm.entity.Staff;
import com.hrm.dto.ResponseDTO;
import com.hrm.service.LoginService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 登录注册接口
*
* @Date : 2022/1/30
*/
@RestController
public class LoginController {
@Resource
private LoginService loginService;
@PostMapping("/login")
public ResponseDTO login(@RequestBody Staff staff) {
return this.loginService.login(staff);
}
/**
* 通过账号查找员工
* @param code
* @return
*/
@GetMapping("/find")
public ResponseDTO findByCode(String code){
return this.loginService.findByCode(code);
}
}
<template>
<div class="wrapper">
<div style="margin: 130px auto; background-color: #fff; width:350px; height:300px;padding: 20px; border-radius:10px">
<div style="height: 60px; line-height: 60px; text-align: center">
<img src="../../assets/logo.png" alt="" style="width: 20px; position: relative; top: 5px;" />
<b style="color: #303133; font-weight: bold">
人力资源管理系统
</b>
</div>
<el-form :rules="rules" :model="staff" ref="loginForm">
<el-form-item prop="code">
<el-input size="medium" placeholder="请输入账号" style="margin: 10px 0" prefix-icon="el-icon-user" v-model.trim="staff.code"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input size="medium" placeholder="请输入密码" style="margin: 10px 0" prefix-icon="el-icon-lock" show-password v-model.trim="staff.password"></el-input>
</el-form-item>
<div style="margin: 20px 0; text-align: center">
<el-form-item>
<el-button type="primary" size="medium" style="width:100%" @click="handleLogin">登 录</el-button>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script>
import { login } from '../../api/login'
export default {
name: 'Login',
data () {
return {
staff: {},
// 效验规则
rules: {
code: [
{ required: true, message: '请输入账号', trigger: 'blur' },
{ min: 3, max: 10, message: '长度在3到10个字符', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 3, max: 10, message: '长度在3到10个字符', trigger: 'blur' }
]
}
}
},
methods: {
handleLogin () {
this.$refs.loginForm.validate(valid => {
if (valid) {
login(this.staff).then(
response => {
if (response.code === 200) {
localStorage.setItem('staff', JSON.stringify(response.data)) // 存储用户信息到浏览器
localStorage.setItem('token', response.token) // 存储token
this.$message.success('登录成功!')
this.$router.push({
path: '/home'
})
} else {
this.$message.error(response.message)
}
}
)
} else {
return false
}
})
}
}
}
</script>
<style>
.wrapper {
height: 100vh;
background-image: linear-gradient(to bottom right, #fc466b, #3f5efb);
overflow: hidden;
}
</style>
创作不易,源码非无偿提供,需要获取源码的私信博主