From ce48bec077178dffec1de0887d3e8622dd0eb4bd Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Mon, 26 Dec 2022 10:34:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9iFrame=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=BAiframe=EF=BC=8CiFrame=E5=81=B6=E5=B0=94?= =?UTF-8?q?=E5=AF=BC=E8=87=B4@setting=E6=B3=A8=E8=A7=A3=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/constant/DictConstantPool.java | 11 +++ .../system/service/impl/MenuServiceImpl.java | 8 +-- .../controller/menu/SysMenuController.java | 2 +- .../nl/system/service/menu/dao/SysMenu.java | 2 +- .../nl/system/service/menu/dto/MenuDto.java | 2 +- .../service/menu/impl/SysMenuServiceImpl.java | 71 +++++++++++++++---- nladmin-ui/src/views/system/menu/index.vue | 36 +++++----- 7 files changed, 93 insertions(+), 39 deletions(-) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/constant/DictConstantPool.java diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/constant/DictConstantPool.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/constant/DictConstantPool.java new file mode 100644 index 0000000..860d846 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/constant/DictConstantPool.java @@ -0,0 +1,11 @@ +package org.nl.common.domain.constant; + +/* + * @author ZZQ + * @Date 2022/12/26 9:29 上午 + */ +public class DictConstantPool { + + public static final String DICT_SYS_CODE = "system_type"; + public static final String DICT_SYS_NAME = "所属系统"; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java index 02efb60..4d2bd0b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/MenuServiceImpl.java @@ -79,7 +79,7 @@ public class MenuServiceImpl implements MenuService { menuDto.setIcon(json.getString("icon")); menuDto.setSubCount(json.getInteger("sub_count")); - menuDto.setIFrame("1".equals(json.getString("i_frame"))); + menuDto.setIframe("1".equals(json.getString("i_frame"))); menuDto.setCache("1".equals(json.getString("cache"))); menuDto.setHidden("1".equals(json.getString("hidden"))); menuDto.setComponentName(json.getString("component_name")); @@ -197,7 +197,7 @@ public class MenuServiceImpl implements MenuService { throw new BadRequestException("上级不能为自己"); } - if (newMenu.getIFrame()) { + if (newMenu.getIframe()) { String http = "http://", https = "https://"; if (!(newMenu.getPath().toLowerCase().startsWith(http) || newMenu.getPath().toLowerCase().startsWith(https))) { throw new BadRequestException("外链必须以http://或者https://开头"); @@ -326,7 +326,7 @@ public class MenuServiceImpl implements MenuService { menuVo.setPath(ObjectUtil.isEmpty(menuDTO.getPid()) ? "/" + menuDTO.getPath() : menuDTO.getPath()); menuVo.setHidden(menuDTO.getHidden()); // 如果不是外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { if (ObjectUtil.isEmpty(menuDTO.getPid())) { menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); } else if (!ObjectUtil.isEmpty(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { @@ -346,7 +346,7 @@ public class MenuServiceImpl implements MenuService { MenuVo menuVo1 = new MenuVo(); menuVo1.setMeta(menuVo.getMeta()); // 非外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { menuVo1.setPath("index"); menuVo1.setName(menuVo.getName()); menuVo1.setComponent(menuVo.getComponent()); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java index f06f16b..719e836 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java @@ -97,7 +97,7 @@ public class SysMenuController { @ApiOperation("新增菜单") @PostMapping @SaCheckPermission("menu:add") - public ResponseEntity create(@Validated @RequestBody SysMenu form) { + public ResponseEntity create(@RequestBody SysMenu form) { iSysMenuService.create(form); return new ResponseEntity<>(HttpStatus.CREATED); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/SysMenu.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/SysMenu.java index 100f993..31b7717 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/SysMenu.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/SysMenu.java @@ -87,7 +87,7 @@ public class SysMenu implements Serializable { /** * 是否外链 */ - private Boolean iFrame; + private Boolean iframe; /** * 是否缓存 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java index b3b0807..f270f4d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java @@ -46,7 +46,7 @@ public class MenuDto extends BaseDTO implements Serializable { private Integer subCount; - private Boolean iFrame; + private Boolean iframe; private Boolean cache; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index 231f116..96e1f54 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -6,9 +6,11 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.constant.DictConstantPool; import org.nl.common.domain.query.PageQuery; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; @@ -21,7 +23,6 @@ import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.menu.dto.MenuDto; import org.nl.system.service.menu.ISysMenuService; import org.nl.system.service.menu.dao.SysMenu; -import org.nl.system.service.menu.dto.MenuQuery; import org.nl.system.service.menu.dao.mapper.SysMenuMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +42,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j public class SysMenuServiceImpl extends ServiceImpl implements ISysMenuService { + private final SysMenuMapper baseMapper; private final SysDictMapper sysDictMapper; @@ -107,16 +109,19 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) @Override public void create(SysMenu resources) { - if (resources.getPid().equals("0")) { - resources.setPid(null); - } - if (resources.getIFrame()) { + + if (resources.getIframe()) { String http = "http://", https = "https://"; if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { throw new BadRequestException("外链必须以http://或者https://开头"); } } resources.setMenuId(IdUtil.getStringId()); + if (resources.getPid().equals("0")) { + resources.setPid(null); + addSystemTypeDict(resources); + } + updateRootSystemType(resources); baseMapper.insert(resources); // 计算子节点数目 resources.setSubCount(0); @@ -124,15 +129,52 @@ public class SysMenuServiceImpl extends ServiceImpl impl updateSubCnt(resources.getPid()); } + private void addSystemTypeDict(SysMenu resources) { + Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).orderByDesc("value").last("limit 1")); + Integer currentType = dict!=null?Integer.valueOf(dict.getValue())+1:1; + Dict currentSysType = new Dict(); + currentSysType.setDictId(IdUtil.getStringId()); + currentSysType.setCode(DictConstantPool.DICT_SYS_CODE); + currentSysType.setName(DictConstantPool.DICT_SYS_NAME); + currentSysType.setLabel(resources.getTitle()); + currentSysType.setValue(String.valueOf(currentType)); + currentSysType.setPara1(resources.getMenuId()); + sysDictMapper.insert(currentSysType); + resources.setSystemType(String.valueOf(currentType)); + } + private void updateRootSystemType(SysMenu sysMenu) { + String rootMenuId = this.findRootMenuId(sysMenu.getMenuId()); + if (sysMenu.getMenuId().equals(rootMenuId)){ + return; + } + SysMenu rootMenu = this.findById(rootMenuId); + sysMenu.setSystemType(rootMenu.getSystemType()); + } + private String findRootMenuId(String menuId) { + SysMenu sysMenu = this.findById(menuId); + String pid = sysMenu.getPid(); + if (StrUtil.isEmpty(pid)) { + return menuId; + } else { + return findRootMenuId(pid); + } + } + @Override @Transactional(rollbackFor = Exception.class) public void delete(Set menuSet) { + List pids = Lists.newArrayList(); for (SysMenu menu : menuSet) { //解绑菜单 baseMapper.untiedMenu(menu.getMenuId()); baseMapper.deleteById(menu.getMenuId()); - updateSubCnt(menu.getPid()); + String pid = menu.getPid(); + if (StringUtils.isNotEmpty(pid)){ + pids.add(pid); + } + updateSubCnt(pid); } + sysDictMapper.delete(new QueryWrapper().in("para1", pids).eq("code", DictConstantPool.DICT_SYS_CODE)); } @Transactional(rollbackFor = Exception.class) @@ -142,7 +184,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl throw new BadRequestException("上级不能为自己"); } SysMenu menu = baseMapper.selectById(resources.getMenuId()); - if (resources.getIFrame()) { + if (resources.getIframe()) { String http = "http://", https = "https://"; if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { throw new BadRequestException("外链必须以http://或者https://开头"); @@ -150,6 +192,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl } if (resources.getPid().equals("0")) { resources.setPid(null); + addSystemTypeDict(resources); } // 记录的父节点ID @@ -159,7 +202,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl menu.setComponent(resources.getComponent()); menu.setPath(resources.getPath()); menu.setIcon(resources.getIcon()); - menu.setIFrame(resources.getIFrame()); + menu.setIframe(resources.getIframe()); menu.setPid(resources.getPid()); menu.setMenuSort(resources.getMenuSort()); menu.setCache(resources.getCache()); @@ -205,7 +248,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl menuVo.setPath(ObjectUtil.isEmpty(menuDTO.getPid()) ? "/" + menuDTO.getPath() : menuDTO.getPath()); menuVo.setHidden(menuDTO.getHidden()); // 如果不是外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { if (ObjectUtil.isEmpty(menuDTO.getPid())) { menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); } else if (!ObjectUtil.isEmpty(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { @@ -225,7 +268,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl MenuVo menuVo1 = new MenuVo(); menuVo1.setMeta(menuVo.getMeta()); // 非外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { menuVo1.setPath("index"); menuVo1.setName(menuVo.getName()); menuVo1.setComponent(menuVo.getComponent()); @@ -297,7 +340,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl menuDto.setComponent(entity.getComponent()); menuDto.setPid(entity.getPid()); menuDto.setSubCount(entity.getSubCount()); - menuDto.setIFrame(entity.getIFrame()); + menuDto.setIframe(entity.getIframe()); menuDto.setCache(entity.getCache()); menuDto.setHidden(entity.getHidden()); menuDto.setComponentName(entity.getComponentName()); @@ -317,7 +360,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List buildMenus(String systemType) { - Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", "system_type").eq("value", systemType)); + Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).eq("value", systemType)); if (dict == null || StringUtils.isEmpty(dict.getPara1())){ throw new BadRequestException("获取对应的系统菜单不存在"); } @@ -342,7 +385,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl menuVo.setPath(pid.equals(menuDTO.getPid())? "/" + menuDTO.getPath() : menuDTO.getPath()); menuVo.setHidden(menuDTO.getHidden()); // 如果不是外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { if (pid.equals(menuDTO.getPid())) { menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); } else if (!pid.equals(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { @@ -362,7 +405,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl MenuVo menuVo1 = new MenuVo(); menuVo1.setMeta(menuVo.getMeta()); // 非外链 - if (!menuDTO.getIFrame()) { + if (!menuDTO.getIframe()) { menuVo1.setPath("index"); menuVo1.setName(menuVo.getName()); menuVo1.setComponent(menuVo.getComponent()); diff --git a/nladmin-ui/src/views/system/menu/index.vue b/nladmin-ui/src/views/system/menu/index.vue index c03200c..67bacb5 100644 --- a/nladmin-ui/src/views/system/menu/index.vue +++ b/nladmin-ui/src/views/system/menu/index.vue @@ -14,7 +14,7 @@ @keyup.enter.native="queryBlurry" /> - - - - + + + + @@ -96,7 +96,7 @@ - + @@ -110,10 +110,10 @@ style="width: 190px;" /> - + - + @@ -150,9 +150,9 @@ > - + @@ -167,9 +167,9 @@ - + @@ -220,15 +220,15 @@ import Dict from '../../../components/Dict/Dict' // crud交由presenter持有 const defaultForm = { - menu_id: null, + menuId: null, title: null, menuSort: 999, path: null, - system_type: null, + systemType: null, category: null, component: null, componentName: null, - i_frame: 0, + iframe: false, roles: [], pid: 0, icon: null, @@ -280,7 +280,7 @@ export default { this.crud.toQuery() }, changetype() { - const sysType = this.dict.dict.system_type[this.query.system_type] + const sysType = this.dict.dict.system_type[this.query.systemType] this.query.pid = sysType.para1 this.crud.toQuery() }, @@ -329,8 +329,8 @@ export default { }) }, 100) }, - getSupMenus(menu_id) { - crudMenu.getMenuSuperior(menu_id).then(res => { + getSupMenus(menuId) { + crudMenu.getMenuSuperior(menuId).then(res => { const children = res.map(function(obj) { if (!obj.leaf && !obj.children) { obj.children = null