FVS的轮播组件能否做到刷新数据时不要把整个组件都刷新一次呢

目前FVS有很多组件,在勾选了监控刷新后,会在达到刷新间隔的时间把整个组件都刷新一次,例如大部分带轮播功能的组件、弧形条形图、仪表盘等等。这就造成一个问题,如果我的数据变化速度比较快,需要例如10秒就像后台请求一次新数据,那么整个页面很多组件都会重新播一次组件动画,这样画面给人干扰太大,感觉也太丑太low了。而且如果我的轮播完所有分类指标的时间比刷新间隔大的话,后面的分类指标就永远不会被看到。能否有办法做到组件的数据更新,但组件不要整个重新刷新一次呢。

FineReport reeingal 发布于 2022-4-28 20:32
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
reeingalLv2见习互助
发布于2022-5-1 12:55

FVS插件版本:v11-1.3.1

以轮播夜光仪表盘修改为例。

进入FineReport 11安装目录,然后进入目录webapps/webroot/WEB-INF/plugins/plugin-com.fr.plugin.wysiwyg.v11-1.3.1。用压缩软件解压文件

plugin-com.fr.plugin.wysiwyg.v11-1.3.1.jar。进入解压目录,然后进入目录com/fr/plugin/wysiwyg/web/static/js,用文本编辑器打开文件preview.622ce744.chunk.js

搜索

t.chart&&(t.onDestroy(),t.onMount(t.el))

定位到以下代码:

t.chart&&(t.onDestroy(),t.onMount(t.el)),b(e,t.widget,n,t.container)

将其修改为:

t.chart/*&&(t.onDestroy(),t.onMount(t.el))*/,b(e,t.widget,n,t.container)

注释掉的代码是将仪表盘销毁再重新绘制,这也就是为什么勾选开启监控刷新后,轮播夜光仪表盘会在达到刷新间隔,向后台请求数据后,整个组件重刷了一次的原因。

但注释之后会发现,虽然仪表盘没有在向后台请求数据后整个重刷了,但仪表盘的数据也不会有变化,这是因为向后台请求到的新数据没有更新到仪表盘组件中。

继续修改文件preview.622ce744.chunk.js,搜索

new window.Van.SliderDashboard(e)

可以定位到以下代码:

,t.dataSet.length<2?Object(Kt.i)(e,n):(e.timeInterval=n.widget.carousel.autoplaySpeed/1e3,e.container=n.container,n.chart=new window.Van.SliderDashboard(e),Object(Kt.a)(n))

将其修改为

;if(t.dataSet.length<2){Object(Kt.i)(e,n)}else{if(n.chart){n.chart.config.dataSet = t.dataSet;n.chart._calculateCarouselData();if(n.chart.carouselData.length<2){n.chart._switchData();}}else{(e.timeInterval=n.widget.carousel.autoplaySpeed/1e3,e.container=n.container,n.chart=new window.Van.SliderDashboard(e),Object(Kt.a)(n))}}

注意此处将开头的英文逗号修改为了英文分号。修改部分的逻辑是首先判断n.chart,如果n.chart为真,则表示组件已经生成过,n.chart就是轮播夜光仪表盘绘制出来的组件。此时要做的是将组件配置中的数据更换为请求得到的新数据。

n.chart.config.dataSet = t.dataSet;n.chart._calculateCarouselData();

就是将新数据传递给组件,并让组件重新计算轮播要显示的数值。

此外如果显示的分类只有一个,还需要显式调用一次

n.chart._switchData();

否则仪表盘的显示的数值还是不会变。

用压缩软件打开plugin-com.fr.plugin.wysiwyg.v11-1.3.1.jar,将修改后的文件preview.622ce744.chunk.js直接拖入压缩包内相同的目录中,覆盖源文件(可以先备份一下plugin-com.fr.plugin.wysiwyg.v11-1.3.1.jar,以备出问题后可还原)。重新打开FineReport,即可看见轮播夜光仪表盘在开启监控刷新后,不会在请求后台新数据后重新再生成一次仪表盘,而是在后台静默更新。这样修改是对全局生效的,因此如果想要回原来的效果,只能把代码改回原来的样子。

最佳回答
0
zsh331Lv8专家互助
发布于2022-4-28 21:08

FVS轮播器组件-https://help.fanruan.com/finereport/doc-view-4268.html

-- 轮播器组件「轮播时间」和「组件监控刷新」,这2个事件目前不支持独立吗?未测试。

-- 如果不支持,觉得可以去提个需求,这确实是个问题。但一般情况监控刷新间隔时间应该比轮播时间略长,这个数据刷新太频繁了,有没有考虑优化下,频繁刷新的话,服务器性能也是需要考虑的因素。

——————————————————————————————

需求传送门-https://bbs.fanruan.com/topic/c/113-4-1.html

最佳回答
0
用户E5817013Lv4见习互助
发布于2023-6-21 10:01

监控刷新可以刷新到数据。fvs轮播器有个问题就是开启轮播后,没办法停止

  • 2关注人数
  • 815浏览人数
  • 最后回答于:2023-6-21 10:01
    请选择关闭问题的原因
    确定 取消
    返回顶部