Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI

news/2025/2/22 4:01:22/文章来源:https://www.cnblogs.com/liyublogs/p/18726449

Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI

一、版本

RuoYi-Vue版本:v3.8.7

JMreport报表版本: v1.9.4

JimuBI大屏版本:V1.9.4

二、数据库

积木数据库sql

下载后,使用数据库管理工具执行sql脚本,将需要的一些表导入进去。

三、Pom中引入积木报表最新依赖

打开ruoyi-admin下的pom.xml引入最新依赖

        <!-- 积木报表 --><dependency><groupId>org.jeecgframework.jimureport</groupId><artifactId>jimureport-spring-boot-starter</artifactId><version>1.9.4</version></dependency><!--积木BI大屏--><dependency><groupId>org.jeecgframework.jimureport</groupId><artifactId>jimubi-spring-boot-starter</artifactId><version>1.9.4</version></dependency>

四、RuoYiApplication添加积木报表扫描文件

打开ruoyi-admin模块中的RuoYiApplication文件

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class },scanBasePackages = {"org.jeecg","com.ruoyi"})

五、配置序列化白名单

打开ruoyi-common模块中Constants文件,修改161行

public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi", "org.jeecg.modules.drag" };

六、SecurityConfig拦截排除

在ruoyi-framework模块中,打开SecurityConfig文件

  1. 添加代码

    .antMatchers("/jmreport/**","/drag/**","/jimubi/**").anonymous()
    
  2. 禁用Https响应

    // 禁用HTTP响应标头
    .headers().frameOptions().disable();
    

    Snipaste_2025-02-20_13-39-46

七、后端创建Controller文件

在ruoyi-admin模块中,创建src/main/java/com/ruoyi/web/controller/tool/reportController.java文件。这个controller目的向前端返回积木的前半部分地址,在前端拼接上后关部分地址。

Snipaste_2025-02-20_13-42-18

代码如下:

package com.ruoyi.web.controller.tool;import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.utils.ip.IpUtils;
import org.springframework.core.env.Environment;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;@Anonymous
@RestController
@RequestMapping("/tool/jm")
public class ReportController {@AutowiredEnvironment environment;//报表设计@PreAuthorize("@ss.hasPermi('tool:report:list')")@GetMapping(value = "/reportList")public String ReportList(){return "http://" + IpUtils.getHostIp() + ":" + environment.getProperty("server.port") + "/jmreport/list";}//报表查看@GetMapping(value = "/reportView")public String ReportView(){return "http://" + IpUtils.getHostIp() + ":" + environment.getProperty("server.port") + "/jmreport/view";}//报表查看@GetMapping(value = "/biList")public String bi(){return "http://" + IpUtils.getHostIp() + ":" + environment.getProperty("server.port") + "/drag/list";}//报表查看@GetMapping(value = "/biView")public String biView(){return "http://" + IpUtils.getHostIp() + ":" + environment.getProperty("server.port") + "/drag/share/view";}
}

