/** * 此文件的头部注释 */ /*global jQuery: false */ (function ($) { 'use strict'; var tree, checkedNodes = [], handleChildrenNode = function (node) { if (node.IconSkin && !node.iconSkin) { node.iconSkin = node.IconSkin; } if (node['Children'] && node['Children'].length > 0) { node.isParent = true; $.each(node['Children'], function (k, v) { handleChildrenNode(v); }); } }; tree = function (id, options) { var treeObj = this; this.treeid = id; this.$tree = $('#' + id); this.options = options; var setting = this.setting = { async: { enable: true, url: function getAsyncUrl(treeId, treeNode) { return treeNode ? treeObj.url + '&nodeid=' + treeNode[treeObj.keyId] : ""; }, dataFilter: function (treeId, parentNode, responseData) { $.each(responseData, function (k, value) { if (value == 0) { alert('暂无数据分类'); return; } if (value == '暂无数据分类') { return; } if (treeObj.keyId === "TreeParentNodeId") { if (value.IsLeaf === false) { value.isParent = true; } else { value.isParent = false; } } else { handleChildrenNode(value); } }); return responseData; }, dataType: 'json', type: this.options.type || 'post', autoParam: [] }, callback: { onClick: $.proxy(treeObj.onClick, treeObj), onCheck: $.proxy(treeObj.onCheck, treeObj), beforeClick: $.proxy(treeObj.beforeClick, treeObj) }, data: { key: { name: 'Name', title: '', url: 'Url', children: 'Children', checked: 'Checked' }, simpleData: { enable: true, idKey: 'TreeParentNodeId', pIdKey: 'ParentId' } }, check: { enable: false, chkStyle: 'checkbox', chkboxType: { 'Y': '', 'N': '' } }, view: { fontCss: function getFontCss(treeId, treeNode) { return (treeNode.DisabledClick) ? { color: "#ADADAD", "font-weight": "bold" } : { color: "#333", "font-weight": "normal" }; }, selectedMulti: false, autoCancelSelected: false, nameIsHTML: true, addDiyDom: options.addDiyDom } }; setting = this.setting = $.extend(true, setting, this.$tree.data(), options); this.keyId = setting.keyId; this.dataSource = setting.dataSource; this.currentNodeId = setting.currentNodeId; this.url = setting.url; var ckn = this.$tree.attr('data-tree-checkedNodes'); if (ckn) { checkedNodes = ckn.split(','); } var hasdataSource = this.$tree.attr('data-tree-dataSource'); if (hasdataSource != '[]' && hasdataSource) { this.hasSource = true; if ($.parseJSON(hasdataSource)) { this.dataSource = $.parseJSON(hasdataSource); } } else { this.hasSource = false; } if (!this.hasSource && !this.dataSource) { this.getAjaxTree(); } else { this.getSourceTree(); } }; tree.prototype = { getZTreeObj: function () { return this.ztreeObj; }, beforeClick: function (treeId, treeNode, clickFlag) { if (treeNode.DisabledClick) { return false; } }, onClick: function (event, treeId, treeNode) { if (treeNode.DisabledClick) { return false; } if (treeNode.chkDisabled === false) { if (treeNode.Checked === true) { treeNode.Checked = false; } else { treeNode.Checked = true; } this.ztreeObj.updateNode(treeNode); } this.$tree.trigger('treeselect', [treeId, treeNode]); }, onCheck: function (event, treeId, treeNode) { this.$tree.trigger('treeselect', [treeId, treeNode]); }, getAjaxTree: function () { var treeObj = this, options = this.options; $.ajax({ url: this.url, type: treeObj.setting.async.type, dataType: 'json', success: function (data) { if (data && data.length) { if (data[0]['TreeSetNodeId']) { treeObj.keyId = 'TreeSetNodeId'; } else if (data[0]['TreeParentNodeId']) { treeObj.keyId = 'TreeParentNodeId'; } if (options.isChangeParent) { $.each(data, function (k, value) { if (value == 0) { alert('暂无数据分类'); return; } if (value == '暂无数据分类') { return; } if (treeObj.keyId === "TreeParentNodeId") { if (value.IconSkin && !value.iconSkin) { value.iconSkin = value.IconSkin; } if (value.IsLeaf === false) { value.isParent = true; } else { value.isParent = false; } } else { handleChildrenNode(value); } }); } $.each(data, function (k, value) { $.each(checkedNodes, function (k, v) { if (value[treeObj.keyId] == v) { value.Checked = true; } }); }); var ztreeObj = treeObj.ztreeObj = $.fn.zTree.init(treeObj.$tree, treeObj.setting, data); var isNull = $('#' + ztreeObj.treeid).attr('data-tree-isNull'); var selectDefaultNode = true; if (typeof (options.selectDefaultNode) != "undefined" && options.selectDefaultNode == false) { selectDefaultNode = false; } if (options.check.enable === false && (isNull === 'false' || selectDefaultNode)) { ztreeObj.selectNode(ztreeObj.getNodes()[0]); } ztreeObj.setting.view.expandSpeed = ""; ztreeObj.expandAll(false); ztreeObj.setting.view.expandSpeed = "fast"; $.each(ztreeObj.transformToArray(ztreeObj.getNodes()), function (k, v) { if (options.check.enable === false) { if (v.Checked) { ztreeObj.selectNode(v); } } }); if (options.currentNodeId) { var nodes = ztreeObj.getNodesByParam(treeObj.keyId, options.currentNodeId, null); ztreeObj.selectNode(nodes[0]); } } } }); }, getSourceTree: function () { var treeObj = this, options = this.options; if (this.dataSource && this.dataSource.length) { if (this.dataSource[0]['TreeSetNodeId']) { this.keyId = 'TreeSetNodeId'; } else if (this.dataSource[0]['TreeParentNodeId']) { this.keyId = 'TreeParentNodeId'; } } if (options.isChangeParent) { $.each(this.dataSource, function (k, value) { if (value == 0) { alert('暂无数据分类'); return; } if (value == '暂无数据分类') { return; } if (treeObj.keyId === "TreeParentNodeId") { if (value.IconSkin && !value.iconSkin) { value.iconSkin = value.IconSkin; } if (value.IsLeaf === false) { value.isParent = true; } else { value.isParent = false; } } else { handleChildrenNode(value); } }); } var ztreeObj = treeObj.ztreeObj = $.fn.zTree.init(treeObj.$tree, this.setting, this.dataSource); var nodes = ztreeObj.transformToArray(ztreeObj.getNodes()); var isNull = this.$tree.attr('data-tree-isNull'); var isSelect = false; if (nodes.length > 0) { if (options.check.enable === false) { $.each(nodes, function (k, v) { if (v['Checked'] === true) { ztreeObj.selectNode(v); isSelect = true; } }); } if (isSelect === false && options.check.enable === false && isNull === 'false') { ztreeObj.selectNode(nodes[0]); } ztreeObj.setting.view.expandSpeed = ""; ztreeObj.expandAll(false); ztreeObj.setting.view.expandSpeed = "fast"; } }, setRightMenu: function (id, event, treeId, treeNode) { var objMenu = $('#' + id), clientX = event.clientX - 5, clientY = event.clientY - 5, $body = $('iframe', window.parent.document), redge = $body.width() - clientX, bedge = $body.height() - clientY, menu = objMenu.get(0), menuLeft, menuTop, menuoffsetWidth = menu.offsetWidth, menuoffsetHeight = menu.offsetHeight; if (menuoffsetWidth == 0) { menuoffsetWidth = objMenu.find('.dropdown-menu').outerWidth(); } if (menuoffsetHeight == 0) { menuoffsetHeight = objMenu.find('.dropdown-menu').outerHeight() + 4; } if (redge < menuoffsetWidth) { menuLeft = document.documentElement.scrollLeft + document.body.scrollLeft + clientX - (menuoffsetWidth - redge); } else { menuLeft = document.documentElement.scrollLeft + document.body.scrollLeft + clientX; } if (bedge < menuoffsetHeight) { menuTop = document.documentElement.scrollTop + document.body.scrollTop + clientY - (menuoffsetHeight - bedge); } else { menuTop = document.documentElement.scrollTop + document.body.scrollTop + clientY; } objMenu.css({ top: menuTop + 'px', left: menuLeft + 'px' }); event.stopPropagation(); } }; var treeSelect = function (treeObj) { this.treeObj = treeObj; this.treeid = treeObj.treeid; this.keyId = treeObj.keyId; }; treeSelect.prototype = { bindCollection: function (treeul, collectionName, bindProName) { var keyId = this.keyId; var treediv = treeul.next('div[data-tree-treedata]'); if (treediv) { treediv.remove(); } treeul.after('
'); var nodes = [], ztreeObj = this.treeObj.getZTreeObj(); if (ztreeObj) { nodes = ztreeObj.getCheckedNodes(true); } var index = -1; $.each(nodes, function (k, v) { var val; val = v[keyId]; index++; var hidden = ''; var chkbox = ''; treeul.next('div[data-tree-treedata]').append(hidden).append(chkbox); }); }, bindProperty: function (treeul, propertyName) { var treediv = treeul.next('div[data-tree-treedata]'); if (treediv) { treediv.remove(); } treeul.after('
'); var nodes = [], ztreeObj = this.treeObj.getZTreeObj(); if (ztreeObj) { nodes = ztreeObj.getSelectedNodes(); } if (nodes.length > 0) { var val; val = nodes[0][this.keyId]; var hidden = ''; treeul.next('div[data-tree-treedata]').append(hidden); } } }; pe.ui.tree = tree; pe.ui.treeSelect = treeSelect; }(jQuery));