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,即可看见轮播夜光仪表盘在开启监控刷新后,不会在请求后台新数据后重新再生成一次仪表盘,而是在后台静默更新。这样修改是对全局生效的,因此如果想要回原来的效果,只能把代码改回原来的样子。