请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
reeingal(uid:250331)
一个沙雕 职业资格认证:尚未取得认证
FVS夜光轮播仪表盘开启监控刷新,阻止组件在数据更新后重绘的方法
FVS夜光轮播仪表盘开启监控刷新,阻止组件在数据更新后重绘的方法 FVS插件版本:v11-1.3.1 FVS中目前有很多带轮播特性的组件,其在开启监控刷新功能(即定时向后台请求更新的数据)后,在达到刷新间隔指定的时间,向后台请求到最新的数据后,整个组件会消失,然后重新绘制组件,显示组件动画,从头开始轮播。 但我希望组件能够静默更新数据,而不是消失、重绘、播放动画、重头轮播。因为页面上组件的“闪烁”会引起关注,但这实际只是向后台请求了数据更新,并不是需要关注的事情。 而且开启监控刷新后,刷新间隔必须比轮播间隔*维度数目大才行,不然就会出现轮播很没有轮播完一圈,就组件重绘,重头开始轮播的情况。这就不适用于维度数目多,又要求显示尽可能最新数据的场景。 解决方法 进入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) 这里只是把中间要执行的(t.onDestroy(),t.onMount(t.el))注释掉了,这两句代码实际将仪表盘销毁,再重新生成容器元素(还没有到绘制的步骤)。这就是为什么勾选开启监控刷新后,轮播夜光仪表盘会在达到刷新间隔,向后台请求数据后,整个组件消失再重绘的原因。 注释之后会发现,虽然仪表盘没有在向后台请求数据后整个消失重绘了,但仪表盘的数据也不会有变化,这是因为向后台请求的新数据没有更新到仪表盘组件中。 继续修改文件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)) 其中n.chart=new window.Van.SliderDashboard(e)是创建新的仪表盘组件并重绘的代码。 将上面那段代码修改为:  ;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.timeInterval){if(n.chart.carouselData.length<2){n.chart._switchData();}else{n.chart._createInterval();}}}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(); // 让仪表盘根据传入的原始数据重新计算要显示的信息 上面两句代码就是将新数据传递给组件,并让组件重新计算轮播要显示的数值。 仪表盘内部切换要显示的维度信息是通过_switchData()函数进行的,_switchData()会轮循并绘制显示信息和动画。 但当传入的数据少于2个时,它内部逻辑里就不调用_swichData()了,导致使将新数据传入仪表盘,并让仪表盘重新计算了要显示的信息,仪表盘也还是显示旧的信息,因此需要判断一下数据长度,如果少于两个,就显式调用_switchData(),让新信息上显: if(!n.chart.timeInterval){    if(n.chart.carouselData.length < 2){// 当不存在定时器时才调用switchData        n.chart._switchData();    } else {// 若数据维度大于2但没有定时器,则调用_createInterval()创建定时器        n.chart._createInterval();    }} 否则仪表盘的显示的数值信息始终不会变。 用压缩软件打开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,即可看见轮播夜光仪表盘在开启监控刷新后,不会再在请求后台新数据后,重绘组件,而是在后台静默更新,组件依然按照原来的速度轮播各个维度的信息,如果数据更新了也会显示最新的数据。 当然这种修改是对全局生效的,因此如果想要回原来的效果,只能把代码改回原来的样子。 从修改过程也可以看出,实际上仪表盘组件本身是支持静默更新的,上面修改的代码都是调用组件本来就有的功能,所以我觉得这种数据更新就重绘组件的做法可能是帆软某个产品经理的想法?虽然说需要重绘组件的场景不能说完全没有,但个人觉得大部分业务场景下,静默更新是比较适用的,FVS里也有组件即使开启监控刷新也不会在请求新数据后重绘组件这么突兀。  
个人觉得FineBI应该可以轻易改进但一直没改的一些地方
个人觉得FineBI是一款不错的产品,在我本身有业务数据齐全,只需要做展示页面的时候,我会选择FineBI而不是FineReport,因为FineBI操作起来比较简单,所见即所得,制造相互关联的数据集也比较方便。但有一些一直没有改进的地方,会让我觉得FineBI始终是帆软一个不够受重视的产品(可能的确是这样)。 在网格布局下,网格的个数不能开放设置,这个在FineBI 4版本就已经存在,FineBI 5版本也同样。个人感觉和自由布局相比网格布局对多尺寸大屏的适配性更好,但问题是使用多了之后会发现网格太大了,有时候只是想微调对齐一下就做不到(比如左边一个大的柱形图,右边竖着两个小的仪表盘,要想把两个仪表盘的高调到和相同而且相加刚好能和柱形图一样就做不到),搜索文档也没搜索到调整网格大小的配置在哪里,我只好去跟踪事件和代码,然后定位到`fine-bi-adapter-5.1/com/finebi/web/js/design.min.js`,然后把两个控制横向和纵向网格数的,写死的变量`o=36,a=18`,按照自己需求修改再重新封jar包。 字体和字号都有有限的选择。字体可以说FineReport的设计器是C端产品能够直接读取系统的字库,FineBI是B端产品,权限没有那么大,但我觉得可以开放一个接口让用户上传字体,不然只有那几种字体真的不够用。字号只有固定的选择,想要取中间值在界面操作上就没有办法。这两个问题在4版本和5版本上我都只能通过手动该模板文件来临时解决。如果不解决,我觉得至少对我来说是很影响体验的问题。 组件有一些从4版本延续下来的bug。例如文本组件,在字体调大后,虽然在界面上能够看到完整的文字,但右侧就是会出来一个浏览器默认的滚动条,很难看,个人在样式上滚动条可以取消掉或者让用户设置。有时候我只输入了一行文字,但重新点击文本组件后,它会自动添加一个空白行,我确认我是完全没有按过键盘的,这种情况也不是第一次出现了,每次我都需要手动把空白行去掉。还有文本组件有时候就突然不能调整字体大小了,点击了其它字号后,字号选择那还是原来的字号。 这些问题都是我在使用4版本的时候就已经发现,在5版本也还是存在的问题,个人觉得很影响我的使用体验,所以花了点时间写下来。个人搜索了官方文档,也没有找到解决方法。如果能够改进的话,虽然在功能性上可能没有很大的飞跃,但在用户体验上应该会让人舒服很多。
个人成就
内容被浏览7,113
加入社区5年62天
返回顶部