⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.js

📁 上传的控件
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*
内容:构造导航菜单对象基本类
创建时间:2006-11-28
创建人:吴少刚
项目组:商格里拉项目组
外部引用类库:1.JS/comjs/prototype1.4.js 作者:Sam Stephenson
              2.global.js 作者:吴少刚
              3.Drag.js 作者:吴少刚
*/

//--------------------------------------------------SubMenu------------------------------------------------------//
/*
    名称:一个完整的菜单对象
    功能及构成描述:这个对象构造一个完整的菜单体.它有参数赋予的各种行为和外观.当是菜单类型时都默认有子菜单,作显示准备,
                   当点击菜单时读取菜单文件,其格式和第一个文件一样. 
    初始化参数:MenuBaseInfo=一个菜单所必要的信息类
*/
SubMenu = Class.create();
SubMenu.prototype = {
    initialize: function(MenuBaseInfo)
    {
        //折叠按钮
       this.ecbutton = new  ECButton(G.SysPicture.MenuCollapse,G.SysPicture.MenuExpand);
       //新构造一个框架类
       var menuSubpart = new MenuSubPartFrame();
       //在事件中访问
       this.MenuSubPart = menuSubpart;
       //是否已增加栏目,如果已增加则样式显示和别的不一样,且只有用户提示,您已增加了该栏目.也要保存到数据库中
       this.IsHaveAdded = MenuBaseInfo.IsHaveAdded;
          
       this.Frame = menuSubpart.TableMenu;//对应页面的MenuPartFrame
       this.menuup = menuSubpart.RowsMenuup;//菜单上半部分 
       this.menubaseinfo = MenuBaseInfo;
       //隔时请求管理对象
        this.RI = new RequestInterval(5);
       
       //一级菜单和二级菜单的样式是不一样的。所以这里要分别定义
       menuSubpart.AddTitle(MenuBaseInfo.Title,MenuBaseInfo.Level,this.IsHaveAdded,MenuBaseInfo.Type);     
       
       //******************完成外观************************//
       
      
       if(MenuBaseInfo.Type=="Module")
       {            
            if(MenuBaseInfo.IsHaveIcon&&MenuBaseInfo.IconFileName != "")
                   menuSubpart.AddMenuIcon(MenuBaseInfo.IconFileName); 
            else
            {
                if(MenuBaseInfo.IsHaveIcon)
                {
                    //加载默认的图片
                    menuSubpart.AddMenuIcon("LayerIcon.gif");
                }
                else
                {
                   menuSubpart.divMenuIcon.style.visibility = "hidden";
                }
            }
                   
          
       }
       //折叠并有子菜单时,除前两级可以展开外,其它需要用户点击展开, ***处理自动展开***
       if(MenuBaseInfo.Level<=1&&MenuBaseInfo.IsExpand&&MenuBaseInfo.Type=="Menu")
       {
            //要求展开并有子菜单时
            menuSubpart.showSubmenu(true);
            
            //假如下一级菜单还未读取,则发请求到服务器,然后更新当前菜单的子菜单区,注意在读取菜单的XML时,只加载两级菜单信息
            if(MenuBaseInfo.SubMenuInfo.length != 0)
            {
                //依次加载各子菜单
                this.AddSubMenu(MenuBaseInfo.SubMenuInfo);
                
            }
            else
            {
//                //读取菜单基本信息并生成子菜单,又是异步机制                
                  this.RI.SetInterval(this.LoadSubMenu.bind(this),0.1);

            }
       }
       
       //******************增加事件************************//
       //从第二级开始都要以点击的方式打开子菜单,并且要服务器上获取数据,并初始化下级菜单       
       
        //点击事件
       //G.EventUtil.$ADE(this.menuup,"click",this.Event.MenuClickEventHandler.bind(this));
       menuSubpart.AddMenuupCE(this.Event.MenuClickEventHandler.bind(this));  
       G.EventUtil.$ADE(this.menuup,"mouseover",this.Event.MenuMouseoverEventHandler.bind(this));
       G.EventUtil.$ADE(this.menuup,"mouseout",this.Event.MenuMouseoutEventHandler.bind(this));
       
       if(MenuBaseInfo.Type=="Menu")
       {
            //确定菜单类型前方图标的样式
            this.ChangeEOCSytle();
       }
       
       
       //保存各子菜单,方便查找和遍历
       this.ChildMenu = new Array();
       
    },
    //隔时不断请求子菜单,如果请求到的话则更新子菜单区域,
    //当过了设定条件后即报告加载错误
    LoadSubMenu:function(){
        this.RI.Stop1();
        //读取菜单基本信息并生成子菜单,又是异步机制.
        G_BLLFeed.LoadMenuData(this.menubaseinfo.Code,this.Event.CreateSubBaseInfoLoadSubMenu.bind(this));
    },
    //增加自已的子菜单,增加完成后按菜单的序号排序,小号在前,大号在后
    //传入参数:子菜单信息集合
    AddSubMenu: function(SubMenuInfo){ 
        this.sortByPos()//菜单按序号排序 ,然后依次增加出来      
        for(var i=0;i<SubMenuInfo.length;i++)
        {
            var submenu = new SubMenu(SubMenuInfo[i]);                
            this.MenuSubPart.appendSubMenuFrame(submenu.Frame);// divSubMenuAreaFrame.appendChild();
            this.ChildMenu.push(submenu);
        }
        
        
    },
    
    //按菜单序号排序
    sortByPos:function(){
         var aryObj=this.menubaseinfo.SubMenuInfo;
         aryObj = aryObj.sortBy(function(value,index){return aryObj[index].Pos;});
         this.menubaseinfo.SubMenuInfo = aryObj;    
    },
    //改变菜单展开或关闭时的样式
    ChangeEOCSytle:function(){
        if(!this.menubaseinfo.IsExpand)
        {
            this.MenuSubPart.AddECIcon(this.ecbutton.divE);
        }
        else
        {
            this.MenuSubPart.AddECIcon(this.ecbutton.divC);
            
        }       
    },
    //菜单展开和收缩方法
    //传入参数:EOC=布尔值 为true则展开,否则收缩起来 这个方法只对一级菜单起作用
    MenuEOrC: function(EOC){
        
        if(EOC)
        {
            this.MenuSubPart.showSubmenu(true);
            this.menubaseinfo.IsExpand = true;
        }
        else
        {
             this.MenuSubPart.showSubmenu(false);
            this.menubaseinfo.IsExpand = false;
        }
    },
     //根据菜单代号查找各菜单的子菜单,递归查找
    FindMenuByFeedCode: function(FeedCode){        
  
          var findedSubmenu = null;  
          for(var i=0;i<this.ChildMenu.length;i++)
          {
              var submenu = this.ChildMenu[i];
              if(typeof submenu.menubaseinfo.MenuFeedBaseInfo!="undefined"&&submenu.menubaseinfo.MenuFeedBaseInfo!=null&&submenu.menubaseinfo.MenuFeedBaseInfo.Code == FeedCode)
              {
                    //break;
                    return submenu;
              }
              else
              {
                    findedSubmenu = submenu.FindMenuByFeedCode(FeedCode);
                    if(typeof findedSubmenu != "undefined"&& findedSubmenu != null)
                    {
                        //break;
                        return findedSubmenu;
                    }
              }   
          } 
          
          return findedSubmenu; 
    },
    //根据菜单代号查找各菜单的子菜单,递归查找
    FindMenuByMenuCode: function(MenuCode){        
//        if(this.ChildMenu != null&&this.ChildMenu.length != 0)
//            return this.ChildMenu.find(function(SubMenu){ if(SubMenu.menubaseinfo.Code == MenuCode){ return SubMenu} else { return(SubMenu.FindMenuByMenuCode(MenuCode))} });
////        else
////            return null;  
          var findedSubmenu = null;  
          for(var i=0;i<this.ChildMenu.length;i++)
          {
              var submenu = this.ChildMenu[i];
              if(submenu.menubaseinfo.Code == MenuCode)
              {
                    //break;
                    return submenu;
              }
              else
              {
                    findedSubmenu = submenu.FindMenuByMenuCode(MenuCode);
                    if(typeof findedSubmenu != "undefined"&& findedSubmenu != null)
                    {
                        //break;
                        return findedSubmenu;
                    }
              }   
          } 
          
          return findedSubmenu; 
    },
    dispose:function(){
        
        this.ecbutton = null;
        this.MenuSubPart = null;
        this.ChildMenu = null;
        this.RI = null;
        this.Frame.removeNode(true);
        this.Frame = null;
    },
    Event:{
        //菜单的点击事件,需要展开子菜单或者是展开一个附件Feed
        MenuClickEventHandler: function()
        {
            var oEvent = G.EventUtil.getEvent();
            //oEvent.stopPropagation();
            //点击按钮时隐藏和清空提示框内容
             G.HiddenODisplayFrame(G.PageObj.Div_Info,oEvent.type,false);
            
            //若是展开并且是有子菜单状态则收缩起来
            if(this.menubaseinfo.Type=="Menu")
            {
                if(this.menubaseinfo.IsExpand)
                {                   
                    this.MenuEOrC(false);
                }
                else
                {
                    this.MenuEOrC(true);
                    //如果子菜单已加载,则直接显示,否则要从服务器读取
                    if(this.menubaseinfo.SubMenuInfo.length == 0)
                    { 
                         this.RI.SetInterval(this.LoadSubMenu.bind(this),0.1);                                      
                       
                    }
                    
                }
                //改变前面小图标的样式
                this.ChangeEOCSytle();
            }
            //若直接是模块,则要弹出菜单的附件Feed
            if(this.menubaseinfo.Type == "Module")
            {    
                 if(!G_LoginM.privilegeCheck(this.menubaseinfo.IsUseFNL,false))
                       return false;
                if(this.IsHaveAdded)
                {
                    alert("您已增加过该栏目!");
                }
                else
                {                   
                   
                    //验证是否有附件的必要信息,如果有则加载
                    if(typeof(this.menubaseinfo.MenuFeedBaseInfo) != "undefined"&&this.menubaseinfo.MenuFeedBaseInfo!=null)
                    {    
                         G.HiddenODisplayFrame(G.PageObj.Div_MenuFeed,oEvent.type,true); 
                         //创建一个用来显示的Feed,所以第二个参数为false,当要增加到页面时则要为true,以生成完整的Feed               
                         var menufeed = G_BLLFeed.CreateMenuFeed(this.menubaseinfo.MenuFeedBaseInfo,false);
                         //加到显示框架中
                         G_DMFeed.AddFeed(menufeed,this);
                         //加入时使宽度为0 有可能不行,因为其内部是有宽度的
                         G_DMFeed.PageContainerObj.style.width = "230px";
                         //定位到当前菜单对象的正前方                         
                          G.PosToFather(G_DMFeed.PageContainerObj,this.menuup,$(G.PageObj.Div_Nav)); 
                            //记着原始坐标位置,在滚动时要用这两个值
                            G_DMFeed.PageContainerObj.X = parseInt(G_DMFeed.PageContainerObj.style.left);
                            G_DMFeed.PageContainerObj.Y = parseInt(G_DMFeed.PageContainerObj.style.top);
                            //记着原始滚动坐标  
                            G_DMFeed.PageContainerObj.oScrollY = G.getScrollXY().top;
                            G_DMFeed.PageContainerObj.oScrollX = G.getScrollXY().left;            
                           
                          //开始滑动 MoveObj,ObjWidth,SAcceleValue,MWidthScale,EAcceleValue
                         G.SlideObj(G_DMFeed.PageContainerObj,418,35);
                         //为G_DMFeed的增加到页面事件作处理                   
                         G.EventUtil.$ADE(G_DMFeed.AddToPageFrame,"click",this.Event.MenuFeedAddEventHandler.bind(this));
                    } 
                }        
            }
           
        },
        
        //增加到页面按钮的点击事件
        //这个操作要完成如下动作:
        //1.生成一个Feed,2.为Feed赋予菜单代号 3.增加到列显示出来. 
        //4.更改菜单的样式并更新属性 5.发指令写用户Feed信息到用户的XML桌面Feed配置中
        //6.发指令写菜单的信息
        MenuFeedAddEventHandler: function()
        {
            //调用列对象,增加到指定列
            var menufeed = G_BLLFeed.CreateMenuFeed(this.menubaseinfo.MenuFeedBaseInfo,true);
            menufeed.objFBaseInfo.MenuCode = this.menubaseinfo.Code; 
            if(!this.IsHaveAdded)//假如已增加则不能增加           
            {   
                G_LoginM.FeedColumns.AddFeed(menufeed,true);
                this.IsHaveAdded = true;
            }
            this.MenuSubPart.setTitleForbid(true);
            
            //异步保存Feed请求,只传代号,后台在数据库中(在指定的xml文件中也可以)查询,然后保存到用户的配置文件中
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -