layui.define(['zlContext', 'layer', 'zlConfig'], function (exports) {
var $ = layui.$,
zlContext = layui.zlContext,
zlConfig = layui.zlConfig,
statusName = zlConfig.global.result.statusName,
dataName = zlConfig.global.result.dataName,
OK = zlConfig.global.result.okState,
treeObj = null;
var zltreemenu = {
isloadsearch: false,
isExpand: false,
options: {},
callback: {},
/**
* @param {*} id 目标ul ID 值
* @param {*} setting zTree 自定义配置项 需是对象
* @param {*} callback zTree 各回调函数
*/
render: function (id, setting, callback) {
var defaultOptions = { // 默认配置项
name: 'OBJNAME', // zTree 节点数据保存节点名称的属性名称
type: 'post', // Ajax 的 http 请求模式
idKey: 'RWID', // 节点数据中保存唯一标识的属性名称
pIdKey: 'SYS_PARENTID', // 节点数据中保存其父节点唯一标识的属性名称
rootPid: null, // 用于修正根节点父节点数据,即 pIdKey 指定的属性值
autoParam: [], // 异步加载时需要自动提交父节点属性的参数
otherParam: {}, // Ajax 请求提交的静态参数键值对
isCopy: false, // 拖拽时, 设置是否允许复制节点
isMove: true, // 拖拽时, 设置是否允许移动节点
prev: true, // 拖拽到目标节点时,设置是否允许移动到目标节点前面的操作
next: true, // 拖拽到目标节点时,设置是否允许移动到目标节点后面的操作
editEnable: true, // 设置 zTree 是否处于编辑状态
showRemoveBtn: false, // 设置是否显示删除按钮
showRenameBtn: false, // 设置是否显示编辑名称按钮
checkEnable: false,
chkStyle: "checkbox",
chkboxType: {
"Y": "ps",
"N": "ps"
},
zNodes:[],
// autoCheckTrigger: false,
// nocheckInherit: false,
// chkDisabledInherit: false,
// radioType: "level",
search: true, // 是否开启搜索功能
// asyncSearch: false,
asyncChildNodes: false // 1.zTree 的节点父节点属性锁,是否始终保持 isParent = true 2.作为搜索方式的判断依据
// 详细参数说明可查看zTree API文档 : http://www.treejs.cn/v3/api.php
};
if (zltreemenu.options[id]) {
zltreemenu.options[id] = $.extend({}, zltreemenu.options[id], setting);
} else {
zltreemenu.options[id] = $.extend({}, defaultOptions, setting);
}
zltreemenu.callback[id] = $.extend({}, zltreemenu.callback[id], callback);
var zltreeSetting = {
view: {
showLine: true,
fontCss: zltreemenu.options[id].fontCss ? zltreemenu.options[id].fontCss : {}
},
async: {
enable: true,
url: zltreemenu.options[id].dataurl,
type: zltreemenu.options[id].type,
autoParam: zltreemenu.options[id].autoParam,
otherParam: zltreemenu.options[id].otherParam,
contentType: (zltreemenu.options[id].contentType ? zltreemenu.options[id].contentType : 'application/x-www-form-urlencoded'),
dataType: "json",
dataFilter: zltreemenu.options[id].dataFilter ? zltreemenu.options[id].dataFilter : zltreemenu.dataFilter
},
check: {
enable: zltreemenu.options[id].checkEnable,
chkStyle: zltreemenu.options[id].chkStyle,
chkboxType: zltreemenu.options[id].chkboxType,
},
data: {
keep: {
leaf: false,
parent: zltreemenu.options[id].asyncChildNodes,
},
key: {
name: zltreemenu.options[id].name
},
simpleData: {
enable: true,
idKey: zltreemenu.options[id].idKey,
pIdKey: zltreemenu.options[id].pIdKey,
rootPid: zltreemenu.options[id].rootPid
}
},
edit: {
drag: {
isCopy: zltreemenu.options[id].isCopy,
isMove: zltreemenu.options[id].isMove,
prev: zltreemenu.options[id].prev,
next: zltreemenu.options[id].next,
inner: zltreemenu.options[id].inner
},
enable: zltreemenu.options[id].editEnable,
showRemoveBtn: zltreemenu.options[id].showRemoveBtn,
showRenameBtn: zltreemenu.options[id].showRenameBtn,
},
callback: zltreemenu.callback[id]
};
// 搜索部分 dom
var searchHtml = [
'
'
];
if (zltreemenu.options[id].search && $('#' + id).parent('div').siblings('div.layui-search').length == 0) { // 开启搜索功能后 搜索框渲染
$('#' + id).parent('div').before(searchHtml.join(''))
}
// 树形菜单
// 获取属性菜单的静态数据
var getzNodes = zltreemenu.options[id].zNodes
treeObj = $.fn.zTree.init($('#' + id), zltreeSetting, getzNodes);
return treeObj;
},
search: function (value, type, id) {
// 一次性加载所有数据时
if (!type) {
zltreemenu.isloadsearch = true;
treeObj = $.fn.zTree.getZTreeObj(id);
// 首先显示所有已隐藏的项
treeObj.showNodes(treeObj.getNodesByParam("isHidden", true))
if (value == '') {
$('#' + id).find('.noResultBox').remove();
var firstNode = treeObj.getNodesByFilter(function (node) {
return node.level == 0 && node.isFirstNode;
});
if (firstNode.length > 0) {
treeObj.selectNode(firstNode[0]);
$("#" + firstNode[0].tId + "_a").click();
$('#' + id).parents('.zltree-body').scrollTop(0)
}
if ($('ul#roletree').length > 0) {
$('ul#roletree').find('li').show();
$('ul#roletree').siblings('.noResultBox').remove();
$('ul#authtree').find('li').show();
$('ul#authtree').find('div.layui-none').remove();
}
return;
}
// 所有无子节点的节点
var noChildrenNodes = treeObj.getNodesByParam("isParent", false);
// 先隐藏所有,满足条件的节点显示
treeObj.hideNodes(noChildrenNodes)
treeObj.expandAll(true);
treeObj.showNodes(treeObj.getNodesByFilter(function (noChildrenNodes) {
return noChildrenNodes.check_Child_State == -1 && noChildrenNodes[treeObj.setting.data.key.name].indexOf(value) > -1
}));
// 将没有子节点显示的父级节点也隐藏掉
// 先获取所有父级节点
setTimeout(function () {
var pNodes = treeObj.getNodesByParam("isParent", true);
pNodes.sort(compare('level'))
for (var i = 0; i < pNodes.length; i++) {
if (pNodes[i].children.length != 0) {
var hideNum = 0;
for (var k = 0; k < pNodes[i].children.length; k++) {
var item = pNodes[i].children[k];
if (item.isHidden == true) {
hideNum++;
}
}
if (hideNum == pNodes[i].children.length && pNodes[i][treeObj.setting.data.key.name].indexOf(value) == -1) {
treeObj.hideNode(pNodes[i])
}
}
}
if (treeObj.getNodesByParam("isHidden", false).length == 0) {
// zlContext.warnMsg('没有搜索到相关数据');
if ($('#' + id).find('.noResultBox').length == 0) {
$('#' + id).append(zltreemenu.noresult)
}
zltreemenu.isHideTableData(zltreemenu.options[id].tableId, false);
// 角色权限管理页面 搜索显示
if ($('ul#roletree').length > 0) {
$('ul#roletree').find('li').hide();
if($('ul#roletree').siblings('div.noResultBox').length==0){
$('ul#roletree').after(zltreemenu.noresult);
}
$('ul#authtree').find('li').hide();
zlContext.noData($('ul#authtree'))
}
} else {
if ($('ul#roletree').length > 0) {
$('ul#roletree').find('li').show();
$('ul#roletree').siblings('.noResultBox').remove();
$('ul#authtree').find('li').show();
$('ul#authtree').find('div.layui-none').remove();
}
zltreemenu.isHideTableData(zltreemenu.options[id].tableId, true);
$('#' + id).find('.noResultBox').remove();
var firstNode = treeObj.getNodesByFilter(function (node) {
return node.level == 0 && node.isFirstNode;
});
if (firstNode.length > 0) {
treeObj.selectNode(firstNode[0]);
$("#" + firstNode[0].tId + "_a").click();
$('#' + id).parents('.zltree-body').scrollTop(0)
}
}
$('#btnTreeSearchInput').focus();
}, 0)
} else {
zltreemenu.searchNodesByFuzzy(value);
}
},
searchNodesByFuzzy: function (keyvalue) {
if (keyvalue) {
if (zltreemenu.options[treeObj.setting.treeId].flag == 'coreuser') {
treeObj.setting.async.url = layui.cache['contentPath'] + '/admin/coreorg/queryorgdepttree?resId=252177907A6047E38FC5F1D2E63F15C4';
treeObj.setting.async.otherParam = {
'keyvalue': keyvalue,
'isnotuseddept': false
};
} else {
treeObj.setting.async.url = zltreemenu.options[treeObj.setting.treeId].searchurl;
treeObj.setting.async.otherParam[zltreemenu.options[treeObj.setting.treeId].searchKey] = keyvalue;
}
zltreemenu.isloadsearch = true;
} else {
if (zltreemenu.options[treeObj.setting.treeId].flag == 'coreuser') {
treeObj.setting.async.url = layui.cache['contentPath'] + '/admin/coreorg/queryorgdepttreelistbyparentid?resId=252177907A6047E38FC5F1D2E63F15C4';
treeObj.setting.async.otherParam = {
"startflag": "1"
};
} else {
treeObj.setting.async.url = zltreemenu.options[treeObj.setting.treeId].dataurl;
treeObj.setting.async.otherParam = {};
}
zltreemenu.isloadsearch = false;
}
treeObj = $.fn.zTree.init($('#' + treeObj.setting.treeId), treeObj.setting, null);
$('#btnTreeSearchInput').focus();
},
dataFilter: function (treeId, parentNode, responseData) {
if (responseData[statusName] == OK) {
return responseData[dataName];
} else {
zlContext.errorMsg(responseData[msgName]);
}
return responseData;
},
/**
* 隐藏表格已有内容,显示无数据
* id: 目标表格的 id 值
*/
isHideTableData: function (id, flag) {
var idArr = id.split('|');
for (var i = 0; i < idArr.length; i++) {
if (flag) {
$('#' + idArr[i]).siblings('div').find('div.layui-table-main').find('table').show();
$('#' + idArr[i]).siblings('div').find('div.layui-table-main').find('div.layui-none').hide();
$('#' + idArr[i]).siblings('div').find('div.layui-table-page').show();
$('#' + idArr[i]).siblings('div').find('div.layui-table-fixed').show();
} else {
$('#' + idArr[i]).siblings('div').find('div.layui-table-main').find('table').hide();
zlContext.noData($('#' + idArr[i]).siblings('div').find('div.layui-table-main'));
$('#' + idArr[i]).siblings('div').find('div.layui-table-page').hide();
$('#' + idArr[i]).siblings('div').find('div.layui-table-fixed').hide();
}
}
},
noresult: '' +
' ' +
' 没有搜索到相关数据' +
'
'
}
$(document).on('click', 'div.zltreeMenuSearch>div>a', function () {
var id = $(this).siblings('input').attr('data-boxid');
zltreemenu.search($(this).siblings('input').val(), zltreemenu.options[id].asyncChildNodes, id);
})
$(document).on('keyup', 'div.zltreeMenuSearch>div>input', function (e) {
var id = $(this).attr('data-boxid');
if (e.keyCode == '13') {
zltreemenu.search($(this).val(), zltreemenu.options[id].asyncChildNodes, id)
}
if ((e.keyCode == '46' || e.keyCode == '8' || (e.ctrlKey && e.keyCode == '86')) && $(this).val() == '') {
if (!zltreemenu.isloadsearch) return;
$(this).siblings('a').trigger('click');
$('#btnTreeSearchInput').focus();
}
})
function compare(property) {
return function (a, b) {
var value1 = a[property],
value2 = b[property];
return value2 - value1;
}
}
exports('zltreemenu', zltreemenu);
});