八、前端文件(Vue2)创建

  1. 创建src/api/tool/jimu.js文件,代码如下:

    import request from '@/utils/request'export function getReportUrl() {return request({url: '/tool/jm/reportList',method: 'get'})
    }
    export function getReportViewUrl() {return request({url: '/tool/jm/reportView',method: 'get'})
    }
    export function getBiUrl() {return request({url: '/tool/jm/biList',method: 'get'})
    }
    export function getBiViewUrl() {return request({url: '/tool/jm/biView',method: 'get'})
    }
    
  2. 创建src/views/tool/report/reportList.vue文件

    <template><!-- 组件名按照 Vue 2 习惯一般首字母大写,当然小写也能用 --><IFrame :src="url" />
    </template><script>
    // 导入获取 token 的工具函数
    import { getToken } from '@/utils/auth';
    // 导入获取报表 URL 的 API 函数
    import { getReportUrl } from '@/api/tool/jimu';
    // 导入自定义的 IFrame 组件
    import IFrame from "@/components/iFrame/index.vue";export default {// 组件名称name: 'ReportDesign',// 注册子组件components: {IFrame},// 定义组件的数据data() {return {// 初始化 url 为空字符串url: ''};},// 生命周期钩子,在实例创建完成后立即调用created() {this.init();},// 定义组件的方法methods: {init() {getReportUrl().then((res) => {// 将获取到的 URL 拼接上 token 并赋值给 data 中的 urlthis.url = res + "?token=Bearer " + getToken();}).catch((error) => {// 处理接口调用失败的情况console.error('获取报表 URL 失败:', error);// 你可以在这里添加更多错误处理逻辑,比如显示错误提示给用户});}}
    };
    </script>
    
  3. 创建src/views/tool/report/reportView.vue文件

    <template><!-- 按照 Vue 组件命名规范,建议组件名首字母大写 --><IFrame :src="url" />
    </template><script>
    // 导入获取 token 的工具函数
    import { getToken } from '@/utils/auth';
    // 导入获取报表视图 URL 的 API 函数
    import { getReportViewUrl } from '@/api/tool/jimu';
    // 导入自定义的 IFrame 组件
    import IFrame from "@/components/iFrame/index.vue";export default {// 组件名称name: 'ReportView',// 注册子组件components: {IFrame},// 定义组件的数据data() {return {// 初始化 url 为空字符串url: ''};},// 生命周期钩子,在实例创建完成后立即调用created() {this.init();},// 定义组件的方法methods: {init() {getReportViewUrl().then((res) => {// 从路由路径中提取 reportIdconst reportId = this.$route.path.substring(this.$route.path.lastIndexOf("/") + 1);// 拼接 URL、reportId 和 token 并赋值给 urlthis.url = res + "/" + reportId + "?token=Bearer " + getToken();}).catch((error) => {// 处理接口调用失败的情况console.error('获取报表视图 URL 失败:', error);// 可以添加更多错误处理逻辑,如显示错误提示信息给用户});}}
    };
    </script>
    
  4. 创建src/views/tool/report/biList.vue文件

    <template><i-frame :src="url" />
    </template><script>
    import { getToken } from '@/utils/auth';
    import { getBiUrl } from '@/api/tool/jimu';
    import IFrame from "@/components/iFrame/index.vue";export default {name: 'ReportDesign',components: {IFrame},data() {return {url: ''};},created() {this.init();},methods: {init() {getBiUrl().then(res => {this.url = res + "?token=Bearer " + getToken();}).catch(error => {console.error('获取 BI URL 失败:', error);// 可以添加更详细的错误处理逻辑,如显示错误提示信息});}}
    };
    </script>
    
    1. 创建src/views/tool/report/biView.vue文件
    <template><!-- 建议使用大写开头的组件名,遵循 Vue 组件命名规范 --><IFrame :src="url" />
    </template><script>
    // 导入获取 token 的工具函数
    import { getToken } from '@/utils/auth';
    // 导入获取 BI 视图 URL 的 API 函数
    import { getBiViewUrl } from '@/api/tool/jimu';
    // 导入自定义的 IFrame 组件
    import IFrame from "@/components/iFrame/index.vue";export default {// 组件名称name: 'ReportView',// 注册子组件components: {IFrame},// 定义组件的数据data() {return {// 初始化 url 为空字符串url: ''};},// 生命周期钩子,在实例创建完成后立即调用created() {this.init();},// 定义组件的方法methods: {init() {getBiViewUrl().then((res) => {// 从路由路径中提取 reportIdconst reportId = this.$route.path.substring(this.$route.path.lastIndexOf("/") + 1);// 将获取到的 URL 拼接上 reportId 和 token 并赋值给 data 中的 urlthis.url = res + "/" + reportId + "?token=Bearer " + getToken();}).catch((error) => {// 处理接口调用失败的情况console.error('获取 BI 视图 URL 失败:', error);// 可以在这里添加更多错误处理逻辑,例如显示错误提示给用户});}}
    };
    </script>
    

九、后台创建菜单

  1. 创建积木报表首页导航菜单,如果你是按第七步中的文件名创建的前端文件,请按下图创建导航菜单,否则,根据实际的组件修改。权限字符,可以自定义。

Snipaste_2025-02-20_13-50-40

  1. 创建Bi报表

Snipaste_2025-02-20_13-51-00

十、创建报表或大屏

十、创建报表或大屏

在此以创建报表为例

1、预览创建好的积木报表,在地址栏中,找到报表的ID号,如下图中的

引用图片1

2、在ruoyi系统中创建导航菜单

1)路由地址中,要加入报表的ID号

2)组件路径,填写用于显示报表的组件。可以查看第七步 创建src/views/tool/report/reportView.vue文件

3)权限字符中,也加入了报表ID号,用于权限控制

引用图片2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887142.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于java中CAS会引发的ABA问题探究

在并发环境下,为了保证并发安全问题,通常我们会进行加锁操作,比如加上synchronized关键字。但是很多情况下,我们不需要这样的重量级锁,比如说多个线程对某个int类型变量i 进行++操作,但是不加锁吧,又怕影响结果,因为i++不是一个原子操作,会出现并发问题,我们来看个案例…

DHTMLX Gantt 甘特图导出全数据图-----自实现方式过程记录

针对上一篇DHTMLX Gantt甘特图导出全数据图,使用官方提供的方法虽然很方便,也免费,但每次生成图片的时候需要访问下:export.dhtmlx.com的相关授权接口,这对我们的项目如果是在内网(不能联网访问外网的情况)非常不友好,也就无法使用官方的方式了。 那么如果尽量能实现同…

jmter

1.安装 官网下载解压 2.改中文 bin/jmeter.properties 加入 language=zh_CN3.运行 bin/jmeter.bat 4.压测使用 线程组 -> HTTP请求 , HTTP请求头管理线程组 -> 汇总结果线程组属性线程数:配置几个就代表有几个虚拟用户 Ramp-Up 时间(秒):表示从第一个虚拟用户开始生成…

Dify + Ollama + DeepSeek 知识库部署

通过ollama安装deepseek-r1我没有GPU服务器,安装7b版本小模型试试。参考: https://github.com/ollama/ollama 安装ollama # ollama默认端口11434 curl -fsSL https://ollama.com/install.sh | sh ollama pull deepseek-r1:7b # 查看本地模型 ollama list ollama run deepseek-…

2025.2.20(IDEA的入门使用)

今天10点看了视频学习IDEA的基本使用方法。现在来记录一下。 https://www.bilibili.com/video/BV1gb42177hm?spm_id_from=333.788.videopod.episodes&p=7&vd_source=5573907594eed8092d5b30e989fa0415 IDEA创建Java的过程如图:一个大工程里面包含了各个模块,每个模块…

【Spring Security编程】Spring Security自定义配置

一、基于内存的用户认证 1.1 创建自定义配置 实际开发的过程中,我们需要应用程序更加灵活,可以在SpringSecurity中创建自定义配置文件 官方文档: Java自定义配置(https://docs.spring.io/spring-security/reference/servlet/configuration/java.html) UserDetailsService用来…

linux(ubantu)虚拟机上运行c语言程序保姆级教程(附sudo apt-get update 报错连接失败的一种解决方法)

虚拟机使用的是VMware Workstation+Ubuntu 1.安装GCC 在桌面上右键打开终端然后分别输入 sudo apt-get update sudo apt-get install build-essential 注意:输入后会让你输入password,此时输入任何字符屏幕上会什么都没有,但是实际上已经输入进去了,所以直接盲输完密码按回…

flutter3-trip仿携程酒店预订|Flutter3.27+Getx预约旅游酒店App程序

基于Flutter3.x+Dart3+GetX跨平台仿携程/飞猪旅行酒店客房预订查询app系统。 flutter3_trip原创2025新版flutter3.27.1+dart3.6+getx+flutter_datepicker跨平台仿携程/飞猪/同程旅游app酒店客房预订系统。实现了首页、酒店预订模块、酒店搜索/列表/详情、探索动态、订单、消息聊…

【Linux应用】Linux服务器访问不了外网如何安装软件?

大多数服务器都是在隔离的网络环境中,服务器被限制访问互联网。原因当然是出于安全考虑,一旦服务器有外网访问能力,中毒后会主动更新病毒库。比如各种广告、XX全家桶就是这么来的。 那如果想在服务器上安装软件怎么办❓ 可能有人会说先提前下载好,再传上去不就行了嘛。这对…

国产免费的网络监控与分析系统工具

科来网络分析系统(CSNAS)是一款集数据包采集、协议解码、流量分析、故障诊断、安全检测等功能于一体的专业网络管理工具。其核心能力包括实时监控网络流量、识别异常行为、还原会话数据流以及提供多维度性能分析,帮助用户快速定位网络故障、优化性能并提升安全性。 系统要求…

本地md博客自动化上传博客园

该工具会在你这个文档同一目录下生成一个`xxx-cnblog.md`文件,这个就是在他自动帮你上传了图片后,替换了你本地图片的路径,替换为cnblog的图床url路径。前言叠甲:先帮博客园免费打个广告,要用这个方法也往博客园发文喔~ 我的博客园:https://www.cnblogs.com/dhan 需求 经…

cpu的核心数和线程数

在windows操作系统下,想看看自己cpu的核数,我打开任务管理器-性能-CPU,看到我的cpu是2核。 然后,我打开计算机管理-设备管理器-处理器,发现这里显示四个cpu信息,但这四个不是内核数,是线程数。一、概念: 1. 核心数(Cores):CPU实际的物理核心数量,比如双核、四核、六…