/** * 此文件的头部注释 */ /*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));