项目简介
中小企业人事管理系统是一款基于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 构建,整体设计简洁直观,操作流畅,用户可快速上手。