220 lines
8.0 KiB
HTML
220 lines
8.0 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||
|
<head>
|
||
|
<base th:href="${#request.getContextPath() + '/'}">
|
||
|
<meta charset="utf-8">
|
||
|
<meta name="renderer" content="webkit">
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||
|
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
|
||
|
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
|
||
|
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
|
||
|
<link rel="stylesheet" href="assets/js/vendor/zTree3/css/metroStyle/metroStyle.css"/>
|
||
|
<link rel="stylesheet" href="assets/layuiadmin/style/common.css" media="all">
|
||
|
<style>
|
||
|
.card-body-left {border-right: 1px dotted silver;}
|
||
|
.card-body-right {padding: 5px;}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="layui-anim layui-anim-fadein">
|
||
|
<div class="layui-row" style="padding-right: 0px;">
|
||
|
<div class="layui-card">
|
||
|
<div class="layui-card-body left-tree-wrap">
|
||
|
<div id="treeBox" class="layui-col-xs6 card-body-left">
|
||
|
<ul id="tree" class="ztree"></ul>
|
||
|
</div>
|
||
|
<div id="checkedNodeBox" class="layui-col-xs6 card-body-right layui-btn-container"></div>
|
||
|
</div>
|
||
|
<div class="layui-form-item layui-layout-admin">
|
||
|
<div class="layui-input-block">
|
||
|
<div class="layui-footer" style="padding: 0px;">
|
||
|
<div class="layui-btn-group">
|
||
|
<button type="button" class="layui-btn layui-btn-sm submit">确定</button>
|
||
|
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary close">返回</button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<script src="assets/layuiadmin/layui/layui.js"></script>
|
||
|
<script>
|
||
|
var common;
|
||
|
layui.config({
|
||
|
base: 'assets/layuiadmin/'
|
||
|
}).extend({
|
||
|
index: 'lib/index'
|
||
|
}).use(['index', 'ztree', 'common'], function() {
|
||
|
common = layui.common;
|
||
|
var $ = layui.$;
|
||
|
var $win = $(window);
|
||
|
var resizeTimeout = null;
|
||
|
var zTree;
|
||
|
var checkedRoleIds = top.dialog.dialogData.checkedRoleIds ? [].concat(top.dialog.dialogData.checkedRoleIds) : [];
|
||
|
var checkedRoleNodes = [];
|
||
|
var checkedRoleMap = new Map();
|
||
|
|
||
|
function closeBox() {
|
||
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||
|
}
|
||
|
|
||
|
// 初始化大小
|
||
|
function initSize() {
|
||
|
$('#treeBox').css({
|
||
|
height: $win.height() - 52,
|
||
|
overflow: 'auto'
|
||
|
});
|
||
|
$('#checkedNodeBox').css({
|
||
|
height: $win.height() - 52,
|
||
|
overflow: 'auto'
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 勾选节点
|
||
|
* @param id
|
||
|
* @param name
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
function getCheckedNode(id, name) {
|
||
|
return '<button type="button" class="layui-btn layui-btn-xs">'+ name +' <i class="fa fa-times remove-checked-role" data-role-id="'+ id +'"></i></button>'
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 初始化勾选节点
|
||
|
*/
|
||
|
function initCheckNodes(callback) {
|
||
|
if(!checkedRoleIds || checkedRoleIds.length == 0) {
|
||
|
callback ? callback() : '';
|
||
|
return;
|
||
|
}
|
||
|
top.restAjax.post(top.restAjax.path('api/role/list/role-ids', []), {
|
||
|
ids: [].concat(checkedRoleIds)
|
||
|
}, null, function(code, data) {
|
||
|
$('#checkedNodeBox').empty();
|
||
|
var checkedRoleNodes = '';
|
||
|
for(var i = 0, item; item = data[i++];) {
|
||
|
checkedRoleNodes += getCheckedNode(item.roleId, item.roleName);
|
||
|
checkedRoleMap.set(item.roleId, {
|
||
|
id: item.roleId,
|
||
|
name: item.roleName
|
||
|
});
|
||
|
}
|
||
|
$('#checkedNodeBox').append(checkedRoleNodes);
|
||
|
callback ? callback() : '';
|
||
|
}, function(code, data) {
|
||
|
top.dialog.msg(data.msg);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// 刷新选择的节点
|
||
|
function refreshCheckedNodes() {
|
||
|
$('#checkedNodeBox').empty();
|
||
|
var checkedRoleNodes = '';
|
||
|
for(var [k, v] of checkedRoleMap) {
|
||
|
checkedRoleNodes += getCheckedNode(v.id, v.name);
|
||
|
}
|
||
|
$('#checkedNodeBox').append(checkedRoleNodes);
|
||
|
}
|
||
|
// 初始化树
|
||
|
function initThree() {
|
||
|
var setting = {
|
||
|
check: {
|
||
|
enable: true,
|
||
|
chkboxType : {'Y': '', 'N': ''},
|
||
|
},
|
||
|
async: {
|
||
|
enable: true,
|
||
|
autoLoad: true,
|
||
|
type: 'get',
|
||
|
url: top.restAjax.path('api/role/listztree', []),
|
||
|
autoParam: ['id'],
|
||
|
otherParam: {},
|
||
|
dataFilter: function (treeId, parentNode, childNodes) {
|
||
|
if (!childNodes) return null;
|
||
|
for (var i = 0, l = childNodes.length; i < l; i++) {
|
||
|
childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
|
||
|
}
|
||
|
return childNodes;
|
||
|
}
|
||
|
},
|
||
|
callback: {
|
||
|
onAsyncSuccess: function(event, treeId, treeNode) {
|
||
|
// 初始化已选则数据
|
||
|
checkedRoleMap.forEach(function(item) {
|
||
|
var node = zTree.getNodeByParam('id', item.id);
|
||
|
if(!node) {
|
||
|
return;
|
||
|
}
|
||
|
zTree.checkNode(node, true, false);
|
||
|
})
|
||
|
},
|
||
|
onCheck: function(event, treeId, treeNode) {
|
||
|
if(treeNode.checked) {
|
||
|
checkedRoleMap.set(treeNode.id, {
|
||
|
id: treeNode.id,
|
||
|
name: treeNode.name
|
||
|
});
|
||
|
} else {
|
||
|
checkedRoleMap.delete(treeNode.id);
|
||
|
}
|
||
|
refreshCheckedNodes();
|
||
|
}
|
||
|
},
|
||
|
};
|
||
|
zTree = $.fn.zTree.init($("#tree"), setting);
|
||
|
}
|
||
|
|
||
|
function initCheckedRoleMap() {
|
||
|
var checkedRoles = checkedRoleNodes;
|
||
|
if(!checkedRoles) {
|
||
|
return;
|
||
|
}
|
||
|
for(var i = 0, item; item = checkedRoles[i++];){
|
||
|
checkedRoleMap.set(item.roleId, item);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initSize();
|
||
|
initCheckNodes(function() {
|
||
|
initCheckedRoleMap();
|
||
|
initThree();
|
||
|
});
|
||
|
|
||
|
// 事件 - 页面变化
|
||
|
$win.on('resize', function() {
|
||
|
clearTimeout(resizeTimeout);
|
||
|
resizeTimeout = setTimeout(function() {
|
||
|
initSize();
|
||
|
}, 500);
|
||
|
});
|
||
|
|
||
|
$('.close').on('click', function() {
|
||
|
closeBox();
|
||
|
});
|
||
|
|
||
|
// 删除
|
||
|
$(document).on('click', '.remove-checked-role', function() {
|
||
|
var roleId = this.dataset.roleId;
|
||
|
checkedRoleMap.delete(roleId);
|
||
|
var node = zTree.getNodeByParam('id', roleId);
|
||
|
// 未加载不删除
|
||
|
if(node) {
|
||
|
zTree.checkNode(node, false, false);
|
||
|
}
|
||
|
refreshCheckedNodes();
|
||
|
})
|
||
|
|
||
|
$('.submit').on('click', function() {
|
||
|
checkedRoleMap.forEach(function(item) {
|
||
|
checkedRoleNodes.push(item);
|
||
|
});
|
||
|
top.dialog.dialogData.checkedRoleNodes = checkedRoleNodes;
|
||
|
closeBox();
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|