全部版块 我的主页
论坛 会计与财务管理论坛 七区 会计与财务管理 企业分析报告
50 0
2025-12-12

项目简介

中小企业人事管理系统是一款基于Spring Boot与Vue.js技术栈开发的前后端分离Web应用,专为中小型企业设计,提供全面的人力资源管理功能。系统覆盖了员工信息、部门与职位配置、考勤记录、薪资核算、福利发放、培训安排、任务分配以及招聘流程等多个核心模块,构建了一套高效、安全且易于操作的人事管理体系。

通过角色权限机制,系统划分出管理员员工两类用户角色,确保不同层级的操作权限分明,保障数据的安全性与系统的合规运行。

系统架构说明

本系统采用标准的前后端分离架构模式:

  • 后端服务:基于Spring Boot框架搭建,对外提供RESTful风格的API接口,使用Apache Shiro实现用户的认证与权限控制。
  • 前端界面:采用Vue.js构建单页面应用(SPA),利用axios完成与后端的数据交互,提升用户体验。
  • 数据库支持:兼容MySQL与SQL Server两种主流数据库,可通过配置文件灵活切换,增强系统部署适应性。

主要功能模块

核心管理功能

  • 员工管理:支持员工信息的增删改查操作,并可关联其考勤与工资数据。
  • 部门管理:实现部门设置、人员调配及职责定义等功能。
  • 职位管理:维护公司内部所有岗位信息。
  • 福利管理:发布并管理员工福利项目。
  • 培训管理:规划培训计划并记录参与情况。
  • 任务管理:分配工作任务,支持进度跟踪与评论互动。
  • 工资管理:自动计算薪资、生成报表,支持导出与打印功能。
  • 考勤管理:记录员工上下班打卡信息,生成统计图表。
  • 招聘管理:发布招聘需求,管理应聘岗位及相关数据报表。

权限控制机制

  • 管理员:具备系统全部模块的完整操作权限,包括数据维护与系统配置。
  • 员工:仅能查看与其相关的部门、福利、培训、任务、工资和考勤等信息,无法进行修改或删除操作。

技术实现细节

后端技术栈

  • 核心框架:Spring Boot 2.2.2.RELEASE
  • ORM框架:MyBatis-Plus 2.3
  • 数据库连接:Spring Boot JDBC
  • 数据库支持:MySQL / SQL Server(支持配置切换)
  • 权限框架:Apache Shiro 1.3.2
  • 数据校验:Hibernate Validator (validation-api)
  • 工具类库:Hutool 4.0.12、Apache Commons Lang3、Commons IO、Google Protobuf
  • JSON处理:FastJson 1.2.8
  • AI集成:百度AI Java SDK 4.4.1

前端技术栈

  • 前端框架:Vue.js
  • UI组件库:Element UI
  • 图表展示:ECharts
  • HTTP请求:axios
  • 地图服务:VueAMap(基于高德地图)
  • Excel导出:vue-json-excel
  • 打印支持:print-js

开发环境与工具

  • 项目管理工具:Maven
  • JDK版本:1.8
  • 前端构建工具:Vue CLI

数据库结构设计

系统包含多个数据表,对应以下主要实体对象:

yuangong
(员工)
bumenxinxi
(部门信息)
zhiweixinxi
(职位信息)
fulixinxi
(福利信息)
peixunxinxi
(培训信息)
renwuxinxi
(任务信息)
gongzixinxi
(工资信息)
kaoqinxinxi
(考勤信息)
zhaopinxinxi
(招聘信息)
users
(系统用户)
token
(用户令牌)
config
(系统配置)

后端代码示例(ZhaopinxinxiController.java)

package com.controller;

@RestController
@RequestMapping("/zhaopinxinxi")
public class ZhaopinxinxiController {

    @Autowired
    private ZhaopinxinxiService zhaopinxinxiService;

