SpringBoot + Vue 前后端分离项目实战:权限 + 工作流 + 报表

Spring Boot 3 + Vue 3 前后端分离完整实战项目
核心功能:权限(RBAC + JWT) + 工作流(Flowable 7) + 报表(EasyExcel + ECharts)
(2026 年最新技术栈 + 可直接落地代码结构)

这套方案已在多家中大型企业落地,适合企业级后台管理系统、OA、ERP、审批系统等场景。
整个项目从零搭建到上线,大约 1–2 周即可完成 MVP(最小可用版本)。

一、项目整体架构(推荐结构)

project-root/
├── ruoyi-backend/          # Spring Boot 后端(单体或微服务均可)
│   ├── src/main/java/com/ruoyi/
│   │   ├── modules/        # 业务模块
│   │   │   ├── system/     # 权限系统
│   │   │   ├── flowable/   # 工作流
│   │   │   └── report/     # 报表
│   │   └── common/         # 通用工具
│   └── pom.xml
├── ruoyi-frontend/         # Vue 3 前端
│   ├── src/
│   │   ├── views/          # 页面
│   │   ├── router/         # 动态路由 + 权限守卫
│   │   ├── store/          # Pinia(用户、权限、token)
│   │   └── components/     # 工作流组件、报表组件
│   └── vite.config.ts
├── sql/                    # 数据库脚本(sys + flowable)
└── docker-compose.yml      # 一键部署(可选)

二、技术栈(2026 年推荐最新版本)

后端

  • Spring Boot 3.3+
  • Java 21(或 17)
  • Spring Security + JWT(无状态)
  • MyBatis-Plus + Druid
  • Flowable 7.x(Spring Boot Starter 原生集成)
  • EasyExcel 4.x(Excel 报表)
  • Knife4j(接口文档)
  • Redis(缓存 + 分布式锁)

前端

  • Vue 3.4 + Vite 5 + TypeScript
  • Element Plus(或 Ant Design Vue)
  • Pinia + Vue Router 4
  • Axios + 请求拦截器
  • ECharts 5(报表可视化)
  • bpmn-js 或 @flowable/bpmn(流程设计器,可选)

数据库:MySQL 8 + Redis 7

三、快速启动项目(5 分钟跑通骨架)

后端(推荐使用 RuoYi-Vue-Plus 或 JeecgBoot 作为脚手架改造)

  1. 去 Gitee/GitHub 搜索 “RuoYi-Vue-Plus” 或 “JeecgBoot” 下载最新 Spring Boot 3 版本(两者都已原生支持 Flowable)。
  2. 或从零新建(Spring Initializr):
  • 依赖勾选:Web、Security、MySQL、Lombok、MyBatis-Framework
  • 手动加入:
    xml ¨K21K <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</artifactId> <version>7.0.0</version> </dependency> ¨K22K <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>4.0.2</version> </dependency>

前端

npm create vue@latest ruoyi-frontend
cd ruoyi-frontend
npm install element-plus pinia vue-router axios echarts bpmn-js

四、核心功能实现详解

1. 权限系统(RBAC + JWT + 动态菜单)

后端关键代码

// JWT 工具类 + Security 配置(核心过滤器)
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(...) {
        String token = getToken(request);
        if (StringUtils.isNotEmpty(token) && jwtService.validateToken(token)) {
            String username = jwtService.getUsername(token);
            // 加载用户权限放入 SecurityContext
            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
            UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(...);
            SecurityContextHolder.getContext().setAuthentication(auth);
        }
    }
}

菜单表 + 角色表 + 用户-角色-菜单关联(MyBatis-Plus 自动生成)

前端动态路由(核心):

// router/index.ts
const router = createRouter({ ... })

router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()
  if (userStore.token) {
    if (userStore.roles.length === 0) {
      await userStore.getInfo()           // 获取后端返回的权限菜单
      const accessedRoutes = filterAsyncRoutes(userStore.menus)
      accessedRoutes.forEach(route => router.addRoute(route))
    }
    next()
  } else {
    to.path === '/login' ? next() : next('/login')
  }
})

2. 工作流(Flowable 7 实战——请假审批示例)

后端集成(只需加 starter 即可自动配置):

# application.yml
flowable:
  database-schema-update: true
  async-executor-activate: true
  history-level: full

启动流程

// 部署流程定义
@PostMapping("/deploy")
public void deploy() {
    repositoryService.createDeployment()
        .addClasspathResource("processes/leave.bpmn20.xml")
        .deploy();
}

// 启动实例
runtimeService.startProcessInstanceByKey("leave", variables);

前端

  • 使用 bpmn-js 实现流程设计器(拖拽画流程)
  • 任务待办列表 + 审批按钮(completeTask)

完整请假流程示例(推荐直接用 RuoYi 官方 Flowable 扩展)。

3. 报表系统(双模式:Excel导出 + 大屏可视化)

后端 EasyExcel 导出(最常用):

@GetMapping("/export")
public void export(HttpServletResponse response) {
    List<ReportVO> list = reportService.list();
    EasyExcel.write(response.getOutputStream(), ReportVO.class)
             .sheet("销售报表")
             .doWrite(list);
}

前端 ECharts 大屏(Pinia 管理数据):

<template>
  <div ref="chartRef" style="width:100%; height:500px"></div>
</template>

<script setup>
import { onMounted } from 'vue'
import * as echarts from 'echarts'

const chartRef = ref()
onMounted(() => {
  const chart = echarts.init(chartRef.value)
  chart.setOption({ /* 你的 option */ })
})
</script>

高级报表:集成 JasperReports 或 Jeecg 的 Online 报表(零代码拖拽)。

五、联调与安全

  • Axios 请求拦截器自动带 Authorization: Bearer xxx
  • 后端 @PreAuthorize("hasAuthority('sys:user:list')") 注解权限
  • CORS 配置(生产用 Nginx 代理)
  • 全局异常 + 统一返回 Result

六、推荐直接基于开源项目改造(最快上岸方式)

  1. RuoYi-Vue-Plus(强烈推荐)—— 已集成 Flowable + Vue3 + Spring Boot 3
  2. JeecgBoot(低代码神器)—— 自带在线流程设计器 + 在线报表配置器
  3. Renren-Fast-Vue3 —— 简洁版,适合学习

直接在这些项目上二次开发,权限 + 工作流 + 报表 基本开箱即用,改业务即可。

七、一键部署建议

  • Docker + docker-compose(Nginx + Spring Boot + MySQL + Redis + Flowable UI)
  • 推荐前端打包后放入 Nginx 静态目录,后端打 jar 包

需要我立刻给你:

  • 完整 GitHub 项目结构 + SQL 脚本
  • 请假工作流完整 BPMN + 前后端代码
  • 销售报表(Excel + ECharts 大屏)全套代码
  • 权限动态路由 + 按钮级权限完整实现

直接回复:“给我请假工作流完整代码” 或 “给我整个项目压缩包结构” 或 “给我部署脚本”,我马上发给你!

这个实战项目做完,你完全可以把它写进简历,作为金三银四的杀手锏项目。
冲!上岸就在 2026!🚀

文章已创建 4862

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部