257 lines
9.3 KiB
JavaScript
257 lines
9.3 KiB
JavaScript
/*!
|
||
* 主 题:《菜单树生成》
|
||
* 说 明:用于管理页面左侧树形菜单。
|
||
* 功能描述:
|
||
* 1、首先生成最左侧的选项卡;
|
||
* 2、再生成相关的菜单树
|
||
*
|
||
*
|
||
* 作 者:宋雷鸣
|
||
* 开发时间: 2011年4月4日
|
||
*/
|
||
|
||
|
||
//页面左侧树形菜单的面板
|
||
function TreePanel() {
|
||
//this.load();
|
||
}
|
||
//三级菜单(树形菜单),是否全部展开
|
||
//yes:全部展开;no:全部关闭;def:默认,打开第一个
|
||
TreePanel.TreeIsShow = "yes";
|
||
//菜单条的打开方式,1:同时打开多个;2:同一时刻只打开一个
|
||
TreePanel.TreeBarOpen = "1";
|
||
//数据源
|
||
TreePanel.DataSource = null;
|
||
//载入数据
|
||
TreePanel.prototype.load = function () {
|
||
$.ajax({
|
||
type: "get",
|
||
url: "Panel/TreePanel.aspx?timestamp=" + new Date().getTime(),
|
||
dataType: "html",
|
||
data: {},
|
||
//开始,进行预载
|
||
beforeSend: function (XMLHttpRequest, textStatus) {
|
||
treePanleLoading();
|
||
},
|
||
//加载出错
|
||
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||
if (unloadfunc != null) {
|
||
alert(textStatus);
|
||
unloadfunc();
|
||
}
|
||
},
|
||
//加载成功!
|
||
success: function (data) {
|
||
//alert(data);
|
||
SetManageMenu(data);
|
||
unTreePanleLoading();
|
||
}
|
||
});
|
||
//生成左侧的根菜单树
|
||
function SetManageMenu(data) {
|
||
var tree = new TreePanel();
|
||
//左侧区域
|
||
var pl = $("#consTreePanel");
|
||
pl.html(data);
|
||
TreeInit("#consTreePanel");
|
||
TreeEvent("#consTreePanel");
|
||
tree.focus();
|
||
//设置节点前的图标与连线样式
|
||
pl.find(".nodeIco").each(function () {
|
||
var num = Number($(this).find("img").size());
|
||
$(this).width(num * 18);
|
||
$(this).css("float", "left");
|
||
});
|
||
$(".treepanel").height($("#consContextPanel").height());
|
||
$(".treepanel").css("background-image", "url(" + $("#consTreePanel").attr("bg") + ")");
|
||
//如果不是超管,则进行权限判断;
|
||
//emplyeeIsAdmin与emplyeeId参数,来自于console.aspx页面初始化
|
||
if (emplyeeIsAdmin != 0) {
|
||
//$().SoapAjax("Purview","GetAll4Array",{empId:emplyeeId},RemoveOnPur,treePanleLoading,unTreePanleLoading);
|
||
}
|
||
}
|
||
//管理界面左侧,功能菜单区的预载框
|
||
function treePanleLoading() {
|
||
var treepanel = $("#consTreePanel");
|
||
var offset = treepanel.offset();
|
||
var html = "<div id=\"treePanleLoadingMask\">";
|
||
html += "<div>正在加载……<br/>";
|
||
html += "<img src=\"Images/loading/load_016.gif\"></div>";
|
||
html += "</div>";
|
||
$("body").append(html);
|
||
var mask = $("#treePanleLoadingMask");
|
||
mask.css("position", "absolute");
|
||
mask.css("z-index", "2000");
|
||
var h = document.documentElement.clientHeight;
|
||
var offset = $("#consBody").offset();
|
||
var height = h - offset.top - $("#consFoot").height();
|
||
mask.css("width", treepanel.width());
|
||
mask.css("height", height);
|
||
mask.css("top", offset.top);
|
||
mask.css("left", offset.left);
|
||
mask.css("background-color", "#ffffff");
|
||
var alpha = 100;
|
||
mask.css("filter", "Alpha(Opacity=" + alpha + ")");
|
||
mask.css("display", "block");
|
||
mask.css("-moz-opacity", alpha / 100);
|
||
mask.css("opacity", alpha / 100);
|
||
mask.fadeIn("slow");
|
||
}
|
||
|
||
//去除,管理界面左侧,功能菜单区的预载界面
|
||
function unTreePanleLoading() {
|
||
$("#treePanleLoadingMask").fadeOut();
|
||
}
|
||
}
|
||
|
||
//设置当前面板为焦点
|
||
TreePanel.prototype.focus = function (id) {
|
||
//左侧区域
|
||
var pl = $("#consTreePanel");
|
||
//标题的焦点
|
||
pl.find(".titlePanel div").attr("class", "out");
|
||
pl.find("div[class='treepanel']").hide();
|
||
if (id != null) {
|
||
pl.find(".titlePanel div[id='consTreeTitle_" + id + "']").attr("class", "current");
|
||
pl.find("div[id='consTreePanel_" + id + "']").show();
|
||
} else {
|
||
pl.find(".titlePanel div:first").attr("class", "current");
|
||
pl.find("div[class='treepanel']:first").show();
|
||
}
|
||
//取出所有的tree面板
|
||
var panel = pl.find("div[class='treepanel']");
|
||
}
|
||
|
||
//树形的初始化,例如图标设置
|
||
function TreeInit(panel) {
|
||
//菜单条,有下级节点的
|
||
var bar = $(panel + " div[type='menuBar'][IsChilds='True']");
|
||
//设置所有为关闭状态
|
||
//bar.attr("class","menuBar menuBarClose");
|
||
//如果全部展开
|
||
if (TreePanel.TreeIsShow == "yes") {
|
||
bar.attr("openstate", "true");
|
||
bar.attr("class", "menuBar menuBarOpen");
|
||
bar.next().show();
|
||
}
|
||
//如果全部关闭
|
||
if (TreePanel.TreeIsShow == "no") {
|
||
bar.attr("openstate", "false");
|
||
bar.attr("class", "menuBar menuBarClose");
|
||
bar.next().hide();
|
||
}
|
||
//默认状态,打开第一个菜单,其余关闭
|
||
if (TreePanel.TreeIsShow == "def") {
|
||
bar.attr("openstate", "false");
|
||
bar.attr("class", "menuBar menuBarClose");
|
||
bar.next().hide();
|
||
var first = $("div[class='treepanel']").find("div[type='menuBar']:first");
|
||
first.attr("openstate", "true");
|
||
first.attr("class", "menuBar menuBarOpen");
|
||
first.next().show();
|
||
}
|
||
}
|
||
//树形菜单事件,如打开折叠等
|
||
function TreeEvent(panel) {
|
||
//左侧区域标题项的事件
|
||
$(panel + " .titlePanel div").click(function () {
|
||
var thisId = $(this).attr("id");
|
||
thisId = thisId.substring(thisId.indexOf("_") + 1);
|
||
var tree = new TreePanel();
|
||
tree.focus(thisId);
|
||
});
|
||
//菜单条的事件
|
||
$(panel + " div[IsChilds='True'][type='menuBar']").click(function () {
|
||
var n = $(this).next();
|
||
var state = $(this).attr("openstate");
|
||
if (TreePanel.TreeBarOpen == "1") {
|
||
if (state == "true") {
|
||
n.slideUp();
|
||
$(this).attr("openstate", "false");
|
||
$(this).attr("class", "menuBar menuBarClose");
|
||
} else {
|
||
n.slideDown();
|
||
$(this).attr("openstate", "true");
|
||
$(this).attr("class", "menuBar menuBarOpen");
|
||
}
|
||
}
|
||
//打开当前的,其它的则关闭
|
||
if (TreePanel.TreeBarOpen == "2") {
|
||
//兄弟节点
|
||
var sibl = $(this).siblings("div[IsChilds='True'][type='menuBar']");
|
||
//自身节点的处理
|
||
if (state == "true") {
|
||
n.slideUp();
|
||
$(this).attr("openstate", "false");
|
||
$(this).attr("class", "menuBar menuBarClose");
|
||
} else {
|
||
n.slideDown();
|
||
$(this).attr("openstate", "true");
|
||
$(this).attr("class", "menuBar menuBarOpen");
|
||
}
|
||
//兄弟节点的处理
|
||
sibl.attr("openstate", "false");
|
||
sibl.attr("class", "menuBar menuBarClose");
|
||
sibl.next().slideUp();
|
||
}
|
||
});
|
||
//当点击节点前的图标时,如加减号文件夹图标
|
||
$(panel + " div[IsChilds='True'][type='nodeIco']").click(function () { //alert(1);
|
||
//栏目图标,文件夹或文件图标
|
||
var last = $(this).find("img:last");
|
||
//节点图标,加号或┝号
|
||
var pre = last.prev();
|
||
tranImg(pre, "plus.gif", "minus.gif");
|
||
tranImg(pre, "minusbottom.gif", "plusbottom.gif");
|
||
tranImg(last, "folderopen.gif", "folder.gif");
|
||
$(this).parent().next().slideToggle();
|
||
var state = $(this).attr("state");
|
||
$(this).attr("state", state == "true" ? "false" : "true");
|
||
});
|
||
//当点击节点文本时
|
||
$(panel + " div[type='text'][IsChilds='True']").click(
|
||
function () { //alert($(this).parent().html());
|
||
//栏目图标,文件夹或文件图标
|
||
var last = $(this).parent().find("div:first").find("img:last");
|
||
//节点图标,加号或┝号
|
||
var pre = last.prev();
|
||
tranImg(pre, "plus.gif", "minus.gif");
|
||
tranImg(pre, "minusbottom.gif", "plusbottom.gif");
|
||
tranImg(last, "folderopen.gif", "folder.gif");
|
||
$(this).parent().next().slideToggle();
|
||
var state = $(this).attr("state");
|
||
$(this).attr("state", state == "true" ? "false" : "true");
|
||
}
|
||
);
|
||
//根节点事件
|
||
$(panel).find("a").click(function () {
|
||
var type = $(this).parent().attr("nodetype");
|
||
var link = $(this).attr("href");
|
||
var id = $(this).parent().attr("nodeId");
|
||
var name = $(this).text();
|
||
var path = $(this).parent().attr("path");
|
||
switch (type) {
|
||
case "link": //如果是外部链接,直接打开
|
||
return true;
|
||
case "open": //如果是弹出窗口
|
||
new PageBox(name, link, 50, 50).Open();
|
||
return false;
|
||
case "item":
|
||
default:
|
||
var p = new PagePanel();
|
||
p.add(name, path, link, id);
|
||
return false;
|
||
}
|
||
});
|
||
}
|
||
//处理点前图片的替换效果
|
||
//element:节点的元素
|
||
//img1:原图片
|
||
//img2:新图片
|
||
function tranImg(el, img1, img2) {
|
||
if (el.attr("src").indexOf(img1) > 0)
|
||
el.attr("src", el.attr("src").replace(img1, img2));
|
||
else
|
||
if (el.attr("src").indexOf(img2) > 0)
|
||
el.attr("src", el.attr("src").replace(img2, img1));
|
||
} |