基于springboot2+vue2框架的工作流程管理系统

基于springboot2+vue2框架的工作流程管理系统 (❁´◡❁)您的点赞➕评论➕收藏⭐➕关注是作者创作的最大动力 支持我点赞收藏⭐️留言关注欢迎留言讨论源码获取 调试运行 问题答疑 有兴趣可以联系我 文末有往期免费源码直接领取获取无删减无套路我们常常在当下感到时间慢觉得未来遥远但一旦回头看时间已经悄然流逝。对于未来尽管如此也应该保持一种从容的态度相信未来仍有许多可能性等待着我们。本项目为工作流程管理系统基于 Spring Boot MyBatis-Plus Vue 2 Element UI 开发用于对各类项目进行全流程管理。系统支持管理员和普通用户两种角色管理员可以对项目信息、用户信息、公告信息、字典数据项目类型、公告类型、审核状态等进行管理并审核用户加入项目的申请。用户可以创建项目需管理员审核、查看项目列表、申请加入其他用户的项目、在已加入或自己创建的项目中发布项目进度、查看公告等。详细描述1. 技术栈层级技术/框架后端框架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, Fastjson2. 详细介绍2.1 主要功能模块2.1.1 项目管理项目信息表(xiangmu)存储项目名称、封面、类型、所属地点、负责人用户、项目简介、审核状态审核中/通过/拒绝、审核意见、创建时间等。用户创建项目后默认状态为“审核中”管理员审核通过后方可生效或被其他用户看到。项目负责人可以管理自己创建的项目。2.1.2 用户管理用户表(yonghu)存储账户、密码、姓名、头像、性别、联系方式、身份证号、邮箱、逻辑删除标记。支持用户注册、登录、密码重置默认为123456、个人信息维护。2.1.3 加入项目与审核加入项目表(jiarudexiangmu)记录用户申请加入某个项目的信息包括项目ID、用户ID、加入审核状态审核中/通过/拒绝、审核结果文本。用户申请加入项目后项目负责人或管理员可以审核该申请。2.1.4 项目进度管理项目进度表(xiangmujindu)记录项目参与用户包括负责人和已加入成员对某个项目发布的进度内容包含进度文字描述、添加时间。展示进度列表时会关联项目信息和用户信息确保只有项目相关方负责人、已通过加入申请的成员可以查看和添加进度。(免费无删减无套路)java swing管理系统源码 程序 代码 图形界面11套」链接https://pan.quark.cn/s/784a0d377810提取码见文章末尾(免费无删减无套路) Python源代码开发文档说明23套」链接https://pan.quark.cn/s/1d351abbd11c提取码见文章末尾(免费无删减无套路)计算机专业精选源码论文26套」链接https://pan.quark.cn/s/8682a41d0097提取码见文章末尾(免费无删减无套路)Java web项目源码整合开发ssm30套链接https://pan.quark.cn/s/1c6e0826cbfd提取码见文章末尾(免费无删减无套路)「在线考试系统源码含搭建教程」链接https://pan.quark.cn/s/96c4f00fdb43提取码见文章末尾2.1.5 公告管理公告信息表(news)存储公告标题、类型、图片、发布时间、公告详情。管理员可发布公告所有用户均可查看。2.1.6 字典数据管理字典表(dictionary)存储下拉选项的枚举值例如项目类型项目类型1/2/3、项目审核状态审核中/通过/拒绝、加入审核状态、公告类型、性别等。支持动态维护系统启动时加载到 ServletContext 中供全局使用。2.1.7 权限控制使用 Shiro 进行权限控制结合自定义的 Token 拦截器AuthorizationInterceptor验证请求头中的 Token。后端通过角色区分管理员和用户前端路由根据menu.js中的菜单配置进行权限展示。2.2 数据库设计表名说明yonghu用户表账户、基本信息xiangmu项目信息表jiarudexiangmu用户申请加入项目记录表xiangmujindu项目进度记录表news公告信息表dictionary字典表维护枚举值users后台管理员表token用户登录 Token 记录表config系统配置表如百度地图密钥等2.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 // 数据库初始化脚本3. 部分代码3.1 用户登录接口YonghuController.javaIgnoreAuth RequestMapping(value /login) public R login(String username, String password, String captcha, HttpServletRequest request) { YonghuEntity yonghu yonghuService.selectOne(new EntityWrapperYonghuEntity().eq(username, username)); if(yonghunull || !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; }3.2 项目保存XiangmuController.javaRequestMapping(/save) public R save(RequestBody XiangmuEntity xiangmu, HttpServletRequest request){ // ... 角色处理 WrapperXiangmuEntity queryWrapper new EntityWrapperXiangmuEntity() .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(xiangmuEntitynull){ xiangmu.setXiangmuYesnoTypes(1); // 默认为审核中 xiangmu.setInsertTime(new Date()); xiangmu.setCreateTime(new Date()); xiangmuService.insert(xiangmu); return R.ok(); } else { return R.error(511,表中有相同数据); } }3.3 项目进度列表查询XiangmujinduController.javaRequestMapping(/page) public R page(RequestParam MapString, Object params, HttpServletRequest request){ String role String.valueOf(request.getSession().getAttribute(role)); if(用户.equals(role)){ ArrayListInteger ids new ArrayList(); // 用户作为负责人所创建的项目ID ListXiangmuEntity xiangmuEntities xiangmuService.selectList(new EntityWrapperXiangmuEntity() .eq(yonghu_id, request.getSession().getAttribute(userId))); for (XiangmuEntity xiangmu:xiangmuEntities) ids.add(xiangmu.getId()); // 用户已通过加入申请的项目ID ListJiarudexiangmuEntity jiarudexiangmuEntities jiarudexiangmuService.selectList(new EntityWrapperJiarudexiangmuEntity() .eq(yonghu_id, request.getSession().getAttribute(userId)) .eq(jiarudexiangmu_yesno_types, 2)); for (JiarudexiangmuEntity j:jiarudexiangmuEntities) ids.add(j.getXiangmuId()); params.put(ids,ids); } // ... 分页查询 }3.4 字典表转换工具方法DictionaryServiceImpl.javapublic void dictionaryConvert(Object obj, HttpServletRequest request) { // 通过反射获取所有以Types结尾的整型字段 // 根据字段名拼接出对应的Value字段从ServletContext中的字典Map获取显示值并赋值 ServletContext servletContext request.getServletContext(); MapString, MapInteger, String dictionaryMap (MapString, MapInteger, String) servletContext.getAttribute(dictionaryMap); // 具体反射赋值代码... }往期免费源码对应视频免费获取--SpringBootVue宠物商城网站系统(❁´◡❁)您的点赞➕评论➕收藏⭐➕关注是作者创作的最大动力 支持我点赞收藏⭐️留言关注欢迎留言讨论源码 调试运行 问题答疑 有兴趣可以联系我学习知识需费心整理归纳更费神。源码免费人人喜码农福利等你领常来我家多看看网址扣棣编程感谢支持常陪伴点赞关注别忘记山高路远坑又深大军纵横任驰奔谁敢横刀立马行唯有点赞关注成⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇点击此处获取源码⬇⬇⬇⬇⬇⬇⬇⬇⬇