当前位置: 首页 > 后端技术 > PHP

大数据报表菜单栏问题

时间:2023-03-30 04:38:59 PHP

1.业务场景本项目是一个大数据报表系统,使用PHP的Yii框架结合smarty。业务报表主要有两种,一种是iframe内嵌的外链报表,一种是项目本身的报表。为了方便查看,项目增加了收藏和最近访问的报表菜单栏。收藏菜单栏:根据后端$collet返回的数据生成二级菜单,根据$menu_id、$url_tpl、$isWhiteTable控制是否添加open到类中,控制first-的展开和折叠层级菜单栏;通过$url_tpl中是否有"visual"来控制箭头的方向;添加选中的菜单高亮active收藏{/if$collect|@countneq0/}

    {/foreachfrom=$collectitem=collkey=key/}{/$coll.name/}</a>{//foreach/}
{//if/>最近访问的菜单栏:由于最近访问的菜单需要在点击时展开实时获取,所以通过整个页面从后台刷新界面的体验不好,所以不接受,所以设计需求是点击最近访问过的列表菜单,通过ajax调用接口异步获取最新数据,动态渲染菜单最近访问的报告动态生成菜单js代码varflag=true;$('#history').on('click',function(e){var$this=$(this);if(flag&&($(".h-right").css('显示y')=='块')){flag=false;//防止多次点击请求setTimeout(()=>{$.ajax({type:'get',url:'/visual/gethistory',success:function(d){vardata=d.data;varhtml="";for(vari=0;i"+data[i].name+"";}$('.d_history').empty();$('.d_history').append(html);$('.d_history').show();$('.h-right').hide();$('.h-down').show();toolTip();flag=true;},error:function(e){console.log("e",e)},dataType:'json'});},500);}if(flag&&($(".h-down").css('display')=='block')){$('.d_history').hide();$('.h-right').show();$('.h-down').hide();}})这时候功能基本实现了,但是有个问题,当收藏夹菜单下的报表和最近访问过的报表是同一个报表时,他们浏览器中对应的url是一样的,导致浏览器当点击最近访问过的报表下的同一个报表时刷新,通过$url_tpl中是否有“visual”再次控制箭头方向;$coll.ideq$id是否等于添加选中的菜单高亮active,那么收藏菜单下的同一个报表2会被锁定,提出一个方案所以点击需要区分收藏菜单和根据最近的访问历史报告。每次点击不同菜单下的报表,无论是收藏的还是最近访问的,都要记录下来。有两种解决方法。一种是为Collection或历史访问返回一个特殊字段。每次点击对应菜单下的报表,都需要用特殊字段来区分,但是需要后台同学的配合,后台修改的时间和成本比较大。标记,即区分是收藏下的报表还是最近访问历史记录下的报表,并记录点击了哪个报表。刷新页面时,需要根据上次点击的报表进行选择和高亮显示。三、前端解决方案实践1、点击最近访问列表,做个标记。需要在a标签的href中进行标记,并添加标记。在href中添加一个参数history(有history的是最近访问过的列表,以区别收藏列表),添加class记录reportid的类(选择高亮的li进行页面刷新)for(vari=0;i"+data[i].name+"";}在最近访问的报表中点击报表时执行如下js代码(相当于topagerefresh):Solvealltheproblemsoftherecentlyvisitedreport//刷新时判断是否为最近访问列表中的报表varurlS=window.位置搜索;varvalue=urlS.split('=')[1]if(urlS.indexOf('history')>=0){$.ajax({type:'get',url:'/visual/gethistory',成功:function(d){vardata=d.data;varhtml="";for(vari=0;i"+data[i].name+"";}$('.d_history').empty();$('.d_history').append(html);$('.d_history').show();$('.history_'+value).attr({'style':'color:#FFFFFF!important'});工具提示();},error:function(e){console.log("e",e)},dataType:'json'});}2.解决收藏夹列表展开收起和选中报表高亮问题,只需要在页面加载时获取,判断url中是否有history,如果没有提示是收藏菜单栏下的report,首先需要用php获取url,然后使用php语法做判断,主要是这段代码,$smarty.server.REQUEST_URI|strpos:'history',可以在控件展开折叠和报表高亮部分添加判断liclass='submenu{/if$menu_ideq0&&$url_tpleq''&&($smarty.server.REQUEST_URI|strpos:'history'lte1)&&$isWhiteTable!==1/}open{//if/}'>{/if$menu_ideq0/}{/if$smarty.server.REQUEST_URI|strpos:'history'lte1/}{/else/}{//if/}{/else/}{//if/}收藏{/if$collect|@countneq0||$isCollectCustom|@countneq0/}{/foreachfrom=$collectitem=collkey=key/}{/$coll.name/>{//foreach/}{//if/}