帆软报表使用url访问报表,自定义前端搜索,优化报表展示

embedded/2024/11/14 12:48:46/

近期公司页面往报表方向迁移,正好选择了帆软报表,由我负责这一部分的业务代码修改,我们没有采用帆软的鉴权模式。再进行简单的报表展示后发现原始的帆软报表组件不符合前端的设计要求,查询帆软官网后发现要修改是比较繁琐的。

先看一下使用url访问报表

http://frhost:frport/webroot/decision/view/report?viewlet=frname.cpt&op=view&frparam=xxx

实战

这个的项目架构是前端vue,后端是springcloud

前端代码示例

报表

<template><styles-container class="page-container" notBg><template #contMain><div class="style-main" ref="pageContainer"><div class="style-box"><div class="style-box-head"><div><el-date-pickerstyle="height: 30px;"v-model="dateRangeValue"type="daterange"placeholder="请选择日期"value-format="YYYY-MM"start-placeholder="请选择开始日期"end-placeholder="请选择结束日期"@change="getTableList"/><el-input v-model="areaName" style="width: 240px" placeholder="请输入地区" @change="getTableList" class="search_title"/>
<!--              <el-input v-model="industry" style="width: 240px" placeholder="请输入行业" @change="getTableList" class="search_title"/>--><el-input v-model="name" style="width: 240px" placeholder="请输入名称" @change="getTableList" class="search_title"/></div><div><q-button color="query" @click="getTableList"><svg-icon name="icon-sousuo"/>搜索</q-button></div></div></div></div><div class="style-box report_box"><report class="report_style" :reportUrl="reportUrl"></report></div></template></styles-container>
</template><script setup lang="ts">
import {getSdqyzchzb} from "/@/project/report/report";
import {AES_Decrypt} from "/@/utils/secret";const reportUrl = ref('')
const areaName = ref('')
const industry = ref('')
const powerSupplyName = ref('')
const dateRangeValue = ref(['2022-08', '2024-08'])
const getTableList = () => {getSdqyzchzb({'startTime': dateRangeValue.value[0],'endTime': dateRangeValue.value[1],'areaName': areaName.value,'industry': industry.value,'name': name.value}).then(res => {console.log("res :" + JSON.stringify(AES_Decrypt(res.msg)));reportUrl.value = AES_Decrypt(res.msg);});
}onMounted(() => {getTableList();
})
</script><style scoped lang="scss">
.style-box {height: auto;
}.report_box {margin-top: 15px;height: calc(100% - 57px);
}::v-deep(.el-input__wrapper) {border-radius: 5px 0 0 5px !important;
}.search_btn {width: 35px;height: 30px;border-radius: 0 5px 5px 0;border-left: none;color: #1EACA6;
}.report_style {height: 100%;width: 100%;
}.search_title {margin-left: 10px;
}</style>

框架类

<template><iframe :src="reportUrl" :height="height" allowfullscreen="allowfullscreen"></iframe>
</template><script setup lang="ts">javascript">
const props = defineProps({reportUrl: {type: String,default: 'https://www.baidu.com',},height:{type: [String, Number],default: '100%'}
});
</script><style scoped lang="scss"></style>

请求类

export function getFdyhtjhzb(query?: Object) {return http.getRequest(preUrl + '/getReport', query);
}

工具类

