From b55c0655544a0307af6c8c554dda72137f263997 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 19 May 2021 17:25:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/ext/ExtSysMenuMapper.java | 13 ++++ .../base/mapper/ext/ExtSysMenuMapper.xml | 21 ++++++ .../controller/sys/SysMenuController.java | 17 +++++ .../io/dataease/service/sys/MenuService.java | 64 +++++++++++++++-- frontend/src/api/system/menu.js | 10 ++- frontend/src/utils/index.js | 15 ++++ frontend/src/views/system/menu/index.vue | 68 ++++++++++++++++--- frontend/src/views/system/role/index.vue | 5 +- frontend/src/views/system/user/index.vue | 6 +- 9 files changed, 199 insertions(+), 20 deletions(-) create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.java create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.xml diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.java new file mode 100644 index 0000000000..147e44e607 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.java @@ -0,0 +1,13 @@ +package io.dataease.base.mapper.ext; + +import io.dataease.base.mapper.ext.query.GridExample; +import io.dataease.controller.sys.request.SimpleTreeNode; + +import java.util.List; + +public interface ExtSysMenuMapper { + + List allNodes(); + + List nodesByExample(GridExample example); +} diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.xml new file mode 100644 index 0000000000..5314bba41d --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMenuMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/backend/src/main/java/io/dataease/controller/sys/SysMenuController.java b/backend/src/main/java/io/dataease/controller/sys/SysMenuController.java index e99b4963c7..f24e883f43 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysMenuController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysMenuController.java @@ -5,8 +5,11 @@ import io.dataease.base.domain.SysMenu; import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.handler.annotation.I18n; +import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.controller.sys.request.MenuCreateRequest; import io.dataease.controller.sys.request.MenuDeleteRequest; +import io.dataease.controller.sys.request.SimpleTreeNode; +import io.dataease.controller.sys.response.DeptNodeResponse; import io.dataease.controller.sys.response.MenuNodeResponse; import io.dataease.controller.sys.response.MenuTreeNode; import io.dataease.service.sys.MenuService; @@ -37,6 +40,20 @@ public class SysMenuController { return menuService.convert(nodes); } + @ApiOperation("搜索菜单树") + @I18n + @PostMapping("/search") + public List search(@RequestBody BaseGridRequest request) { + List nodes = menuService.nodesTreeByCondition(request); + List nodeResponses = nodes.stream().map(node -> { + MenuNodeResponse menuNodeResponse = BeanUtils.copyBean(new MenuNodeResponse(), node); + menuNodeResponse.setHasChildren(node.getSubCount() > 0); + menuNodeResponse.setTop(node.getPid() == menuService.MENU_ROOT_PID); + return menuNodeResponse; + }).collect(Collectors.toList()); + return nodeResponses; + } + @ApiOperation("新增菜单") diff --git a/backend/src/main/java/io/dataease/service/sys/MenuService.java b/backend/src/main/java/io/dataease/service/sys/MenuService.java index 725fa7b390..361d98d768 100644 --- a/backend/src/main/java/io/dataease/service/sys/MenuService.java +++ b/backend/src/main/java/io/dataease/service/sys/MenuService.java @@ -1,26 +1,24 @@ package io.dataease.service.sys; -import io.dataease.base.domain.SysDept; + import io.dataease.base.domain.SysMenu; import io.dataease.base.domain.SysMenuExample; import io.dataease.base.mapper.SysMenuMapper; import io.dataease.base.mapper.ext.ExtMenuMapper; +import io.dataease.base.mapper.ext.ExtSysMenuMapper; import io.dataease.commons.utils.BeanUtils; +import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.controller.sys.request.MenuCreateRequest; import io.dataease.controller.sys.request.MenuDeleteRequest; -import io.dataease.controller.sys.response.DeptTreeNode; +import io.dataease.controller.sys.request.SimpleTreeNode; import io.dataease.controller.sys.response.MenuNodeResponse; - import io.dataease.controller.sys.response.MenuTreeNode; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Service @@ -34,6 +32,8 @@ public class MenuService { @Resource private SysMenuMapper sysMenuMapper; + @Resource + private ExtSysMenuMapper extSysMenuMapper; @Resource private ExtMenuMapper extMenuMapper; @@ -173,4 +173,54 @@ public class MenuService { } + + public List nodesTreeByCondition(BaseGridRequest request){ + List allNodes = allNodes(); + List targetNodes = nodeByCondition(request); + if(org.apache.commons.collections.CollectionUtils.isEmpty(targetNodes)){ + return new ArrayList<>(); + } + List ids = upTree(allNodes, targetNodes); + SysMenuExample example = new SysMenuExample(); + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(ids)){ + SysMenuExample.Criteria criteria = example.createCriteria(); + criteria.andMenuIdIn(ids); + } + List sysMenus = sysMenuMapper.selectByExample(example); + return sysMenus; + } + + public List allNodes() { + List allNodes = extSysMenuMapper.allNodes(); + return allNodes; + } + + public List nodeByCondition(BaseGridRequest request) { + List simpleTreeNodes = extSysMenuMapper.nodesByExample(request.convertExample()); + return simpleTreeNodes; + } + + /** + * 找出目标节点所在路径上的所有节点 向上找 + * @param allNodes 所有节点 + * @param targetNodes 目标节点 + * @return + */ + private List upTree(List allNodes, List targetNodes){ + final Map map = allNodes.stream().collect(Collectors.toMap(SimpleTreeNode::getId, node -> node)); + List results = targetNodes.parallelStream().flatMap(targetNode -> { + //向上逐级找爹 + List ids = new ArrayList<>(); + SimpleTreeNode node = targetNode; + while (node != null) { + ids.add(node.getId()); + Long pid = node.getPid(); + node = map.get(pid); + } + return ids.stream(); + }).distinct().collect(Collectors.toList()); + return results; + } + + } diff --git a/frontend/src/api/system/menu.js b/frontend/src/api/system/menu.js index 2aef84616e..b7df138446 100644 --- a/frontend/src/api/system/menu.js +++ b/frontend/src/api/system/menu.js @@ -53,4 +53,12 @@ export function treeByMenuId(menuId) { }) } -export default { addMenu, editMenu, delMenu, getMenusTree, getChild, treeByMenuId } +export function queryCondition(data) { + return request({ + url: '/api/menu/search', + method: 'post', + data + }) +} + +export default { addMenu, editMenu, delMenu, getMenusTree, getChild, treeByMenuId, queryCondition } diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js index da451fb401..19ea8da956 100644 --- a/frontend/src/utils/index.js +++ b/frontend/src/utils/index.js @@ -162,6 +162,21 @@ export function formatCondition(param) { return result } +export function formatQuickCondition(param, quickField) { + let quickObj = null + if (!param || !(quickObj = param.quick) || !quickField) { + quickObj && delete param.quick + return param + } + param[quickField] = { + field: quickField, + operator: 'like', + value: quickObj.value + } + delete param.quick + return param +} + export function getQueryVariable(variable) { const query = window.location.search.substring(1) const vars = query.split('&') diff --git a/frontend/src/views/system/menu/index.vue b/frontend/src/views/system/menu/index.vue index 3a3b1e24e6..a6d70eb0b2 100644 --- a/frontend/src/views/system/menu/index.vue +++ b/frontend/src/views/system/menu/index.vue @@ -2,9 +2,8 @@