Ztree + bootstarp-table 使用
Ztree + bootstarp-table 使用
一. Ztree
1.引入js/css文件
<!--ztree--> <link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/default/zTreeStyle.css}"> <link th:href="@{/common/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/> <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js}"></script> <!--Jquery--> <script th:src="@{/js/jquery.js}"></script>
2.页面定义/html
<div > <ul id="tree" class="ztree"></ul> </div>
3.页面初始化js
$(function () { var setting = { view: { // fontCss : {"font-size":"26px","color":"red"} }, check: { //开启jquery.ztree.excheck-3.5.js // enable: true, // chkStyle: "radio", // radioType: "radio" }, edit: { /* enable: true, drag: { isCopy: true, isMove: false }*/ }, async: { enable: true, url: ctx + "user/getJsonData",//url地址 type: 'post', autoParam: ["id"], }, data: { simpleData: { enable: true, idKey: "id", pIdKey: "pId", rootPId: 0 } }, callback: { onClick: function (event, treeId, treeNode, clickFlag) { if (!treeNode.isParent) { // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ; $("#input_hidden").attr("value", treeNode.name); // var input = $("#input_hidden").val(); // alert(input); oTable.Init(); } if (treeNode.isParent) { // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ; $("#input_hidden").attr("value", treeNode.name); // var input = $("#input_hidden").val(); // alert(input); oTable.Init(); } }, onAsyncError: zTreeOnAsyncError, onAsyncSuccess: function (event, treeId, treeNode, msg) { } } }; function filter(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; } function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) { alert("加载错误:" + XMLHttpRequest); } $(document).ready(function () { $.fn.zTree.init($("#tree"), setting); }); })
4.controller 层
/** * 提供Ztree数据 * @author zhukaixin * @return java.util.List<com.example.cetcie8.user.pojo.TreeUser> * @throws */ public List<TreeUser> getAllAuthorize() { List<TreeUser> list = new ArrayList(18); TreeUser treeUser1 = new TreeUser(121, 1, 1, "总公司", 1); TreeUser treeUser2 = new TreeUser(122, 121, 0, "北京公司", 1); TreeUser treeUser3 = new TreeUser(123, 121, 0, "上海公司", 1); TreeUser treeUser4 = new TreeUser(124, 121, 0, "广州公司", 1); TreeUser treeUser5 = new TreeUser(125, 121, 1, "中国公司", 1); TreeUser treeUser6 = new TreeUser(126, 125, 0, "中国北方公司", 1); TreeUser treeUser7 = new TreeUser(127, 121, 1, "上市公司", 1); TreeUser treeUser8 = new TreeUser(128, 127, 0, "北京上市分公司", 1); TreeUser treeUser9 = new TreeUser(129, 127, 0, "上海上市分公司", 1); TreeUser treeUser10 = new TreeUser(130, 121, 1, "香港公司", 1); TreeUser treeUser11 = new TreeUser(131, 130, 0, "九龙湾分公司", 1); TreeUser treeUser12 = new TreeUser(132, 130, 0, "台北分公司", 1); list.add(treeUser1); list.add(treeUser2); list.add(treeUser3); list.add(treeUser4); list.add(treeUser5); list.add(treeUser6); list.add(treeUser7); list.add(treeUser8); list.add(treeUser9); list.add(treeUser10); list.add(treeUser11); list.add(treeUser12); return list; } /** * 将Ztree数据封装成Json数据格式 * @author zhukaixin * @return java.lang.String * @throws */ @ResponseBody @PostMapping("/getJsonData") public String getJsonData() { List<TreeUser> list = getAllAuthorize(); StringBuffer json = new StringBuffer("["); String data = ""; int length = list.size(); for (int i = 0; i < length; i++) { json.append("{id:" + list.get(i).getId() + ","); json.append("pId:" + list.get(i).getpId() + ","); json.append("name:\"" + list.get(i).getName() + "\","); if (list.get(i).getIsParent() != 0) { json.append("isParent:" + list.get(i).getIsParent() + ","); } if (list.get(i).getOpen() != 0) { json.append("open:" + list.get(i).getOpen() + ","); } data = json.substring(0, json.lastIndexOf(",")) + "},"; json = new StringBuffer(data); } data = json.substring(0, json.length() - 1) + "]"; // System.out.println(data); return data; }
5.页面直接根据返回的json 数据渲染Ztree
二 、bootStarp-table 整合 Ztree
1.主要就是点击左边的Ztree 节点 右边显示数据
2.完整的html代码
<!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>用户页面</title> <!--Jquery--> <script th:src="@{/js/jquery.js}"></script> <!--bootstrap--> <script th:src="@{/common/bootstrap/js/bootstrap.js}"></script> <link rel="stylesheet" th:href="@{/common/bootstrap/css/bootstrap.min.css}"> <!--bootstrap-table--> <script th:src="@{/common/bootstrap-table/bootstrap-table.js}"></script> <link rel="stylesheet" th:href="@{/common/bootstrap-table/bootstrap-table.css}"> <script th:src="@{/common/bootstrap-table/locale/bootstrap-table-zh-CN.js}"></script> <!--ztree--> <!--<link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/simple/zTreeStyle.css}">--> <link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/default/zTreeStyle.css}"> <link th:href="@{/common/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/> <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js}"></script> <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js}"></script> <!--页面访问路径前缀--> <script th:inline="javascript"> var ctx = [[@{ /}]]; </script> <style type="text/css"> /*自定义的隔行换色*/ #user_table tr:nth-child(even){ background: #fafafa; } #user_table th{ background: #efefef; } /*.select-table { background: #fff; border-radius: 6px; margin-top: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 13px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); }*/ /*.ui-layout-content{ background: #fff; padding: 10px; !* position: relative; *! overflow: auto; border: 0; box-shadow: 1px 1px 3px rgba(0,0,0,.2); }*/ .select-table {/**/ background: #fff; border-radius: 6px; margin-top: 10px; padding-top: 5px; padding-bottom: 13px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); } </style> </head> <body gray-bg style="width: 90%;"> <div class="container-div ui-layout-center"> <div class="row"> <div class="col-sm-3 col-xs-4 ui-layout-content"> <div style="margin-top: 40px;height: 80%;"> <div style="margin:20px 10px 20px 20px"> <div style="color: #333;border-bottom: 1px solid #8b8b8b;"> <h3>组织机构</h3> </div> <div class="ui-layout-content"> <ul id="tree" class="ztree"></ul> </div> <input type="hidden" value="总公司" id="input_hidden"/> </div> </div> </div> <div class="col-sm-9 col-xs-8"> <div style="margin-top: 30px;"> <h3 style="text-align: center">用户数据表格</h3> <div class="row"> <div class="col-sm-11 select-table" style="margin: 40px 20px 60px 20px"> <table id="user_table" style="cursor:pointer;"></table> </div> </div> </div> </div> </div> </div> <script th:src="@{/js/user/user.js}"></script> </body> </html>
3.完整的js
$(function () { //1.初始化Table var oTable = new TableInit(); oTable.Init(); var setting = { view: { // fontCss : {"font-size":"26px","color":"red"} }, check: { //开启jquery.ztree.excheck-3.5.js // enable: true, // chkStyle: "radio", // radioType: "radio" }, edit: { /* enable: true, drag: { isCopy: true, isMove: false }*/ }, async: { enable: true, url: ctx + "user/getJsonData", type: 'post', autoParam: ["id"], }, data: { simpleData: { enable: true, idKey: "id", pIdKey: "pId", rootPId: 0 } }, callback: { onClick: function (event, treeId, treeNode, clickFlag) { if (!treeNode.isParent) { // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ; $("#input_hidden").attr("value", treeNode.name); // var input = $("#input_hidden").val(); // alert(input); oTable.Init(); } if (treeNode.isParent) { // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ; $("#input_hidden").attr("value", treeNode.name); // var input = $("#input_hidden").val(); // alert(input); oTable.Init(); } }, onAsyncError: zTreeOnAsyncError, onAsyncSuccess: function (event, treeId, treeNode, msg) { } } }; function filter(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; } function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) { alert("加载错误:" + XMLHttpRequest); } $(document).ready(function () { $.fn.zTree.init($("#tree"), setting); }); }) var TableInit = function () { var oTableInit = new Object(); //初始化Table oTableInit.Init = function () { $('#user_table').bootstrapTable('destroy'); $('#user_table').bootstrapTable({ url: ctx + "user/userData",//请求url method: 'post',//请求方式 contentType: "application/x-www-form-urlencoded",//发送到服务器的数据编码类型 sortOrder: "desc", striped: true, //是否显示行间隔色 // striped: true, // 是否显示行间隔色 pagination: true, // 是否分页 sidePagination: "client",//分页方式:client客户端分页,server服务端分页(*) // showColumns: false, // 是否显示列的按钮 // detailView: true, // 是否显示父子表 // showExport: false, // 是否显示导出 queryParams: queryParams,//传递参数(*) columns: [{ checkbox: true }, { title: '序号',// 可不加 align: "center", formatter: function (value, row, index) { return index + 1; } }, { field: 'userId', title: '用户编号', align: "center", }, { field: 'username', title: '用户名', align: "center", }, { field: 'groupname', title: '部门', align: "center", }, { field: 'email', title: '邮箱', align: "center", }, { field: 'telephone', title: '电话', align: "center", }], }); }; return oTableInit; }; //得到查询的参数 function queryParams(params) { var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 pageNum: Math.round((params.offset + params.limit) / params.limit), pageSize: params.limit, //树的名称 input: $("#input_hidden").val(), }; return temp; }
3.完整controller
package com.example.cetcie8.user.controller; import com.example.cetcie8.user.pojo.TreeUser; import com.example.cetcie8.user.pojo.User; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * Description: * * @Author: zhukaixin */ @Controller @RequestMapping("/user") public class UserController { @GetMapping() public String view() { return "bi/user/userData"; } @GetMapping("users") public String view1() { return "bi/user/user"; } @PostMapping("/userData") @ResponseBody public List<User> userData(String input) { List list = new ArrayList(18); /* for (int i = 1; i <= 10; i++) { User user = new User(i,"用户"+i,"部门"+i,"123456789@qq.com","1881234563"+i); list.add(user); }*/ //input = "总公司"; if (input.equals("总公司")) { for (int i = 1; i <= 20; i++) { User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i); list.add(user); } } else if (input.equals("北京公司") || input.equals("上海公司") || input.equals("广州公司")) { for (int i = 1; i <= 6; i++) { User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i); list.add(user); } } else { for (int i = 2; i <= 6; i++) { User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i); list.add(user); } } return list; } /** * 将Ztree数据封装成Json数据格式 * @author zhukaixin * @return java.lang.String * @throws */ @ResponseBody @PostMapping("/getJsonData") public String getJsonData() { List<TreeUser> list = getAllAuthorize(); StringBuffer json = new StringBuffer("["); String data = ""; int length = list.size(); for (int i = 0; i < length; i++) { json.append("{id:" + list.get(i).getId() + ","); json.append("pId:" + list.get(i).getpId() + ","); json.append("name:\"" + list.get(i).getName() + "\","); if (list.get(i).getIsParent() != 0) { json.append("isParent:" + list.get(i).getIsParent() + ","); } if (list.get(i).getOpen() != 0) { json.append("open:" + list.get(i).getOpen() + ","); } data = json.substring(0, json.lastIndexOf(",")) + "},"; json = new StringBuffer(data); } data = json.substring(0, json.length() - 1) + "]"; // System.out.println(data); return data; } /** * 提供Ztree数据 * @author zhukaixin * @return java.util.List<com.example.cetcie8.user.pojo.TreeUser> * @throws */ public List<TreeUser> getAllAuthorize() { List<TreeUser> list = new ArrayList(18); TreeUser treeUser1 = new TreeUser(121, 1, 1, "总公司", 1); TreeUser treeUser2 = new TreeUser(122, 121, 0, "北京公司", 1); TreeUser treeUser3 = new TreeUser(123, 121, 0, "上海公司", 1); TreeUser treeUser4 = new TreeUser(124, 121, 0, "广州公司", 1); TreeUser treeUser5 = new TreeUser(125, 121, 1, "中国公司", 1); TreeUser treeUser6 = new TreeUser(126, 125, 0, "中国北方公司", 1); TreeUser treeUser7 = new TreeUser(127, 121, 1, "上市公司", 1); TreeUser treeUser8 = new TreeUser(128, 127, 0, "北京上市分公司", 1); TreeUser treeUser9 = new TreeUser(129, 127, 0, "上海上市分公司", 1); TreeUser treeUser10 = new TreeUser(130, 121, 1, "香港公司", 1); TreeUser treeUser11 = new TreeUser(131, 130, 0, "九龙湾分公司", 1); TreeUser treeUser12 = new TreeUser(132, 130, 0, "台北分公司", 1); list.add(treeUser1); list.add(treeUser2); list.add(treeUser3); list.add(treeUser4); list.add(treeUser5); list.add(treeUser6); list.add(treeUser7); list.add(treeUser8); list.add(treeUser9); list.add(treeUser10); list.add(treeUser11); list.add(treeUser12); return list; } }
4.Pojo
package com.example.cetcie8.user.pojo; /** * Description: * * @Author: zhukaixin */ public class User { //用户编号 private int userId; //用户名 private String username; //部门 private String groupname; //邮箱 private String email; //电话 private String telephone; @Override public String toString() { return "User{" + "userId=" + userId + ", username='" + username + '\'' + ", groupname='" + groupname + '\'' + ", email='" + email + '\'' + ", telephone='" + telephone + '\'' + '}'; } public User(int userId, String username, String groupname, String email, String telephone) { this.userId = userId; this.username = username; this.groupname = groupname; this.email = email; this.telephone = telephone; } public void setUserId(int userId) { this.userId = userId; } public void setUsername(String username) { this.username = username; } public void setGroupname(String groupname) { this.groupname = groupname; } public void setEmail(String email) { this.email = email; } public void setTelephone(String telephone) { this.telephone = telephone; } public int getUserId() { return userId; } public String getUsername() { return username; } public String getGroupname() { return groupname; } public String getEmail() { return email; } public String getTelephone() { return telephone; } }
package com.example.cetcie8.user.pojo; /** * Description: * * @Author: zhukaixin */ public class TreeUser { private int id ; private int pId ; private int isParent ; private String name ; private int open ; public TreeUser(int id, int pId, int isParent, String name, int open) { this.id = id; this.pId = pId; this.isParent = isParent; this.name = name; this.open = open; } @Override public String toString() { return "TreeUser{" + "id=" + id + ", pId=" + pId + ", isParent=" + isParent + ", name='" + name + '\'' + ", open=" + open + '}'; } public void setId(int id) { this.id = id; } public void setpId(int pId) { this.pId = pId; } public void setIsParent(int isParent) { this.isParent = isParent; } public void setName(String name) { this.name = name; } public void setOpen(int open) { this.open = open; } public int getId() { return id; } public int getpId() { return pId; } public int getIsParent() { return isParent; } public String getName() { return name; } public int getOpen() { return open; } }
致敬:2020年的自己
--------------------------------------------
即使不为了什么远大理想,为了好好生活,你也得努力奋斗啊,不然别说什么风花雪月了,柴米油盐也能让你一筹莫展。