kdayun-template/modules/kdayun-app/src/main/resources/static/framework/zltreemenu.js

310 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = [
'<div class="layui-form-item layui-search zltreeMenuSearch">',
' <div class="layui-input-block">',
' <input id="btnTreeSearchInput" type="text" name="search" data-boxid="' + id + '" placeholder="请输入查找的值" class="layui-input">',
' <a href="javascript:;" id="btnTreeSearch" style="">',
' <i class="layui-icon layui-icon-search"></i>',
' </a></div></div>'
];
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: '<div class="noResultBox">' +
' <i class="layui-icon layui-icon-about" style="font-size: 20px;vertical-align: sub;color: #f39b12;"></i> ' +
' <span>没有搜索到相关数据</span>' +
'</div>'
}
$(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);
});