基于springboot2+vue2框架的工作流程管理系统
温馨提示:
本文最后更新于 2026年05月27日,已超过 14 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1. 资源
认真读完全文可以获取
2. 项目简介
本项目为工作流程管理系统,基于 Spring Boot + MyBatis-Plus + Vue 2 + Element UI 开发,用于对各类项目进行全流程管理。系统支持管理员和普通用户两种角色:
- 管理员:可以对项目信息、用户信息、公告信息、字典数据(项目类型、公告类型、审核状态等)进行管理,并审核用户加入项目的申请。
- 用户:可以创建项目(需管理员审核)、查看项目列表、申请加入其他用户的项目、在已加入或自己创建的项目中发布项目进度、查看公告等。
3. 技术栈
| 层级 | 技术/框架 |
|---|---|
| 后端框架 | Spring Boot 2.2.2.RELEASE, MyBatis-Plus 2.3, Apache Shiro 1.3.2 |
| 前端框架 | Vue 2, Vue Router, Element UI, ECharts, Axios |
| 数据库 | MySQL 5.7.32 |
| 构建工具 | Maven (后端), Vue CLI (前端) |
| 其他工具 | 百度地图 API (vue-amap), 百度人脸识别 (AipFace), POI (Excel导入导出), Hutool, Fastjson |
4. 详细介绍
4.1 主要功能模块
4.1.1 项目管理
- 项目信息表 (
xiangmu):存储项目名称、封面、类型、所属地点、负责人(用户)、项目简介、审核状态(审核中/通过/拒绝)、审核意见、创建时间等。 - 用户创建项目后,默认状态为“审核中”,管理员审核通过后方可生效或被其他用户看到。
- 项目负责人可以管理自己创建的项目。
4.1.2 用户管理
- 用户表 (
yonghu):存储账户、密码、姓名、头像、性别、联系方式、身份证号、邮箱、逻辑删除标记。 - 支持用户注册、登录、密码重置(默认为
123456)、个人信息维护。
4.1.3 加入项目与审核
- 加入项目表 (
jiarudexiangmu):记录用户申请加入某个项目的信息,包括项目ID、用户ID、加入审核状态(审核中/通过/拒绝)、审核结果文本。 - 用户申请加入项目后,项目负责人或管理员可以审核该申请。
4.1.4 项目进度管理
- 项目进度表 (
xiangmujindu):记录项目参与用户(包括负责人和已加入成员)对某个项目发布的进度内容,包含进度文字描述、添加时间。 - 展示进度列表时会关联项目信息和用户信息,确保只有项目相关方(负责人、已通过加入申请的成员)可以查看和添加进度。
4.1.5 公告管理
- 公告信息表 (
news):存储公告标题、类型、图片、发布时间、公告详情。 - 管理员可发布公告,所有用户均可查看。
4.1.6 字典数据管理
- 字典表 (
dictionary):存储下拉选项的枚举值,例如项目类型(项目类型1/2/3)、项目审核状态(审核中/通过/拒绝)、加入审核状态、公告类型、性别等。 - 支持动态维护,系统启动时加载到 ServletContext 中供全局使用。
4.1.7 权限控制
- 使用 Shiro 进行权限控制,结合自定义的 Token 拦截器(
AuthorizationInterceptor)验证请求头中的 Token。 - 后端通过角色区分管理员和用户,前端路由根据
menu.js中的菜单配置进行权限展示。
4.2 数据库设计
| 表名 | 说明 |
|---|---|
yonghu |
用户表(账户、基本信息) |
xiangmu |
项目信息表 |
jiarudexiangmu |
用户申请加入项目记录表 |
xiangmujindu |
项目进度记录表 |
news |
公告信息表 |
dictionary |
字典表(维护枚举值) |
users |
后台管理员表 |
token |
用户登录 Token 记录表 |
config |
系统配置表(如百度地图密钥等) |
4.3 项目结构(关键路径)
gongzuoliuchengguanli
├── src/main/java/com
│ ├── config // 配置类(拦截器、MyBatis-Plus、元数据填充)
│ ├── controller // 控制器层(处理前端请求)
│ ├── dao // MyBatis-Plus Mapper 接口
│ ├── entity // 实体类及 VO、View、Model
│ ├── interceptor // 权限拦截器
│ ├── service // 服务层接口及实现
│ ├── utils // 工具类(分页、文件、HTTP、百度AI等)
│ └── annotation // 自定义注解(IgnoreAuth等)
├── src/main/resources
│ ├── application.yml // 应用配置文件(端口、数据库、MyBatis-Plus)
│ ├── mapper // MyBatis XML 映射文件
│ └── admin/admin // Vue 前端工程源码
├── pom.xml // Maven 依赖
└── db.sql // 数据库初始化脚本
5. 部分代码
5.1 用户登录接口(YonghuController.java)
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));
if(yonghu==null || !yonghu.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(yonghu.getYonghuDelete() != 1)
return R.error("账户已被删除");
String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用户");
R r = R.ok();
r.put("token", token);
r.put("role","用户");
r.put("username",yonghu.getYonghuName());
r.put("tableName","yonghu");
r.put("userId",yonghu.getId());
return r;
}
5.2 项目保存(XiangmuController.java)
@RequestMapping("/save")
public R save(@RequestBody XiangmuEntity xiangmu, HttpServletRequest request){
// ... 角色处理
Wrapper<XiangmuEntity> queryWrapper = new EntityWrapper<XiangmuEntity>()
.eq("xiangmu_name", xiangmu.getXiangmuName())
.eq("xiangmu_types", xiangmu.getXiangmuTypes())
.eq("xiangmu_address", xiangmu.getXiangmuAddress())
.eq("yonghu_id", xiangmu.getYonghuId())
.eq("xiangmu_yesno_types", xiangmu.getXiangmuYesnoTypes())
.eq("xiangmu_yesno_text", xiangmu.getXiangmuYesnoText());
XiangmuEntity xiangmuEntity = xiangmuService.selectOne(queryWrapper);
if(xiangmuEntity==null){
xiangmu.setXiangmuYesnoTypes(1); // 默认为审核中
xiangmu.setInsertTime(new Date());
xiangmu.setCreateTime(new Date());
xiangmuService.insert(xiangmu);
return R.ok();
} else {
return R.error(511,"表中有相同数据");
}
}
5.3 项目进度列表查询(XiangmujinduController.java)
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
String role = String.valueOf(request.getSession().getAttribute("role"));
if("用户".equals(role)){
ArrayList<Integer> ids = new ArrayList<>();
// 用户作为负责人所创建的项目ID
List<XiangmuEntity> xiangmuEntities = xiangmuService.selectList(new EntityWrapper<XiangmuEntity>()
.eq("yonghu_id", request.getSession().getAttribute("userId")));
for (XiangmuEntity xiangmu:xiangmuEntities) ids.add(xiangmu.getId());
// 用户已通过加入申请的项目ID
List<JiarudexiangmuEntity> jiarudexiangmuEntities = jiarudexiangmuService.selectList(new EntityWrapper<JiarudexiangmuEntity>()
.eq("yonghu_id", request.getSession().getAttribute("userId"))
.eq("jiarudexiangmu_yesno_types", 2));
for (JiarudexiangmuEntity j:jiarudexiangmuEntities) ids.add(j.getXiangmuId());
params.put("ids",ids);
}
// ... 分页查询
}
5.4 字典表转换工具方法(DictionaryServiceImpl.java)
public void dictionaryConvert(Object obj, HttpServletRequest request) {
// 通过反射获取所有以"Types"结尾的整型字段
// 根据字段名拼接出对应的"Value"字段,从ServletContext中的字典Map获取显示值并赋值
ServletContext servletContext = request.getServletContext();
Map<String, Map<Integer, String>> dictionaryMap =
(Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
// 具体反射赋值代码...
}
6. 部分截图


















7. 项目总结
本项目实现了一个完整的工作流程管理系统,涵盖了项目生命周期的关键环节:项目创建、审核、成员加入、进度汇报与查看,并提供了公告发布和基础数据维护功能。技术选型主流(Spring Boot + MyBatis-Plus + Vue),代码结构清晰,分为前后端分离架构,具有以下特点:
- 权限控制:基于 Token 的登录验证,区分管理员和普通用户的操作权限。
- 数据字典:通过统一的字典表维护枚举值,并利用 ServletContext 监听器实现启动时加载,提高系统可维护性。
- 关联查询:项目进度、加入项目等模块使用多表联查,确保数据完整性。
- 扩展性:预留了 Excel 批量导入、百度地图定位、人脸比对等接口,方便二次开发。
该项目可作为中小型团队或企业内部项目协作管理的参考实现。
正文到此结束
- 本文标签: Java Spring Spring Boot
- 本文链接: https://blog.xiaobias.com/article/6
- 版权声明: 本文由十五喵原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
