diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/dto/MenuSaveDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/dto/MenuSaveDTO.java index e2c8f5e..745ee5f 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/dto/MenuSaveDTO.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/dto/MenuSaveDTO.java @@ -1,11 +1,14 @@ package com.ningdatech.pmapi.sys.model.dto; +import com.ningdatech.pmapi.sys.model.enumeration.MenuTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.*; import lombok.experimental.Accessors; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.io.Serializable; /** @@ -38,13 +41,14 @@ public class MenuSaveDTO implements Serializable { * 标题 */ @ApiModelProperty(value = "标题") - @NotEmpty(message = "请输入菜单标题") + @NotEmpty(message = "标题不能为空") private String title; /** * 页面路径 */ @ApiModelProperty(value = "页面路径") + @NotBlank(message = "页面路径不能为空") private String path; /** @@ -88,4 +92,9 @@ public class MenuSaveDTO implements Serializable { */ @ApiModelProperty(value = "跳转") private String redirect; + + @ApiModelProperty("菜单类型") + @NotNull(message = "菜单类型不能为空") + private MenuTypeEnum menuType; + } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/Menu.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/Menu.java index 415f5ea..e71c5fd 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/Menu.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/Menu.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.ningdatech.pmapi.common.model.entity.MenuTreeEntity; import com.ningdatech.pmapi.sys.model.enumeration.DataScopeEnum; +import com.ningdatech.pmapi.sys.model.enumeration.MenuTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.*; @@ -67,6 +68,9 @@ public class Menu extends MenuTreeEntity { @ApiModelProperty("数据权限选项") private String dataScopeOption; + @ApiModelProperty("菜单类型") + private MenuTypeEnum menuType; + @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateBy; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/MenuServiceImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/MenuServiceImpl.java index d00e4f8..33f7709 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/MenuServiceImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/MenuServiceImpl.java @@ -10,13 +10,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.ningdatech.basic.exception.BaseUncheckedException; +import com.ningdatech.basic.exception.BizException; import com.ningdatech.basic.util.ValidatorUtil; import com.ningdatech.pmapi.common.constant.DefValConst; -import com.ningdatech.pmapi.sys.model.entity.Menu; -import com.ningdatech.pmapi.sys.model.enumeration.MenuTypeEnum; +import com.ningdatech.pmapi.sys.mapper.MenuMapper; import com.ningdatech.pmapi.sys.model.dto.MenuSaveDTO; import com.ningdatech.pmapi.sys.model.dto.MenuUpdateDTO; -import com.ningdatech.pmapi.sys.mapper.MenuMapper; +import com.ningdatech.pmapi.sys.model.entity.Menu; +import com.ningdatech.pmapi.sys.model.enumeration.MenuTypeEnum; import com.ningdatech.pmapi.sys.service.IMenuService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -90,6 +91,8 @@ public class MenuServiceImpl extends ServiceImpl implements IM throw new BaseUncheckedException(HttpStatus.HTTP_OK, "【地址栏路径】:{}重复", data.getPath()); } } + } else { + checkButtonUnique(data.getPid(), data.getPath(), data.getId()); } Menu old = getById(data); if (Objects.isNull(old)) { @@ -113,16 +116,21 @@ public class MenuServiceImpl extends ServiceImpl implements IM @Override @Transactional(rollbackFor = Exception.class) public boolean save(MenuSaveDTO data, Long userId) { - if (StrUtil.isBlank(data.getPath())) { - throw new BaseUncheckedException(HttpStatus.HTTP_OK, "【地址栏路径】不能为空"); - } - if (StrUtil.isBlank(data.getComponent())) { - throw new BaseUncheckedException(HttpStatus.HTTP_OK, "【页面路径】不能为空"); - } - if (!ValidatorUtil.isUrl(data.getPath())) { - if (checkPath(null, data.getPath())) { - throw new BaseUncheckedException(HttpStatus.HTTP_OK, "【地址栏路径】:{}重复", data.getPath()); + data.setPid(Convert.toLong(data.getPid(), DEF_PARENT_ID)); + if (data.getMenuType().equals(MenuTypeEnum.MENU)) { + if (StrUtil.isBlank(data.getPath())) { + throw BizException.wrap("【地址栏路径】不能为空"); + } + if (StrUtil.isBlank(data.getComponent())) { + throw BizException.wrap("【页面路径】不能为空"); + } + if (!ValidatorUtil.isUrl(data.getPath())) { + if (checkPath(null, data.getPath())) { + throw BizException.wrap("【地址栏路径】:{}重复", data.getPath()); + } } + } else { + checkButtonUnique(data.getPid(), data.getPath(), null); } data.setPid(Convert.toLong(data.getPid(), DEF_PARENT_ID)); Menu menu = BeanUtil.toBean(data, Menu.class); @@ -132,6 +140,15 @@ public class MenuServiceImpl extends ServiceImpl implements IM return Boolean.TRUE; } + private void checkButtonUnique(Long pid, String path, Long menuId) { + LambdaQueryWrapper query = Wrappers.lambdaQuery(Menu.class) + .eq(Menu::getPid, pid).eq(Menu::getPath, path) + .ne(menuId != null, Menu::getId, menuId); + if (count(query) > 1) { + throw BizException.wrap("【按钮路径】:{}重复", path); + } + } + public List findChildrenByParentId(Long pid) { if (Objects.isNull(pid)) { throw new BaseUncheckedException(HttpStatus.HTTP_OK, "pid 不能为空");