Java项目:人力资源管理系统( SpringBoot +MyBatis+ Vue + ElementUI)

项目介绍 :

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

业务用例

请添加图片描述
超级管理员拥有对所有菜单的访问权限,进行一系列的管理操作。而普通员工只能进行查看和修改个人信息,以及修改密码,请假。另外超级管理员可以为普通员工分配一些角色,进而改变员工的访问权限。

功能结构

请添加图片描述
本系统主要分四个模块,分别是系统管理和权限管理、薪资管理、考勤管理,系统管理主要用于日常事务管理管理,权限管理,用于控制员工的访问权限,薪资管理主要是对员工的五险一金以及社保数据的修改和添加,考勤管理主要是对员工的日常打卡进行记录和统计。

项目预览
首页

请添加图片描述
首页主要展示当前登录员工的一些基本信息,员工当前月的考勤数据,以及当日员工迟到、早退、旷工等情况。

请假

请添加图片描述
在请假面板中,员工可以进行请假。在左侧的请假记录中查看以往的请假记录,或对当前未被审核的申请进行撤销。

请假审批

请添加图片描述

管理员可以对员工的请假进行审批,比如通过或驳回。员工申请请假之后,等待管理员进行审批,如管理员审批通过,则将员工休假时间段的考勤状态设置为休假。

五险一金

请添加图片描述
请添加图片描述

社保模块主要展示了员工的社保情况,可以对员工的社保进行调整。

工资管理请添加图片描述

显示员工当月的工资情况,以及当月的考勤罚款情况。可以导出员工当月的工资报表。

考勤管理请添加图片描述

考勤管理实现了考勤数据的批量导入与导出,以及员工考勤状态的查询和修改。请添加图片描述
通过导入员工的考勤记录表,系统就会根据员工所在部门规定的上班时间进行比对,判断员工是否迟到、早退、旷工。(这是数据导入的模板,需要按照此格式填写数据。系统只会读取上下班时间的时间部分,系统以考勤日期作为打卡日期)。

另外,介绍一下考勤规制:

  • 若考勤日期对应的是周末,则不判读员工考勤状态,默认为休假。
  • 若考勤日期对应的是员工请假的日期,则员工考勤状态设为休假。
  • 若员工的四个打卡时间,只要有一个为空,则员工考勤状态设为旷工。
  • 若员工既迟到又早退,则员工考勤状态设为旷工。
  • 若员工迟到,则员工考勤状态设为迟到。
  • 若员工早退,则员工考勤状态设为早退。
  • 若不是以上任何情况,则员工考勤状态设为正常。
部分代码
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>

创作不易,源码非无偿提供,需要获取源码的私信博主

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java水泥工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值