原创

基于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. 部分截图

img1
img2
img3
img4
img5
img6
img7
img8
img9
img10
img11
img12
img13
img14
img15
img16
img17
img18

7. 项目总结

本项目实现了一个完整的工作流程管理系统,涵盖了项目生命周期的关键环节:项目创建、审核、成员加入、进度汇报与查看,并提供了公告发布和基础数据维护功能。技术选型主流(Spring Boot + MyBatis-Plus + Vue),代码结构清晰,分为前后端分离架构,具有以下特点:

  • 权限控制:基于 Token 的登录验证,区分管理员和普通用户的操作权限。
  • 数据字典:通过统一的字典表维护枚举值,并利用 ServletContext 监听器实现启动时加载,提高系统可维护性。
  • 关联查询:项目进度、加入项目等模块使用多表联查,确保数据完整性。
  • 扩展性:预留了 Excel 批量导入、百度地图定位、人脸比对等接口,方便二次开发。

该项目可作为中小型团队或企业内部项目协作管理的参考实现。

自助获取:https://fifteen.xiaobias.com/source/220

正文到此结束
本文目录