当前位置: 首页 > news >正文

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

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

先看一下使用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">
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);
}

工具类

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
}

后端代码示例

控制器

	@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));}

工具类

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);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用GPU加速及配置
  • java反射:动态修改注解上属性的值
  • java 实现的单例,在static块中实例化是否会有线程安全问题?
  • golang闭包中变量获取
  • pyro.optim pyro ppl 概率编程 优化器 pytorch
  • 食品安全管理员考试真题题库及答案
  • Python爬虫—教你用Python爬取小说,小白也能操作(附源码)
  • 【C++ Primer Plus习题】10.4
  • 量子运算-计算新时代的开端
  • Java健康养老智慧相伴养老护理小程序系统源码代办陪诊陪护更安心
  • Nginx: 性能优化之提升CPU效率以及TCP的三次握手和四次挥手
  • Linux 初次创建分区及磁盘挂载
  • SPEC CPU2017的runcpu命令使用
  • 【Java】将 Java 代码打包成 Jar 包
  • Etl加工建模方式分类使用
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CSS 专业技巧
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java多线程(4):使用线程池执行定时任务
  • js继承的实现方法
  • mac修复ab及siege安装
  • MySQL数据库运维之数据恢复
  • PV统计优化设计
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • VUE es6技巧写法(持续更新中~~~)
  • 技术:超级实用的电脑小技巧
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据科学 第 3 章 11 字符串处理
  • 微信小程序填坑清单
  • 我建了一个叫Hello World的项目
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 移动端高清、多屏适配方案
  • ​MySQL主从复制一致性检测
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • (0)Nginx 功能特性
  • (1) caustics\
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (52)只出现一次的数字III
  • (阿里云万网)-域名注册购买实名流程
  • (独孤九剑)--文件系统
  • (二)linux使用docker容器运行mysql
  • (二开)Flink 修改源码拓展 SQL 语法
  • (含笔试题)深度解析数据在内存中的存储
  • (南京观海微电子)——COF介绍
  • (译)计算距离、方位和更多经纬度之间的点
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转载)hibernate缓存
  • (轉貼) UML中文FAQ (OO) (UML)
  • (自用)交互协议设计——protobuf序列化
  • ***利用Ms05002溢出找“肉鸡