zTree做权限管理

zTreeAPI

效果图:

首先我们来分析下表结构:


sys_auth是权限代码表,一个权限对应一行数据,可以理解为该系统拥有的所有权限集。
sys_user_auth是权限分配表,一行数据表示一个用户拥有一个权限,可以理解为分配给用户的权限集。--auth_id是sys_auth的外键,与主键ID对应。

JAR包及样式下载

2.http://pan.baidu.com/s/1hr6opfQ


1.当我们要修改一个用户的权限,点击修改,跳到controller

@RequestMapping(value = "/userInput")
	public String userInput(final ModelMap model,
			HttpServletRequest request, HttpServletResponse response,
			@RequestParam Map<String, String> params){
		String id=params.get("id");
		if(id!=null&& id.length()>0){
			Map<String,Object> user = userService.findBySysUser(Long.parseLong(id));//获取要修改权限的用户
			List<Map<String, Object>> list = userService.getUserAuth(Long.parseLong(id));//获取该用户的所有权限
			String authIds = "";
			for (Map<String, Object> map : list) {
				authIds += map.get("auth_id")+",";//组装权限集
			}
			if (list.size() > 0) {
				authIds = authIds.substring(0,authIds.length()-1);
			}
			user.put("authIds", authIds);
			model.put("userparam", user);//将这个用户及他的权限集传值到页面
		}
		model.put("params", params);
		return "/user/userInput";
	}


2.userInput.jsp

<%@page pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<html>

<head>
<script type="text/javascript" >
function ctx(){
	return '${ctx}';
}
</script>
<script type="text/javascript" src="${ctx }/scripts/jquery-1.4.4.min.js"></script>
<link rel="stylesheet" href="${ ctx}/scripts/zTree_v3/css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${ ctx}/scripts/zTree_v3/js/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="${ ctx}/scripts/zTree_v3/js/jquery.ztree.excheck-3.5.js"></script>
<script type="text/javascript" src="${ ctx}/scripts/zTree_v3/js/jquery.ztree.exedit-3.5.js"></script>

<script type="text/javascript" src="${ ctx}/scripts/viewjs/user/userInput.js"></script>

</head>

<body>
    <div class="container">
        <div id="forms" class="mt10">
            <div class="box">
                <div class="box_border">
                    <div class="box_top"><b class="pl15">用户<c:out value="${userparam.id ==null?'新增':'修改'}"></c:out></b></div>
                    <div class="box_center">
                        <form:form id="userSave" action="${ctx}/user/userSave" method="post">
                            <input type="hidden" id="id" name="id" value="${userparam.id }" />
                            <table class="form_table pt15 pb15" width="100%" border="0" cellpadding="0" cellspacing="0">
                                <tr>
                                    <td class="td_right" valign="top">权限:</td>
                                    <td width="250" style="padding-right: 50px;">
                                        <div class="tree_menu">
 [ <a id="expandAllBtn" href="#" onclick="return false;">展开</a> ]   [ <a id="collapseAllBtn" href="#" onclick="return false;">折叠</a> ] 
  [ <a id="checkAllTrue" href="#" onclick="return false;">全选</a> ]   [ <a id="checkAllFalse" href="#" onclick="return false;">全不选</a> ]
                                        </div>
                                        <div style="height: 300px;width:360px;overflow-x:auto; ">
                                            <input id="authIds" name="authIds" type="hidden" value="${userparam.authIds}" />
                                            <ul id="treeDemo" class="ztree" style="height: 300px;"></ul>
                                        </div>
                                    </td>
                                </tr>
                                <tr>
                                    <td class="td_right"> </td>
                                    <td colspan="3">
          <input type="submit" name="userSaveBut" id="userSaveBut" class="btn btn82 btn_save2" value="保存">
          <input type="button" onclick="backHref('${ctx}/user/userQuery','${params.pageParam }')" class="btn btn82 btn_back" value="返回">
                                    </td>
                                </tr>
                            </table>
                        </form:form>
                    </div>
                </div>
            </div>
        </div>
    </div>

</body>

</html>

3.userInput.js

var setting = {
    check: {
        enable: true
    },
    data: {
        simpleData: {
            enable: true
        }
    },
    callback: {
        onCheck: getAuth
    }
};