    /**
     * 后端分页列表接口
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, 
                  ZhaopinxinxiEntity zhaopinxinxi,
                  HttpServletRequest request) {
        
        EntityWrapper<ZhaopinxinxiEntity> ew = new EntityWrapper<ZhaopinxinxiEntity>();
        
        PageUtils page = zhaopinxinxiService.queryPage(params,
            MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, zhaopinxinxi), params), params));
        
    }
}
    
5.2 实体类示例 (ZhaopinxinxiEntity.java)

@TableName("zhaopinxinxi")
public class ZhaopinxinxiEntity<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;

    /**
     * 招聘岗位
     */
    private String zhaopingangwei;

    /**
     * 招聘人数
     */
    private Integer zhaopinrenshu;

    /**
     * 录用人数
     */
    private Integer luyongrenshu;

    /**
     * 备注
     */
    private String beizhu;

    /**
     * 发布时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
    @DateTimeFormat
    private Date fabushijian;

    private Date addtime;

    // Getter 和 Setter 方法
}
5.4 权限工具类 (utils.js)

export function isAuth(tableName, key) {
    let role = storage.get("role");
    if (!role) {
        role = '管理员';
    }
    let menus = menu.list();
    for (let i = 0; i < menus.length; i++) {
        if (menus[i].roleName == role) {
            for (let j = 0; j < menus[i].backMenu.length; j++) {
                for (let k = 0; k < menus[i].backMenu[j].child.length; k++) {
                    if (tableName == menus[i].backMenu[j].child[k].tableName) {
                        let buttons = menus[i].backMenu[j].child[k].buttons.join(',');
                        return buttons.indexOf(key) !== -1 || false;
                    }
                }
            }
        }
    }
    return false;
}
5.3 前端路由配置 (router-static.js)

const routes = [{
    path: '/index',
    name: '首页',
    component: Index,
    children: [
        {
            // 不设置具体路径,将 main 视为默认页面
            path: '/',
            name: '首页',
            component: Home,
            meta: { icon: '', title: 'center' }
        },
        {
            path: '/bumenxinxi',
            name: '部门信息',
            component: bumenxinxi
        },
        {
            path: '/gongzixinxi',
            name: '工资信息',
            component: gongzixinxi
        }
        // ... 其他路由定义
    ]
}];
/**
 * 查询招聘信息列表
 */
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, 
              ZhaopinxinxiEntity zhaopinxinxi, 
              HttpServletRequest request) {
    QueryWrapper<ZhaopinxinxiEntity> queryWrapper = new QueryWrapper<ZhaopinxinxiEntity>();
    PageUtils page = zhaopinxinxiService.queryPage(params, queryWrapper);
    return R.ok().put("data", page);
}

/**
 * 保存招聘信息
 */
@RequestMapping("/save")
public R save(@RequestBody ZhaopinxinxiEntity zhaopinxinxi, 
              HttpServletRequest request) {
    zhaopinxinxi.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());
    zhaopinxinxiService.insert(zhaopinxinxi);
    return R.ok();
}

6. 部分截图

7. 项目总结

7.1 项目特点

功能全面:系统覆盖中小企业人事管理中的核心业务流程,各模块职责明确、结构清晰。

技术先进:采用当前主流的前后端分离开发模式,技术选型科学合理,具备良好的可维护性与性能表现。

权限精细:实现了基于角色的访问控制机制,不同用户拥有差异化操作权限,有效保障系统数据安全。

扩展性强:整体架构采用模块化设计理念,便于后续功能迭代和系统升级。

用户体验良好:界面布局简洁直观,交互逻辑顺畅,提升用户的使用效率与满意度。

本项目采用企业级架构设计,具备完整的业务功能与清晰的代码结构,适用于中小型企业的人事管理需求,同时也为开发者提供了一个优秀的 Spring Boot + Vue.js 全栈开发学习范例。

在技术实现上具备多项亮点:

  • 前后端完全分离,支持独立部署,提升团队协作效率
  • 集成 Shiro 权限框架,实现精细化、灵活的权限控制机制
  • 使用 MyBatis-Plus 简化数据库操作,显著提升开发效率
  • 支持数据导出、打印等实用功能,增强系统可用性

界面层面基于 Element UI 构建,整体设计简洁直观,操作流畅,用户可快速上手。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群