• Extjs实现菜单下拉和鼠标右键菜单(加入系统菜单权限判断,有权限则显示,无反之)


    其实实现并不难。废话不说,先看效果图:

    (点击“更多功能”按钮,出现下拉菜单,这样就能把一些菜单按钮放到这里,使可视页面不会很拥挤)

    (在当前页面的任何位置鼠标右键,弹出菜单选项)

    现在看看这样通过Extjs实现:

     1 <script language="javascript"> 
     2    var menu = new Ext.menu.Menu();
     3      menu.add({id: 'menu1',text:'上笔',handler:prevBill,iconCls:'icon-prev'});
     4      menu.add({id: 'menu2',text:'下笔',handler:nextBill,iconCls:'icon-next'});
     5      menu.add({id: 'menu3',text:'增加(F2)',handler:addBill,iconCls:'icon-add'});
     6      menu.add({id: 'menu4',text:'查找(F3)',handler:productFind,iconCls:'icon-search'});
     7      menu.add({id: 'menu5',text:'导入',handler:pdInput,iconCls:'icon-add-row'});
     8      menu.add({id: 'menu6',text:'导出',handler:xslquery,iconCls:'icon-add-row'});
     9      menu.add({id: 'menu7',text:'条码(F7)',handler:txmInput,iconCls:'icon-add-row'});
    10      menu.add({id: 'menu8',text:'整单折扣修改',handler:bathnewDiscount,iconCls:'icon-add-row'});
    11     
    12    function showMenus(el){
    13         menu.show(el);
    14    }
    15    
    16    //鼠标右键菜单
    17    Ext.onReady(function(){
    18           //禁止整个页面的右键
    19           Ext.getDoc().on("contextmenu", function(e){
    20                e.stopEvent();
    21           });
    22           //注册右键
    23           Ext.getBody().on("contextmenu",function(e){
    24               menu.showAt(e.getPoint()); //显示在当前位置 
    25           });
    26       });
    27    
    28 </script> 

    是不是很简单,接下来要说下怎样加入系统的权限判断,思路是这样的,当它没有浏览该菜单项的权限时,我们就不把它加入到menu中,也就是说“menu.add({id: 'XX',text:'XX',handler:XX,iconCls:'XX'});”语句不产生。系统里,用的是自定义jsp标签,然后再java服务端一个一个按钮判断权限,有浏览权限时就加上该js语句,实现过程有:

    1.先自定义一个按钮,比如我用一个标志区别于其他的按钮,加入到要产生加入menu时位置。如jsp加入:

    <script language="javascript">
       var menu = new Ext.menu.Menu();
        <sws:Button icon='icon-prev'  name="menu1" moremenu="true"  hotkey="37"   onclick="prevBill" value="上笔"/>
        <sws:Button icon='icon-next' name="menu2" moremenu="true"  hotkey="39" onclick="nextBill" value="下笔"/>
        <sws:Button icon='icon-search' name="menu3" hotkey="F3,114" moremenu="true"  onclick="productFind" value="查找"/>
        <sws:Button icon='icon-add-row' invoke="isDbinEdit" name="menu4" moremenu="true"  onclick="pdInput" value="导入"/>
        <sws:Button icon='icon-add-row'  invoke="isDbinEdit" name="menu5" moremenu="true" onclick="xslquery"   value="导出"/>
        <sws:Button icon='icon-add-row' invoke="isDbinEdit" name="menu6" hotkey="F7,118" moremenu="true"  onclick="txmInput" value="条码"/>
        <sws:Button icon='icon-add-row' invoke="isDbinEdit" name="menu7"  moremenu="true"  onclick="bathnewDiscount" value="整单折扣修改"/>
       function showMenus(el){
            menu.show(el);
       }
       
       //鼠标右键菜单
       Ext.onReady(function(){
              //禁止整个页面的右键
              Ext.getDoc().on("contextmenu", function(e){
                    e.stopEvent();
              });
              //注册右键
              Ext.getBody().on("contextmenu",function(e){
                  menu.showAt(e.getPoint()); //显示在当前位置 
              });
          });
       
    </script>

    有看到不同了吗,是的,其中只是把本来添加菜单项的js语句用jsp的自定义标签写上,然后再解析标签,这样就能控制权限了。
    2.根据jsp自定义标签的解析步骤,在tld中写的处理类中的doEndTag()方法中做处理:

    比如:

    if (MORE_MENU_FALSE.equalsIgnoreCase(this.getMoremenu())) {//区别于其他按钮的标志
                    ......            } else {
                    results.append(" menu.add({");
                    results.append("id: '");
                    results.append(this.getName());
                    results.append("',");
                    results.append("text:'");
                    results.append(this.getValue());
                    results.append("'");
                    if(StringUtil.isNotBlank(this.getOnclick())){
                    results.append(",");
                    results.append("handler:");
                    results.append(this.getOnclick());
                    }
                    if (StringUtil.isNotBlank(this.getIcon())) {
                        results.append(",");
                        results.append("iconCls:'");
                        results.append(this.getIcon());
                        results.append("'");
                    }
                    results.append("});");
    
                }
    
                TagUtils.getInstance().write(pageContext, results.toString());

    这样就可以按情况加入菜单项了,好了,就写到这,希望对你有所帮助。

  • 相关阅读:
    我喜欢的电影
    QObject
    python-类
    pycharm活动模板
    pyqt5模块介绍
    第九章第四节 流体压强与流速的关系
    开源的推荐系统
    VNote: 一个舒适的Markdown笔记软件
    jira项目管理平台搭建
    Win10环境下,告别MarkdownPad,用Notepad++搭建编写md文档的环境
  • 原文地址:https://www.cnblogs.com/zhongjinbin/p/2467007.html
Copyright © 2020-2023  润新知