From 97cc85a3b86c0c3057dbbd826a7c361f03c9ab08 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 1 Mar 2019 15:26:04 +0800 Subject: [PATCH] =?UTF-8?q?Ztree=E6=A0=91=E7=BB=93=E6=9E=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysDeptController.java | 18 +-- .../controller/system/SysMenuController.java | 16 +-- .../main/resources/static/ruoyi/js/ry-ui.js | 80 +++++++------- .../resources/templates/system/role/add.html | 2 +- .../resources/templates/system/role/edit.html | 2 +- .../java/com/ruoyi/common/base/Ztree.java | 104 ++++++++++++++++++ .../ruoyi/system/service/ISysDeptService.java | 6 +- .../ruoyi/system/service/ISysMenuService.java | 5 +- .../service/impl/SysDeptServiceImpl.java | 59 +++++----- .../service/impl/SysMenuServiceImpl.java | 60 +++++----- 10 files changed, 233 insertions(+), 119 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/base/Ztree.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java index 5d1a1dbe..290a4989 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -1,7 +1,6 @@ package com.ruoyi.web.controller.system; import java.util.List; -import java.util.Map; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -11,15 +10,16 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; +import com.ruoyi.common.base.Ztree; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.util.ShiroUtils; +import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.domain.SysDept; import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.service.ISysDeptService; -import com.ruoyi.framework.web.base.BaseController; /** * 部门信息 @@ -147,10 +147,10 @@ public class SysDeptController extends BaseController */ @GetMapping("/treeData") @ResponseBody - public List> treeData() + public List treeData() { - List> tree = deptService.selectDeptTree(new SysDept()); - return tree; + List ztrees = deptService.selectDeptTree(new SysDept()); + return ztrees; } /** @@ -158,9 +158,9 @@ public class SysDeptController extends BaseController */ @GetMapping("/roleDeptTreeData") @ResponseBody - public List> deptTreeData(SysRole role) + public List deptTreeData(SysRole role) { - List> tree = deptService.roleDeptTreeData(role); - return tree; + List ztrees = deptService.roleDeptTreeData(role); + return ztrees; } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java index 27be7dbd..5056eed5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -1,7 +1,6 @@ package com.ruoyi.web.controller.system; import java.util.List; -import java.util.Map; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -13,12 +12,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.base.AjaxResult; +import com.ruoyi.common.base.Ztree; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.util.ShiroUtils; +import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.domain.SysMenu; import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.service.ISysMenuService; -import com.ruoyi.framework.web.base.BaseController; /** * 菜单信息 @@ -154,10 +154,10 @@ public class SysMenuController extends BaseController */ @GetMapping("/roleMenuTreeData") @ResponseBody - public List> roleMenuTreeData(SysRole role) + public List roleMenuTreeData(SysRole role) { - List> tree = menuService.roleMenuTreeData(role); - return tree; + List ztrees = menuService.roleMenuTreeData(role); + return ztrees; } /** @@ -165,10 +165,10 @@ public class SysMenuController extends BaseController */ @GetMapping("/menuTreeData") @ResponseBody - public List> menuTreeData(SysRole role) + public List menuTreeData(SysRole role) { - List> tree = menuService.menuTreeData(); - return tree; + List ztrees = menuService.menuTreeData(); + return ztrees; } /** diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js index b2c545f8..a771edc1 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -842,48 +842,50 @@ _lastValue: {}, // 初始化树结构 init: function(options) { + var defaults = { + id: "tree", // 属性ID + expandLevel: 0, // 展开等级节点 + view: { + selectedMulti: false, // 设置是否允许同时选中多个节点 + nameIsHTML: true // 设置 name 属性是否支持 HTML 脚本 + }, + check: { + enable: false, // 置 zTree 的节点上是否显示 checkbox / radio + nocheckInherit: true, // 设置子节点是否自动继承 + }, + data: { + key: { + title: "title" // 节点数据保存节点提示信息的属性名称 + }, + simpleData: { + enable: true // true / false 分别表示 使用 / 不使用 简单数据模式 + } + }, + }; + var options = $.extend(defaults, options); $.tree._option = options; - // 属性ID - var _id = $.common.isEmpty(options.id) ? "tree" : options.id; - // 展开等级节点 - var _expandLevel = $.common.isEmpty(options.expandLevel) ? 0 : options.expandLevel; // 树结构初始化加载 - var setting = { - check: options.check, - view: { selectedMulti: false, nameIsHTML: true }, - data: { key: { title: "title" }, simpleData: { enable: true } }, - callback: { onClick: options.onClick } - }; + var setting = { + callback: { + onClick: options.onClick, // 用于捕获节点被点击的事件回调函数 + onCheck: options.onCheck, // 用于捕获 checkbox / radio 被勾选 或 取消勾选的事件回调函数 + onDblClick: options.onDblClick // 用于捕获鼠标双击之后的事件回调函数 + }, + check: options.check, + view: options.view, + data: options.data + }; $.get(options.url, function(data) { - var treeName = $("#treeName").val(); var treeId = $("#treeId").val(); - tree = $.fn.zTree.init($("#" + _id), setting, data); + tree = $.fn.zTree.init($("#" + options.id), setting, data); $._tree = tree; - // 展开第一级节点 - var nodes = tree.getNodesByParam("level", 0); - for (var i = 0; i < nodes.length; i++) { - if(_expandLevel > 0) { - tree.expandNode(nodes[i], true, false, false); - } - $.tree.selectByIdName(treeId, treeName, nodes[i]); - } - // 展开第二级节点 - nodes = tree.getNodesByParam("level", 1); + var nodes = tree.getNodesByParam("level", options.expandLevel - 1); for (var i = 0; i < nodes.length; i++) { - if(_expandLevel > 1) { - tree.expandNode(nodes[i], true, false, false); - } - $.tree.selectByIdName(treeId, treeName, nodes[i]); + tree.expandNode(nodes[i], true, false, false); } - // 展开第三级节点 - nodes = tree.getNodesByParam("level", 2); - for (var i = 0; i < nodes.length; i++) { - if(_expandLevel > 2) { - tree.expandNode(nodes[i], true, false, false); - } - $.tree.selectByIdName(treeId, treeName, nodes[i]); - } - }, null, null, "正在加载,请稍后..."); + var node = tree.getNodesByParam("id", treeId, null)[0]; + $.tree.selectByIdName(treeId, node); + }); }, // 搜索节点 searchNode: function() { @@ -905,11 +907,9 @@ $.tree.updateNodes($._tree.getNodesByParamFuzzy("name", value)); }, // 根据Id和Name选中指定节点 - selectByIdName: function(treeId, treeName, node) { - if ($.common.isNotEmpty(treeName) && $.common.isNotEmpty(treeId)) { - if (treeId == node.id && treeName == node.name) { - $._tree.selectNode(node, true); - } + selectByIdName: function(treeId, node) { + if ($.common.isNotEmpty(treeId) && treeId == node.id) { + $._tree.selectNode(node, true); } }, // 显示所有节点 diff --git a/ruoyi-admin/src/main/resources/templates/system/role/add.html b/ruoyi-admin/src/main/resources/templates/system/role/add.html index 964a3ba8..82ccf87f 100644 --- a/ruoyi-admin/src/main/resources/templates/system/role/add.html +++ b/ruoyi-admin/src/main/resources/templates/system/role/add.html @@ -58,7 +58,7 @@ var options = { id: "menuTrees", url: url, - check: { enable: true, nocheckInherit: true, chkboxType: { "Y": "ps", "N": "ps" } }, + check: { enable: true }, expandLevel: 0 }; $.tree.init(options); diff --git a/ruoyi-admin/src/main/resources/templates/system/role/edit.html b/ruoyi-admin/src/main/resources/templates/system/role/edit.html index b1e99b2a..529c024e 100644 --- a/ruoyi-admin/src/main/resources/templates/system/role/edit.html +++ b/ruoyi-admin/src/main/resources/templates/system/role/edit.html @@ -59,7 +59,7 @@ var options = { id: "menuTrees", url: url, - check: { enable: true, nocheckInherit: true, chkboxType: { "Y": "ps", "N": "ps" } }, + check: { enable: true }, expandLevel: 0 }; $.tree.init(options); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/base/Ztree.java b/ruoyi-common/src/main/java/com/ruoyi/common/base/Ztree.java new file mode 100644 index 00000000..70389e11 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/base/Ztree.java @@ -0,0 +1,104 @@ +package com.ruoyi.common.base; + +import java.io.Serializable; + +/** + * Ztree树结构实体类 + * + * @author ruoyi + */ +public class Ztree implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点父ID */ + private Long pId; + + /** 节点名称 */ + private String name; + + /** 节点标题 */ + private String title; + + /** 是否勾选 */ + private boolean checked = false; + + /** 是否展开 */ + private boolean open = false; + + /** 是否能勾选 */ + private boolean nocheck = false; + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getpId() + { + return pId; + } + + public void setpId(Long pId) + { + this.pId = pId; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public boolean isChecked() + { + return checked; + } + + public void setChecked(boolean checked) + { + this.checked = checked; + } + + public boolean isOpen() + { + return open; + } + + public void setOpen(boolean open) + { + this.open = open; + } + + public boolean isNocheck() + { + return nocheck; + } + + public void setNocheck(boolean nocheck) + { + this.nocheck = nocheck; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index b379f7f3..7997192a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -1,7 +1,7 @@ package com.ruoyi.system.service; import java.util.List; -import java.util.Map; +import com.ruoyi.common.base.Ztree; import com.ruoyi.system.domain.SysDept; import com.ruoyi.system.domain.SysRole; @@ -26,7 +26,7 @@ public interface ISysDeptService * @param dept 部门信息 * @return 所有部门信息 */ - public List> selectDeptTree(SysDept dept); + public List selectDeptTree(SysDept dept); /** * 根据角色ID查询菜单 @@ -34,7 +34,7 @@ public interface ISysDeptService * @param role 角色对象 * @return 菜单列表 */ - public List> roleDeptTreeData(SysRole role); + public List roleDeptTreeData(SysRole role); /** * 查询部门人数 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index cc626691..782778d3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -3,6 +3,7 @@ package com.ruoyi.system.service; import java.util.List; import java.util.Map; import java.util.Set; +import com.ruoyi.common.base.Ztree; import com.ruoyi.system.domain.SysMenu; import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.domain.SysUser; @@ -51,14 +52,14 @@ public interface ISysMenuService * @param role 角色对象 * @return 菜单列表 */ - public List> roleMenuTreeData(SysRole role); + public List roleMenuTreeData(SysRole role); /** * 查询所有菜单信息 * * @return 菜单列表 */ - public List> menuTreeData(); + public List menuTreeData(); /** * 查询系统所有权限 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 7a7021ee..65dd890c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,12 +1,11 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.base.Ztree; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.StringUtils; @@ -47,12 +46,11 @@ public class SysDeptServiceImpl implements ISysDeptService */ @Override @DataScope(tableAlias = "d") - public List> selectDeptTree(SysDept dept) + public List selectDeptTree(SysDept dept) { - List> trees = new ArrayList>(); List deptList = deptMapper.selectDeptList(dept); - trees = getTrees(deptList, false, null); - return trees; + List ztrees = initZtree(deptList); + return ztrees; } /** @@ -62,56 +60,63 @@ public class SysDeptServiceImpl implements ISysDeptService * @return 部门列表(数据权限) */ @Override - public List> roleDeptTreeData(SysRole role) + public List roleDeptTreeData(SysRole role) { Long roleId = role.getRoleId(); - List> trees = new ArrayList>(); + List ztrees = new ArrayList(); List deptList = selectDeptList(new SysDept()); if (StringUtils.isNotNull(roleId)) { List roleDeptList = deptMapper.selectRoleDeptTree(roleId); - trees = getTrees(deptList, true, roleDeptList); + ztrees = initZtree(deptList, roleDeptList); } else { - trees = getTrees(deptList, false, null); + ztrees = initZtree(deptList); } - return trees; + return ztrees; + } + + /** + * 对象转部门树 + * + * @param deptList 部门列表 + * @return 树结构列表 + */ + public List initZtree(List deptList) + { + return initZtree(deptList, null); } /** * 对象转部门树 * * @param deptList 部门列表 - * @param isCheck 是否需要选中 * @param roleDeptList 角色已存在菜单列表 - * @return + * @return 树结构列表 */ - public List> getTrees(List deptList, boolean isCheck, List roleDeptList) + public List initZtree(List deptList, List roleDeptList) { - List> trees = new ArrayList>(); + List ztrees = new ArrayList(); + boolean isCheck = StringUtils.isNotNull(roleDeptList); for (SysDept dept : deptList) { if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) { - Map deptMap = new HashMap(); - deptMap.put("id", dept.getDeptId()); - deptMap.put("pId", dept.getParentId()); - deptMap.put("name", dept.getDeptName()); - deptMap.put("title", dept.getDeptName()); + Ztree ztree = new Ztree(); + ztree.setId(dept.getDeptId()); + ztree.setpId(dept.getParentId()); + ztree.setName(dept.getDeptName()); + ztree.setTitle(dept.getDeptName()); if (isCheck) { - deptMap.put("checked", roleDeptList.contains(dept.getDeptId() + dept.getDeptName())); - } - else - { - deptMap.put("checked", false); + ztree.setChecked(roleDeptList.contains(dept.getDeptId() + dept.getDeptName())); } - trees.add(deptMap); + ztrees.add(ztree); } } - return trees; + return ztrees; } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 85782e38..bb52b2a5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -3,16 +3,15 @@ package com.ruoyi.system.service.impl; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.ruoyi.common.base.Ztree; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysMenu; @@ -110,21 +109,21 @@ public class SysMenuServiceImpl implements ISysMenuService * @return 菜单列表 */ @Override - public List> roleMenuTreeData(SysRole role) + public List roleMenuTreeData(SysRole role) { Long roleId = role.getRoleId(); - List> trees = new ArrayList>(); + List ztrees = new ArrayList(); List menuList = menuMapper.selectMenuAll(); if (StringUtils.isNotNull(roleId)) { List roleMenuList = menuMapper.selectMenuTree(roleId); - trees = getTrees(menuList, true, roleMenuList, true); + ztrees = initZtree(menuList, roleMenuList, true); } else { - trees = getTrees(menuList, false, null, true); + ztrees = initZtree(menuList, null, true); } - return trees; + return ztrees; } /** @@ -133,12 +132,11 @@ public class SysMenuServiceImpl implements ISysMenuService * @return 菜单列表 */ @Override - public List> menuTreeData() + public List menuTreeData() { - List> trees = new ArrayList>(); List menuList = menuMapper.selectMenuAll(); - trees = getTrees(menuList, false, null, false); - return trees; + List ztrees = initZtree(menuList); + return ztrees; } /** @@ -165,33 +163,39 @@ public class SysMenuServiceImpl implements ISysMenuService * 对象转菜单树 * * @param menuList 菜单列表 - * @param isCheck 是否需要选中 + * @return 树结构列表 + */ + public List initZtree(List menuList) + { + return initZtree(menuList, null, false); + } + + /** + * 对象转菜单树 + * + * @param menuList 菜单列表 * @param roleMenuList 角色已存在菜单列表 * @param permsFlag 是否需要显示权限标识 - * @return + * @return 树结构列表 */ - public List> getTrees(List menuList, boolean isCheck, List roleMenuList, - boolean permsFlag) + public List initZtree(List menuList, List roleMenuList, boolean permsFlag) { - List> trees = new ArrayList>(); + List ztrees = new ArrayList(); + boolean isCheck = StringUtils.isNotNull(roleMenuList); for (SysMenu menu : menuList) { - Map deptMap = new HashMap(); - deptMap.put("id", menu.getMenuId()); - deptMap.put("pId", menu.getParentId()); - deptMap.put("name", transMenuName(menu, roleMenuList, permsFlag)); - deptMap.put("title", menu.getMenuName()); + Ztree ztree = new Ztree(); + ztree.setId(menu.getMenuId()); + ztree.setpId(menu.getParentId()); + ztree.setName(transMenuName(menu, roleMenuList, permsFlag)); + ztree.setTitle(menu.getMenuName()); if (isCheck) { - deptMap.put("checked", roleMenuList.contains(menu.getMenuId() + menu.getPerms())); - } - else - { - deptMap.put("checked", false); + ztree.setChecked(roleMenuList.contains(menu.getMenuId() + menu.getPerms())); } - trees.add(deptMap); + ztrees.add(ztree); } - return trees; + return ztrees; } public String transMenuName(SysMenu menu, List roleMenuList, boolean permsFlag)