javascript">import CryptoJS from "crypto-js"; //引用AES源码js/*** AES 加密* @param word: 需要加密的文本* KEY: // 需要前后端保持一致* mode: ECB // 需要前后端保持一致* pad: Pkcs7 //前端 Pkcs7 对应 后端 Pkcs5*/
const KEY = CryptoJS.enc.Utf8.parse('test')export const AES_Encrypt = (plaintext) => {let ciphertext = CryptoJS.AES.encrypt(plaintext, KEY, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString()return ciphertext
}

后端代码示例

控制器

java">	@GetMapping("/getReport")public R<String> getFdyhtjhzb(@RequestParam String date) {ParameterVO parameterVO = null;parameterVO = new ParameterVO();parameterVO.setViewlet("report.cpt");parameterVO.setItems(Arrays.asList(new ItemVO("op", "view"), new ItemVO("year", date)));return R.ok(AESUtil.encryptFromString(fineRequest.getUrl(parameterVO), Mode.ECB, Padding.PKCS5Padding));}

工具类

java">package com.qctc.servers.utils;import java.nio.charset.StandardCharsets;import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;public class AESUtil {public static final String ENCODE_KEY = "test";public static final String IV_KEY = "test";public static String encryptFromString(String data, Mode mode, Padding padding) {AES aes;if (Mode.CBC == mode) {aes = new AES(mode, padding, new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"), new IvParameterSpec(IV_KEY.getBytes()));} else {aes = new AES(mode, padding, new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"));}return aes.encryptBase64(data, StandardCharsets.UTF_8);}public static String decryptFromString(String data, Mode mode, Padding padding) {AES aes;if (Mode.CBC == mode) {aes = new AES(mode, padding, new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"), new IvParameterSpec(IV_KEY.getBytes()));} else {aes = new AES(mode, padding, new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"));}byte[] decryptDataBase64 = aes.decrypt(data);return new String(decryptDataBase64, StandardCharsets.UTF_8);}
}

http://www.ppmy.cn/embedded/107151.html

相关文章

部署mongosh教程

1、上传软件包 将软件包上传到/usr/local目录下 部署 2.1 解压 tar zxvf mongosh-2.3.0-linux-x64.tgz 2.2 修改名称 mv mongosh-2.3.0-linux-x64/ mongosh 2.3 将 bin 目录中 mongosh 二进制文件复制到 PATH 变量中列出的目录中 sudo cp mongosh /usr/local/bin/ sudo cp …

JS设计模式之“神奇的魔术师” - 简单工厂模式

引言 在JavaScript开发中&#xff0c;我们经常需要创建和管理各种对象&#xff0c;而简单工厂模式就是一种最简单的用来创建对象的设计模式。 简单工厂模式通过一个工厂类来创建相似的对象&#xff0c;而无需直接使用具体类来实例化对象。这样可以将对象的创建过程与使用过程…

ITK-重采样

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 什么是重采样 重采样&#xff08;Resampling&#xff09; 是一种用于图像处理的技术&#xff0c;主要应用于对图像进行尺寸调整、…

支付宝线上小程序打开异常

1. 其他手机都可以正常访问线上版本&#xff0c;只有一个安卓手机不行&#xff08;排除支付宝低版本以及手机系统问题&#xff09; 2. 出现访问异常的手机都可以正常访问体验版以及开发版本 3. 尝试去关闭该手机的联调设置以及清除开发版缓存&#xff0c;成功访问线上版本 需要…

【LeetCode】02.两数相加

题目要求 做题链接&#xff1a;2.两数之和 思路解析 本题要求我们计算两个链表中存储的元素之和&#xff0c;并且明确的告诉了我们不包含前置0。这样的话我们只需要考虑进位与到链表末尾这两种情况&#xff0c;进位是每次都需要更新的&#xff0c;而到末尾的话&#xff0c;…

SpringBoot+Vue实现大文件上传(断点续传-后端控制(一))

SpringBootVue实现大文件上传&#xff08;断点续传&#xff09; 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI&#xff0c;spark-md5 2 问题 在前一篇文章&#xff0c;我们写了通过在前端控制的断点续传&#xff0c;但是有两个问题&#xff0c;第一个问题&…

SQL - SQL优化

在sql查询中为了提高查询效率&#xff0c;我们常常会采取一些措施对查询语句进行sql优化&#xff0c;下面总结的一些方法&#xff0c;有需要的可以参考参考 一、查询SQL尽量不要使用select *&#xff0c;而是具体字段 // 建议 SELECT id,user_name,age,tel FROM user// 不建议…

C语言6大常用标准库 -- 1.<stdio.h>

目录 引言 1.<stdio.h>&#xff08;标准输入输出库&#xff09; 1.1 简介 1.2 库变量 1.3 库宏 1.4 库函数 &#x1f308;你好呀&#xff01;我是 程序猿 &#x1f30c; 2024感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&am…