$(document).ready(function() {
    $.post(ctx()+"/sysag/ajaxAuthQuery?authIds=" + $("#authIds").val(), function(data) {
        zNodes = data.zNodes;
        $.fn.zTree.init($("#treeDemo"), setting, zNodes);
        selectNodes("${userparam.id }");
        $("#expandAllBtn").bind("click", {//展开
            type: "expandAll"
        }, expandNode);
        $("#collapseAllBtn").bind("click", {//折叠
            type: "collapseAll"
        }, expandNode);
        $("#checkAllTrue").bind("click", {//全选
            type: "checkAllTrue"
        }, checkNode);
        $("#checkAllFalse").bind("click", {//全不选
            type: "checkAllFalse"
        }, checkNode);
    });


    $("#userSave").validate({
        rules: {
            user_name: {
                required: true,
                maxlength: 20,
                remote: {
                    url: ctx()+"/user/checkUser", //后台处理程序
                    type: "post", //数据发送方式
                    dataType: "json", //接受数据格式   
                    data: { //要传递的数据
                        id: function() {
                            return $("#id").val();
                        },
                        group_name: function() {
                            return $("#user_name").val();
                        }
                    },
                    error: function(a, b, c) {
                        $.messager.alert("提示", "error!", "error");
                    }
                }
            }

        },
        messages: {
            user_name: {
                remote: messagesFomat("该用户名已存在!")
            }
        },
        submitHandler: function(form) {
            $.messager.confirm("提示", "是否确认保存该用户?", function(r) {
                if (r) {
                    $(form).ajaxSubmit(function(data) {
                        if (data.flag == 0) {
                            $.messager.alert("提示", "保存成功!", "info", function() {
                                if ($("#id").val().length == 0) {
                                    clearFrom("#userSave");
                                }
                            });
                        } else if (data.flag == 4) {
                            $.messager.alert("提示", "保存失败!", "error");
                        }
                    });
                }
            });
        }
    });
    
    

});

function selectNodes(id) {
    var zTree = $.fn.zTree.getZTreeObj("treeDemo");
    zTree.selectNode(zTree.getNodeByParam("id", id));
}

function expandNode(e) {
    var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
        type = e.data.type;
    if (type == "expandAll") {
        zTree.expandAll(true);
    } else if (type == "collapseAll") {
        zTree.expandAll(false);
    }
}

function checkNode(e) {
    var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
        type = e.data.type;
    if (type == "checkAllTrue") {
        zTree.checkAllNodes(true);
    } else if (type == "checkAllFalse") {
        zTree.checkAllNodes(false);
    }
    getAuth();
}

function getAuth(e, treeId, treeNode) {
    var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
    var nodes = treeObj.getCheckedNodes(true);
    var checkVals = "";
    for (var i = 0; i < nodes.length; i++) {
        checkVals += nodes[i].id + ",";
    }
    if (checkVals.length > 0) {
        checkVals = checkVals.substring(0, checkVals.length - 1);
    }
    $("#authIds").val(checkVals);
}


4.SysAuthGroupController

/**
 * 权限管理
 */
@Controller
@RequestMapping(value = "/sysag")
public class SysAuthGroupController extends BaseController {
	//查询权限
	@RequestMapping(value = "/ajaxAuthQuery")
	public void ajaxAuthQuery(HttpServletResponse response,@RequestParam Map<String, String> params){
		List<Map<String, Object>> list = authService.findAuthAll();//所有权限
		int len =list.size();
		List<Map<String, Object>> listJson = new ArrayList<Map<String,Object>>();
		String authIds = ","+params.get("authIds")+",";//该用户的权限集
		for (int i = 0; i < len; i++) {
			Map<String, Object> map = list.get(i);
			Map<String,Object> mapJson = new HashMap<String, Object>();
			mapJson.put("id", map.get("id"));
			mapJson.put("pId", map.get("parent_id"));
			mapJson.put("name", map.get("auth_name"));
				mapJson.put("open", true);
			if (authIds.indexOf(map.get("id").toString())>-1) {
				mapJson.put("checked", true);//该用户的所有权限打钩
			}
                /*String[] authIdsArr = params.get("authIds").split(",");
		List<String> authIdsList = Arrays.asList(authIdsArr);
		if(authIdsList.contains(map.get("id").toString())){
			mapJson.put("checked", true);
		}*/
			listJson.add(mapJson);
		}
		Map<String, Object> msg = new HashMap<String, Object>(); 
		msg.put("zNodes", listJson);//返回给userInput.js
		String json = JSONObject.fromObject(msg).toString();
		outJson(json, response);
	}
}





猜你喜欢

转载自blog.csdn.net/q975583865/article/details/71192312
今日推荐