📄 menu.js
字号:
/*
内容:构造导航菜单对象基本类
创建时间: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 + -