304 lines
11 KiB
JavaScript
304 lines
11 KiB
JavaScript
|
|
//默认信息
|
|||
|
|
var defvalue = {
|
|||
|
|
//根节点id
|
|||
|
|
rootid: function () {
|
|||
|
|
var def = 103;
|
|||
|
|
var root = $().getPara("id");
|
|||
|
|
root = isNaN(root) ? -1 : Number(root);
|
|||
|
|
root = parseInt(root) <= 0 ? def : parseInt(root);
|
|||
|
|
return root;
|
|||
|
|
},
|
|||
|
|
//菜单类型,func为功能菜单,sys为系统菜单
|
|||
|
|
type: "sys",
|
|||
|
|
//图标默认位置
|
|||
|
|
ico: { x: 90, y: 101 }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//分类的根节点
|
|||
|
|
var rootid = defvalue.rootid();
|
|||
|
|
//
|
|||
|
|
$(function () {
|
|||
|
|
setTimeout("initloyout()", 100);
|
|||
|
|
setEditPanel("root");
|
|||
|
|
icoEvent();
|
|||
|
|
$().SoapAjax("ManageMenu", "Order", { result: "", rootid: rootid, type: defvalue.type }, funcc, loading, unloading);
|
|||
|
|
});
|
|||
|
|
//页面初始化布局
|
|||
|
|
function initloyout() {
|
|||
|
|
$("input[type='text']").addClass("TextBox");
|
|||
|
|
//左侧菜单树区域 //右侧编辑区域
|
|||
|
|
var h = document.documentElement.clientHeight - 20;
|
|||
|
|
$("#MenuTreePanel").height(h - 120);
|
|||
|
|
$("#Panel").height(h - 153);
|
|||
|
|
//右侧编辑区事件
|
|||
|
|
$("#EditPanelTitle div").click(function () {
|
|||
|
|
var type = $(this).attr("type");
|
|||
|
|
setEditPanel(type);
|
|||
|
|
});
|
|||
|
|
//保存按钮
|
|||
|
|
$("input[name$='btnEnter']").click(function () {
|
|||
|
|
if (!Verify.IsPass($("form:visible"))) {
|
|||
|
|
return false;
|
|||
|
|
};
|
|||
|
|
update.submit(); //提交编辑数据
|
|||
|
|
return false;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//图示事件
|
|||
|
|
function icoEvent() {
|
|||
|
|
$(".ico").click(function () {
|
|||
|
|
var panel = $("#icoPanel");
|
|||
|
|
var off = $(this).offset();
|
|||
|
|
panel.css({ left: off.left - panel.width() / 2, top: off.top + $(this).height() });
|
|||
|
|
panel.show();
|
|||
|
|
panel.mousemove(function (elem, e) {
|
|||
|
|
var ico = $(".ico:visible");
|
|||
|
|
var xy = $().Mouse(e);
|
|||
|
|
var off = $("#icoPanel").offset();
|
|||
|
|
var x = xy.x - off.left - 8;
|
|||
|
|
var y = xy.y - off.top - 9;
|
|||
|
|
ico.attr("left", x).attr("top", y);
|
|||
|
|
ico.css("background-position", (-x + "px ") + (-y + "px"));
|
|||
|
|
});
|
|||
|
|
panel.click(function () {
|
|||
|
|
$(this).unbind("click");
|
|||
|
|
$(this).unbind("mousemove");
|
|||
|
|
$(this).hide();
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//数据载入完成后的事件
|
|||
|
|
//data:完整数据源,webservice输出
|
|||
|
|
function funcc(data, msg) {
|
|||
|
|
if (msg != null) update.alert(msg);
|
|||
|
|
//重建菜单
|
|||
|
|
window.treeDataSource = data;
|
|||
|
|
var tree = new Tree("#MenuTreePanel");
|
|||
|
|
Tree.RootClick = editroot;
|
|||
|
|
Tree.NodeClick = editNode;
|
|||
|
|
//
|
|||
|
|
Tree.RootId = rootid;
|
|||
|
|
Tree.onChangeOrder = changeOrder;
|
|||
|
|
Tree.onDelNode = delNode;
|
|||
|
|
//生成菜单
|
|||
|
|
tree.BuildMenu(data);
|
|||
|
|
//$("#MenuTreePanel").html(rootHtml);
|
|||
|
|
editroot();
|
|||
|
|
}
|
|||
|
|
//编辑根节点
|
|||
|
|
function editroot() {
|
|||
|
|
var root = $("#RootEditPanel");
|
|||
|
|
var edit = $("#EditPanel");
|
|||
|
|
setEditPanel("edit");
|
|||
|
|
root.show();
|
|||
|
|
edit.hide();
|
|||
|
|
$.get("/manage/soap/ManageMenu.asmx/ManageMenuJson", { id: rootid }, function (data) {
|
|||
|
|
var node = eval("(" + unescape($(data).text()) + ")");
|
|||
|
|
update.setCtl($("#RootEditPanel"), node);
|
|||
|
|
update.setCtl($("#patdata"), node); //在新增界面的上级
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
//进入编辑子节点
|
|||
|
|
function editNode(node) {
|
|||
|
|
var root = $("#RootEditPanel");
|
|||
|
|
var edit = $("#EditPanel");
|
|||
|
|
setEditPanel("edit");
|
|||
|
|
root.hide();
|
|||
|
|
edit.show();
|
|||
|
|
var data = window.treeDataSource;
|
|||
|
|
var panel = $("#MenuEditPanel");
|
|||
|
|
var id = node.attr("nodeId");
|
|||
|
|
//获取单个信息
|
|||
|
|
$.get("/manage/soap/ManageMenu.asmx/ManageMenuJson", { id: id }, function (data) {
|
|||
|
|
var node = eval("(" + unescape($(data).text()) + ")");
|
|||
|
|
update.setCtl($("#EditPanel"), node); //填充数据
|
|||
|
|
update.setCtl($("#patdata"), node); //在新增界面的上级
|
|||
|
|
//菜单项的“移动到”
|
|||
|
|
panel.find("select[name$='moveto']").attr("value", rootid);
|
|||
|
|
panel.find("select[name$='copyto']").attr("value", rootid);
|
|||
|
|
//当前节点父节点信息
|
|||
|
|
$.get("/manage/soap/ManageMenu.asmx/ManageMenuJson", { id: node.MM_PatId }, function (data) {
|
|||
|
|
var node = eval("(" + unescape($(data).text()) + ")");
|
|||
|
|
var panel = $("#EditPanel");
|
|||
|
|
panel.find("#editNodeParent").text(node.MM_Name);
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//开始载入时的预载
|
|||
|
|
function loading() {
|
|||
|
|
$("#loadingBar").show();
|
|||
|
|
var mask = $("#screenMask");
|
|||
|
|
if (mask.size() > 0) mask.remove();
|
|||
|
|
$("body").append("<div id=\"screenMask\"/>");
|
|||
|
|
mask = $("#screenMask");
|
|||
|
|
var h = document.documentElement.clientHeight;
|
|||
|
|
mask.css({
|
|||
|
|
"width": "100%", "height": h - 30, "top": 30, "left": 5, "display": "block",
|
|||
|
|
"background-color": "#ffffff", "position": "absolute", "z-index": "50000",
|
|||
|
|
"filter": "Alpha(Opacity=60)", "-moz-opacity": 0.6, "opacity": 0.6
|
|||
|
|
}).fadeIn("slow");
|
|||
|
|
}
|
|||
|
|
//载入完成后,清除预载效果
|
|||
|
|
function unloading() {
|
|||
|
|
$("#screenMask").remove();
|
|||
|
|
$("#loadingBar").hide();
|
|||
|
|
}
|
|||
|
|
//控制编辑面板的事件
|
|||
|
|
//pevent:"edit"为编辑节点,"add"为新增
|
|||
|
|
function setEditPanel(pevent) {
|
|||
|
|
//编辑区面板
|
|||
|
|
var panel = $("#MenuEditPanel #Panel");
|
|||
|
|
panel.children().hide();
|
|||
|
|
var edit = $("#RootEditPanel").parent();
|
|||
|
|
var add = $("#AddPanel");
|
|||
|
|
$("#EditPanelTitle").children().removeClass("click");
|
|||
|
|
switch (pevent) {
|
|||
|
|
case "edit":
|
|||
|
|
add.hide();
|
|||
|
|
edit.show();
|
|||
|
|
$("#EditPanelTitle div[type='edit']").addClass("click");
|
|||
|
|
break;
|
|||
|
|
case "add":
|
|||
|
|
edit.hide();
|
|||
|
|
add.show();
|
|||
|
|
$("#EditPanelTitle div[type='add']").addClass("click");
|
|||
|
|
var ico = $(".ico:visible");
|
|||
|
|
ico.attr("left", defvalue.ico.x).attr("top", defvalue.ico.y);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//获取填写的数据
|
|||
|
|
var update = {
|
|||
|
|
//根节点
|
|||
|
|
rootxml: function () {
|
|||
|
|
var panel = $("#RootEditPanel");
|
|||
|
|
var tmp = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
|
|||
|
|
tmp += "<node type=\"root\" id=\"" + rootid + "\" rootid=\"" + rootid + "\">";
|
|||
|
|
tmp += update.getCtl(panel);
|
|||
|
|
tmp += "</node>";
|
|||
|
|
return tmp;
|
|||
|
|
},
|
|||
|
|
//修改子节点
|
|||
|
|
nodexml: function () {
|
|||
|
|
var panel = $("#EditPanel");
|
|||
|
|
var tmp = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
|
|||
|
|
tmp += "<node type=\"edit\" id=\"" + panel.find("span[name='id']").text() + "\" rootid=\"" + rootid + "\">";
|
|||
|
|
tmp += update.getCtl(panel);
|
|||
|
|
tmp += "</node>";
|
|||
|
|
return tmp;
|
|||
|
|
},
|
|||
|
|
//添加子菜点
|
|||
|
|
addxml: function () {
|
|||
|
|
var panel = $("#AddPanel");
|
|||
|
|
//结果
|
|||
|
|
var tmp = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
|
|||
|
|
tmp += "<node type=\"add\" id=\"-1\" rootid=\"" + rootid + "\">";
|
|||
|
|
tmp += "<patid>" + panel.find("span[name='id']").text() + "</patid>";
|
|||
|
|
tmp += update.getCtl(panel);
|
|||
|
|
tmp += "</node>";
|
|||
|
|
return tmp;
|
|||
|
|
},
|
|||
|
|
//获取控件值
|
|||
|
|
getCtl: function (panel) {
|
|||
|
|
var ctls = panel.find("*[name]:visible");
|
|||
|
|
var str = "<{0}>{1}</{0}>";
|
|||
|
|
var tmp = "<func>" + defvalue.type + "</func>";
|
|||
|
|
ctls.each(function () {
|
|||
|
|
var element = $(this).get(0).tagName.toLowerCase(); //控件html标签名
|
|||
|
|
//var tm= $(this).attr("name");
|
|||
|
|
//console.log("标签名称:"+element+ " 标签内容:" +$(this).html())
|
|||
|
|
//console.log("name:"+tm+" 是否为空:"+(tm==null));
|
|||
|
|
var name = $.trim($(this).attr("name") != null ? $(this).attr("name").toLowerCase() : ""); //控件名称
|
|||
|
|
if (element == "input") {
|
|||
|
|
var type = $(this).attr("type").toLowerCase(); //控件类型
|
|||
|
|
if (type == "text") tmp += str.format(name, encodeURIComponent($.trim($(this).val())));
|
|||
|
|
if (type == "checkbox") tmp += str.format(name, $(this).attr('checked'));
|
|||
|
|
}
|
|||
|
|
if (element == "span") {
|
|||
|
|
var read = $(this).attr("read");
|
|||
|
|
if (read == "no") return true;
|
|||
|
|
if (name != "") tmp += str.format(name, $(this).text());
|
|||
|
|
}
|
|||
|
|
if (element == "select") {
|
|||
|
|
tmp += str.format(name, panel.find("select[name=" + name + "] option:selected").val());
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
//类型
|
|||
|
|
var type = panel.find("input[name=type][type=radio]:checked").val();
|
|||
|
|
tmp += str.format("type", type);
|
|||
|
|
tmp += "<icox>" + panel.find(".ico:visible").attr("left") + "</icox>";
|
|||
|
|
tmp += "<icoy>" + panel.find(".ico:visible").attr("top") + "</icoy>";
|
|||
|
|
return tmp;
|
|||
|
|
},
|
|||
|
|
//填充控件值
|
|||
|
|
setCtl: function (panel, node) {
|
|||
|
|
var ctls = panel.find("*[type!=submit][type!=button][name]");
|
|||
|
|
ctls.each(function () {
|
|||
|
|
var element = $(this).get(0).tagName.toLowerCase(); //控件html标签名
|
|||
|
|
var name = $.trim($(this).attr("name").toLowerCase()); //控件名称
|
|||
|
|
for (var n in node) {
|
|||
|
|
var attr = n.substring(n.lastIndexOf("_") + 1).toLowerCase();
|
|||
|
|
if (element == "input") {
|
|||
|
|
var type = $(this).attr("type").toLowerCase(); //控件类型
|
|||
|
|
if (attr == name && type == "text") $(this).val(node[n]);
|
|||
|
|
if (attr == name && type == "checkbox") $(this).attr('checked', node[n]);
|
|||
|
|
}
|
|||
|
|
if (element == "span" && attr == name) $(this).text(node[n]);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
//节点类别
|
|||
|
|
panel.find("input[name='type']").each(function () {
|
|||
|
|
var v = $(this).val();
|
|||
|
|
$(this).removeAttr("checked");
|
|||
|
|
if (v == node.MM_Type) $(this).prop("checked", "checked");
|
|||
|
|
});
|
|||
|
|
//图标
|
|||
|
|
if (node.MM_IcoX <= 0) {
|
|||
|
|
node.MM_IcoX = defvalue.ico.x;
|
|||
|
|
node.MM_IcoY = defvalue.ico.y;
|
|||
|
|
}
|
|||
|
|
var ico = $(".ico:visible");
|
|||
|
|
ico.attr("left", node.MM_IcoX).attr("top", node.MM_IcoY);
|
|||
|
|
ico.css("background-position", (-node.MM_IcoX + "px ") + (-node.MM_IcoY + "px"));
|
|||
|
|
},
|
|||
|
|
//提交事件
|
|||
|
|
submit: function () {
|
|||
|
|
var xml = "";
|
|||
|
|
if ($("#RootEditPanel").is(":visible")) xml = update.rootxml(); //修改根节点
|
|||
|
|
if ($("#EditPanel").is(":visible")) xml = update.nodexml(); //修改子节点
|
|||
|
|
if ($("#AddPanel").is(":visible")) xml = update.addxml(); //新增子节点
|
|||
|
|
if (xml == "") return;
|
|||
|
|
$().SoapAjax("ManageMenu", "Update", { result: xml, pid: Tree.RootId, type: defvalue.type }, function (data) {
|
|||
|
|
funcc(data, "完成修改操作!");
|
|||
|
|
}, loading, unloading);
|
|||
|
|
},
|
|||
|
|
//提示信息
|
|||
|
|
alert: function (msg) {
|
|||
|
|
var alert = $("#alert");
|
|||
|
|
alert.html(msg).css("font-size", "60px").fadeIn(300, function () {
|
|||
|
|
$(this).animate({ "font-size": "14px" }, 1000, function () {
|
|||
|
|
$(this).fadeOut(1000);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//更改顺序
|
|||
|
|
function changeOrder(res) {
|
|||
|
|
$().SoapAjax("ManageMenu", "Order", { result: res, rootid: Tree.RootId, type: defvalue.type }, function (data) {
|
|||
|
|
funcc(data, "完成菜单排序更改!");
|
|||
|
|
}, loading, unloading);
|
|||
|
|
}
|
|||
|
|
//删除节点
|
|||
|
|
function delNode(res) {
|
|||
|
|
var div = $("#NodeDragDiv");
|
|||
|
|
if (div.length < 1) return;
|
|||
|
|
var name = div.text();
|
|||
|
|
var msg = "您是否确定要删除当前菜单项:" + name + " ?\n注:\n1、当前菜单项的所有下属菜单,也会同时删除\;\n2、删除后无法恢复。";
|
|||
|
|
if (!confirm(msg)) return;
|
|||
|
|
$().SoapAjax("ManageMenu", "Del", { result: res, pid: Tree.RootId, type: defvalue.type }, function (data) {
|
|||
|
|
funcc(data, "完成删除操作!");
|
|||
|
|
}, loading, unloading);
|
|||
|
|
}
|