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/common/enums/QueryTEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/QueryTEnum.java index 14ce068..5a56212 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/QueryTEnum.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/QueryTEnum.java @@ -2,6 +2,7 @@ package org.nl.common.enums; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.Getter; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.LConsumer; import java.util.Collection; @@ -19,7 +20,8 @@ public enum QueryTEnum { LE((q, k, v) -> { q.le(k[0],v); }), BY((q, k, v) -> { q.orderByDesc(k[0],v); }), NO((q, k, v) -> { q.isNull(k[0]); }), - LT((q, k, v) -> { q.lt(k[0],v); }); + LT((q, k, v) -> { q.lt(k[0],v); }), + OREQ((q, k, v) -> { if (StringUtils.isBlank((String)v)){ q.isNull(k[0]); }else { q.eq(k[0],v); } }); private LConsumer doP; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/domain/vo/DeptVo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/domain/vo/DeptVo.java index 121b616..ec76c59 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/domain/vo/DeptVo.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/domain/vo/DeptVo.java @@ -20,7 +20,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.nl.modules.common.base.BaseDTO; -import org.nl.modules.system.service.dto.MenuDto; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/MenuController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/MenuController.java index d453e75..160b72d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/MenuController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/MenuController.java @@ -26,7 +26,7 @@ import lombok.RequiredArgsConstructor; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.logging.annotation.Log; import org.nl.modules.system.service.MenuService; -import org.nl.modules.system.service.dto.MenuDto; +import org.nl.system.service.menu.dto.MenuDto; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -43,7 +43,7 @@ import java.util.*; @RestController @RequiredArgsConstructor @Api(tags = "系统:菜单管理") -@RequestMapping("/api/menus") +@RequestMapping("/api/menus2") public class MenuController { private final MenuService menuService; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/MenuService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/MenuService.java index d8b016c..611abad 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/MenuService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/MenuService.java @@ -17,9 +17,7 @@ package org.nl.modules.system.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import org.nl.modules.system.domain.Menu; -import org.nl.modules.system.service.dto.MenuDto; -import org.nl.modules.system.service.dto.MenuQueryCriteria; +import org.nl.system.service.menu.dto.MenuDto; import org.springframework.data.domain.Pageable; import java.util.List; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/RoleDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/RoleDto.java index bec7b21..2547288 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/RoleDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/RoleDto.java @@ -18,6 +18,7 @@ package org.nl.modules.system.service.dto; import lombok.Getter; import lombok.Setter; import org.nl.modules.common.base.BaseDTO; +import org.nl.system.service.menu.dto.MenuDto; import java.io.Serializable; import java.util.Objects; 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 b3008bf..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 @@ -11,11 +11,11 @@ import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.domain.vo.MenuMetaVo; import org.nl.modules.system.domain.vo.MenuVo; import org.nl.modules.system.service.MenuService; -import org.nl.modules.system.service.dto.MenuDto; import org.nl.modules.tools.IdUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; +import org.nl.system.service.menu.dto.MenuDto; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,7 +69,7 @@ public class MenuServiceImpl implements MenuService { public MenuDto menuJsonToMenuDto(JSONObject json) { MenuDto menuDto = new MenuDto(); menuDto.setMenuId(json.getString("menu_id")); - menuDto.setType(json.getInteger("type")); + menuDto.setType(json.getString("type")); menuDto.setPermission(json.getString("permission")); menuDto.setTitle(json.getString("title")); menuDto.setMenuSort(json.getInteger("menu_sort")); @@ -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,10 +326,10 @@ 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()) && menuDTO.getType() == 0) { + } else if (!ObjectUtil.isEmpty(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { @@ -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 b7fff1d..6736be7 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 @@ -3,16 +3,18 @@ package org.nl.system.controller.menu; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; + import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.nl.common.TableDataInfo; -import org.nl.modules.common.utils.SecurityUtils; +import org.nl.common.domain.query.PageQuery; import org.nl.modules.logging.annotation.Log; -import org.nl.modules.system.service.dto.MenuDto; import org.nl.system.service.menu.ISysMenuService; import org.nl.system.service.menu.dao.SysMenu; -import org.springframework.data.domain.Pageable; +import org.nl.system.service.menu.dto.MenuDto; +import org.nl.system.service.menu.dto.MenuQuery; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -33,45 +35,29 @@ import java.util.stream.Collectors; @RequestMapping("api/sysMenu") @RequiredArgsConstructor public class SysMenuController { - private final ISysMenuService baseService; - - @GetMapping - @ApiOperation("查询菜单") - @SaCheckPermission("menu:list") - public ResponseEntity pageQuery(@RequestParam Map param, Pageable page) throws Exception { - TableDataInfo data = TableDataInfo.build(baseService.queryAll(param)); - return new ResponseEntity<>(data, HttpStatus.OK); - - } - - @ApiOperation("返回全部的菜单") - @GetMapping(value = "/lazy")//新增时候点击 - @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) - public ResponseEntity query(@RequestParam String pid) { - return new ResponseEntity<>(baseService.getMenus(pid), HttpStatus.OK); - } - - @ApiOperation("查询菜单:根据ID获取同级与上级数据") - @PostMapping("/superior") - @SaCheckPermission("menu:list") - public ResponseEntity getSuperior(@RequestBody List ids) { - Set menuDtos = new LinkedHashSet<>(); - if (CollectionUtil.isNotEmpty(ids)) { - for (String id : ids) { - MenuDto menuDto = baseService.doToDto(baseService.findById(id)); - menuDtos.addAll(baseService.getSuperior(menuDto, new ArrayList<>())); - } - return new ResponseEntity<>(baseService.buildTree(new ArrayList<>(menuDtos)), HttpStatus.OK); - } - return new ResponseEntity<>(baseService.getMenus(null), HttpStatus.OK); - } + private final ISysMenuService iSysMenuService; @GetMapping(value = "/build") @ApiOperation("根据用户获取菜单") - public ResponseEntity buildMenus() { - List menuDtoList = baseService.findByUser(SecurityUtils.getCurrentUserId()); - List menuDtos = baseService.buildTree(menuDtoList); - return new ResponseEntity<>(baseService.buildMenus(menuDtos), HttpStatus.OK); + public ResponseEntity buildMenus(@Validated String systemType) { + //校验系统表是否存在该系统类型 + return new ResponseEntity(iSysMenuService.buildMenus(systemType),HttpStatus.OK); + } + + @ApiOperation("返回全部的菜单") + @GetMapping(value = "/lazy") + @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) + public ResponseEntity query(@RequestParam String pid) { + return new ResponseEntity<>(iSysMenuService.getMenus(pid), HttpStatus.OK); + } + @ApiOperation("获取菜单列表") + @PostMapping(value = "/getMenusByRole") + @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) + public ResponseEntity getMenusByRole(@RequestBody JSONObject json) { + String role_id = json.getString("role_id"); + String system_type = json.getString("system_type"); + String category = json.getString("category"); + return new ResponseEntity<>(iSysMenuService.getMenusByRole(role_id, system_type, category), HttpStatus.OK); } @ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID") @@ -79,19 +65,40 @@ public class SysMenuController { @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) public ResponseEntity child(@RequestParam String id) { Set menuSet = new HashSet<>(); - List menuList = baseService.getMenus(id); - menuSet.add(baseService.findById(id)); - menuSet = baseService.getChildMenus(menuList, menuSet); + List menuList = iSysMenuService.getMenus(id); + menuSet.add(iSysMenuService.findById(id)); + menuSet = iSysMenuService.getChildMenus(menuList, menuSet); Set ids = menuSet.stream().map(SysMenu::getMenuId).collect(Collectors.toSet()); return new ResponseEntity<>(ids, HttpStatus.OK); } + @GetMapping + @ApiOperation("查询菜单") + @SaCheckPermission("menu:list") + public ResponseEntity pageQuery(MenuQuery query, PageQuery page) throws Exception { + List list = iSysMenuService.query(query, page); + return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); + } + + @ApiOperation("查询菜单:根据ID获取同级与上级数据") + @PostMapping("/superior") + @SaCheckPermission("menu:list") + public ResponseEntity getSuperior(@RequestBody JSONObject param) { + Set menuDtos = new LinkedHashSet<>(); + String id=param.getString("ids"); + if (StrUtil.isNotEmpty(id)) { + menuDtos.addAll(iSysMenuService.getSuperior(iSysMenuService.doToDto(iSysMenuService.findById(id)), new ArrayList<>())); + return new ResponseEntity<>(iSysMenuService.buildTree(new ArrayList<>(menuDtos)), HttpStatus.OK); + } + return new ResponseEntity<>(iSysMenuService.getMenus(null), HttpStatus.OK); + } + @Log("新增菜单") @ApiOperation("新增菜单") @PostMapping @SaCheckPermission("menu:add") - public ResponseEntity create(@Validated @RequestBody SysMenu resources) { - baseService.create(resources); + public ResponseEntity create(@RequestBody SysMenu form) { + iSysMenuService.create(form); return new ResponseEntity<>(HttpStatus.CREATED); } @@ -99,8 +106,8 @@ public class SysMenuController { @ApiOperation("修改菜单") @PutMapping @SaCheckPermission("menu:edit") - public ResponseEntity update(@RequestBody SysMenu resources) { - baseService.update(resources); + public ResponseEntity update( @RequestBody SysMenu form) { + iSysMenuService.update(form); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -111,12 +118,11 @@ public class SysMenuController { public ResponseEntity delete(@RequestBody Set ids) { Set menuSet = new HashSet<>(); for (String id : ids) { - //获取所有子节点 - List menuList = baseService.getMenus(id); - menuSet.add(baseService.findById(id)); - menuSet = baseService.getChildMenus(menuList, menuSet); + List menuList = iSysMenuService.getMenus(id); + menuSet.add(iSysMenuService.findById(id)); + menuSet = iSysMenuService.getChildMenus(menuList, menuSet); } - baseService.delete(menuSet); + iSysMenuService.delete(menuSet); return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/ISysMenuService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/ISysMenuService.java index 2cf7b86..cb3e286 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/ISysMenuService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/ISysMenuService.java @@ -1,9 +1,11 @@ package org.nl.system.service.menu; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; import org.nl.modules.system.domain.vo.MenuVo; -import org.nl.modules.system.service.dto.MenuDto; import org.nl.system.service.menu.dao.SysMenu; +import org.nl.system.service.menu.dto.MenuDto; +import org.nl.system.service.menu.dto.MenuQuery; import java.util.List; import java.util.Map; @@ -26,6 +28,14 @@ public interface ISysMenuService extends IService { */ List queryAll(Map param); + /** + * 条件查询 + * @param query + * @param page + * @return + */ + List query(MenuQuery query, PageQuery page); + /** * 根据ID获取同级与上级数据 * @@ -98,6 +108,9 @@ public interface ISysMenuService extends IService { * @return / */ List buildMenus(List menuDtos); + List buildMenus(List menuDtos,String pid); + + List buildMenus(String systemType); /** * 构建菜单树 @@ -121,4 +134,6 @@ public interface ISysMenuService extends IService { */ MenuDto doToDto(SysMenu sysMenu); + List getMenusByRole(String roleId, String systemType, String category); + } 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..b5eabc5 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 @@ -1,12 +1,11 @@ package org.nl.system.service.menu.dao; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.util.Date; /** *

@@ -32,6 +31,7 @@ public class SysMenu implements Serializable { /** * 上级菜单ID */ + @TableField(updateStrategy = FieldStrategy.IGNORED) private String pid; /** @@ -87,7 +87,7 @@ public class SysMenu implements Serializable { /** * 是否外链 */ - private Boolean iFrame; + private Boolean iframe; /** * 是否缓存 @@ -117,7 +117,7 @@ public class SysMenu implements Serializable { /** * 创建时间 */ - private String createTime; + private Date createTime; /** * 修改人标识 @@ -132,7 +132,7 @@ public class SysMenu implements Serializable { /** * 修改时间 */ - private String updateTime; + private Date updateTime; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java index 3115aa5..7964cb9 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Select; import org.nl.system.service.menu.dao.SysMenu; import java.util.List; +import java.util.Map; /** *

@@ -31,6 +32,14 @@ public interface SysMenuMapper extends BaseMapper { */ List findByUser(@Param("userId") String userId); + /** + * 获取系统菜单 + * @param userId + * @param systemType + * @return + */ + List findSystemMenu(@Param("user") String userId,@Param("systemType") String systemType); + /** * 根据用户标识获取权限列表 * @@ -46,4 +55,8 @@ public interface SysMenuMapper extends BaseMapper { */ @Delete(value = "delete from sys_roles_menus where menu_id = #{menuId}") void untiedMenu(String menuId); + + List getMenusByRole(@Param("systemType") String systemType, @Param("category")String category); + + String findAllChild(String pid); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml index 35fc707..7787999 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml @@ -51,4 +51,51 @@ AND permission IS NOT NULL AND permission != '' + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/MenuDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java similarity index 90% rename from nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/MenuDto.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java index fe79b0a..3ae1c29 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/dto/MenuDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuDto.java @@ -13,29 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.nl.modules.system.service.dto; +package org.nl.system.service.menu.dto; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import org.nl.modules.common.base.BaseDTO; import java.io.Serializable; import java.util.List; import java.util.Objects; -/** - * @author Zheng Jie - * @date 2018-12-17 - */ -@Getter -@Setter +@Data public class MenuDto extends BaseDTO implements Serializable { private String menuId; private List children; - private Integer type; + private String type; private String permission; @@ -52,8 +46,9 @@ public class MenuDto extends BaseDTO implements Serializable { private Integer subCount; - private Boolean iFrame; + private Boolean iframe; + private String systemType; private Boolean cache; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuQuery.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuQuery.java new file mode 100644 index 0000000..d5310e3 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dto/MenuQuery.java @@ -0,0 +1,24 @@ +package org.nl.system.service.menu.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.menu.dao.SysMenu; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/15 + */ +@Data +public class MenuQuery extends BaseQuery { + private String pid = ""; + private String systemType; + @Override + public void paramMapping() { + this.doP.put("pid", QParam.builder().k(new String[]{"pid"}).type(QueryTEnum.OREQ).build()); + this.doP.put("blurry", QParam.builder().k(new String[]{"title"}).type(QueryTEnum.LK).build()); + } +} 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 93422cf..732ddd1 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 @@ -4,19 +4,31 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +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; import org.nl.modules.system.domain.vo.MenuMetaVo; import org.nl.modules.system.domain.vo.MenuVo; -import org.nl.modules.system.service.dto.MenuDto; +import org.nl.modules.system.util.CopyUtil; import org.nl.modules.tools.IdUtil; +import org.nl.system.service.dict.dao.Dict; +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.dao.mapper.SysMenuMapper; +import org.nl.system.service.menu.dto.MenuQuery; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -33,7 +45,9 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j public class SysMenuServiceImpl extends ServiceImpl implements ISysMenuService { + private final SysMenuMapper baseMapper; + private final SysDictMapper sysDictMapper; @Override public List queryAll(Map param) { @@ -42,6 +56,17 @@ public class SysMenuServiceImpl extends ServiceImpl impl return getMenus(pid).stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); } + + @Override + public List query(MenuQuery query, PageQuery page) { + if (StringUtils.isNotEmpty(query.getBlurry())){ + query.setPid(null); + } + Page menuPage = this.page(page.build(), query.build()); + List collect = menuPage.getRecords().stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); + return collect; + } + @Override public List getSuperior(MenuDto menuDto, List menus) { if (menuDto.getPid() == null) { @@ -84,59 +109,111 @@ public class SysMenuServiceImpl extends ServiceImpl impl @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); + } + baseMapper.insert(resources); // 计算子节点数目 resources.setSubCount(0); // 更新父节点菜单数目 updateSubCnt(resources.getPid()); + updateRootSystemType(resources); + } + + 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()); + this.updateById(sysMenu); + } + private String findRootMenuId(String menuId) { + SysMenu sysMenu = this.findById(menuId); + if (StrUtil.isEmpty(sysMenu.getPid())) { + return menuId; + } else { + return findRootMenuId(sysMenu.getPid()); + } } @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.isEmpty(pid)){ + pids.add(pid); + } + updateSubCnt(pid); + } + if (!CollectionUtils.isEmpty(pids)){ + sysDictMapper.delete(new QueryWrapper().in("para1", pids).eq("code", DictConstantPool.DICT_SYS_CODE)); } } @Transactional(rollbackFor = Exception.class) @Override public void update(SysMenu resources) { - if (resources.getMenuId().equals(resources.getPid())) { - throw new BadRequestException("上级不能为自己"); + String menuId = resources.getMenuId(); + SysMenu menu = baseMapper.selectById(menuId); + List allChildIds = Arrays.asList(baseMapper.findAllChild(menuId).split(",")); + if (allChildIds.contains(resources.getPid())){ + 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://开头"); } } + if (resources.getPid().equals("0")) { resources.setPid(null); + if (StringUtils.isNotEmpty(menu.getPid())){ + addSystemTypeDict(resources); + } + }else { + resources.setSystemType(this.findById(resources.getPid()).getSystemType()); } - - // 记录的父节点ID String oldPid = menu.getPid(); String newPid = resources.getPid(); + // 记录的父节点ID + if (oldPid == null && newPid != null){ + sysDictMapper.delete(new QueryWrapper().eq("para1",menu.getMenuId())); + } menu.setTitle(resources.getTitle()); 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()); @@ -148,6 +225,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl // 计算父级菜单节点数目 updateSubCnt(oldPid); updateSubCnt(newPid); + //更新SystemType + if (!resources.getSystemType().equals(menu.getSystemType())){ + this.update(new UpdateWrapper().set(DictConstantPool.DICT_SYS_CODE,resources.getSystemType()).in("menu_id",allChildIds)); + } + } /** @@ -182,10 +264,10 @@ 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()) && menuDTO.getType() == 0) { + } else if (!ObjectUtil.isEmpty(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { @@ -202,7 +284,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()); @@ -262,20 +344,25 @@ public class SysMenuServiceImpl extends ServiceImpl impl public MenuDto doToDto(SysMenu entity) { MenuDto menuDto = new MenuDto(); + if (ObjectUtil.isEmpty(entity)){ + return menuDto; + } menuDto.setMenuId(entity.getMenuId()); - menuDto.setType(Integer.parseInt(entity.getType())); + menuDto.setType(entity.getType()); menuDto.setPermission(entity.getPermission()); menuDto.setTitle(entity.getTitle()); menuDto.setMenuSort(entity.getMenuSort()); menuDto.setPath(entity.getPath()); menuDto.setComponent(entity.getComponent()); + menuDto.setSystemType(entity.getSystemType()); 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()); menuDto.setIcon(entity.getIcon()); + menuDto.setCreateTime(entity.getCreateTime()); //构建前端需要的数据结构树 Integer sub_count = entity.getSubCount(); @@ -289,4 +376,77 @@ public class SysMenuServiceImpl extends ServiceImpl impl return menuDto; } + @Override + public List buildMenus(String 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("获取对应的系统菜单不存在"); + } + String pid = dict.getPara1(); + List menuDtoList = baseMapper.findSystemMenu(SecurityUtils.getCurrentUserId(),systemType); + //移除系统级菜单 + menuDtoList.removeIf(a->a.getMenuId().equals(pid)); + List menuDtos = this.buildTree(CopyUtil.copyList(menuDtoList, MenuDto.class)); + return this.buildMenus(menuDtos,pid); + } + + @Override + public List buildMenus(List menuDtos, String pid) { + List list = new LinkedList<>(); + //剔除系统级菜单 + menuDtos.forEach(menuDTO -> { + if (menuDTO != null) { + List menuDtoList = menuDTO.getChildren(); + MenuVo menuVo = new MenuVo(); + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getTitle()); + // 一级目录需要加斜杠,不然会报警告 + menuVo.setPath(pid.equals(menuDTO.getPid())? "/" + menuDTO.getPath() : menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); + // 如果不是外链 + 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())) { + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); + + } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { + menuVo.setComponent(menuDTO.getComponent()); + } + } + menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(), menuDTO.getIcon(), !menuDTO.getCache())); + if (menuDtoList != null && menuDtoList.size() != 0) { + menuVo.setAlwaysShow(true); + menuVo.setRedirect("noredirect"); + menuVo.setChildren(buildMenus(menuDtoList,pid)); + // 处理是一级菜单并且没有子菜单的情况 + } else if (StrUtil.isEmpty(menuDTO.getPid())) { + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + // 非外链 + if (!menuDTO.getIframe()) { + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + menuVo.setName(null); + menuVo.setMeta(null); + menuVo.setComponent("Layout"); + List list1 = new ArrayList<>(); + list1.add(menuVo1); + menuVo.setChildren(list1); + } + list.add(menuVo); + } + } + ); + return list; + } + + @Override + public List getMenusByRole(String roleId, String systemType, String category) { + baseMapper.getMenusByRole(systemType,category); + return null; + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java index 3bbb60b..f220440 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java index 8034d82..06d4d48 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java @@ -227,8 +227,7 @@ public class OnlineUserService { // 校验数据库 // 根据用户名查询,在比对密码 SysUser userInfo = sysUserService.getOne(new QueryWrapper().eq("username",authUser.getUsername())); - String dbPassword = userInfo.getPassword(); - if (!dbPassword.equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 + if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 throw new BadRequestException("账号或密码错误"); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/dao/mapper/SysUserMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/dao/mapper/SysUserMapper.xml index 73a9c5e..46212a6 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/dao/mapper/SysUserMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/dao/mapper/SysUserMapper.xml @@ -67,7 +67,8 @@ left join sys_dept on sys_user_dept.dept_id = sys_dept.dept_id - and sys_dept.dept_id = #{query.deptId} + and + sys_user.user_id in (select user_id from sys_user_dept where dept_id = #{query.deptId}) and sys_user.is_used = #{query.isUsed} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java index e1737e8..1f9eefc 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -36,6 +36,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; @@ -107,7 +108,6 @@ public class ISysUserServiceImpl extends ServiceImpl imp } @Override - @SneakyThrows @Transactional public void update(Map userDetail) { if(CollectionUtils.isEmpty(userDetail)|| userDetail.get("userId")==null){ @@ -128,7 +128,11 @@ public class ISysUserServiceImpl extends ServiceImpl imp } } }, Date.class); - BeanUtils.populate(sysUser,userDetail); + try { + BeanUtils.populate(sysUser,userDetail); + }catch (Exception ex){ + throw new RuntimeException(); + } sysUser.setUpdateTime(new Date()); sysUser.setUpdateId(SecurityUtils.getCurrentUserId()); this.updateById(sysUser); @@ -136,9 +140,9 @@ public class ISysUserServiceImpl extends ServiceImpl imp deptService.delUserDeptRelation(sysUser.getUserId()); deptService.saveUserDeptRelation(sysUser.getUserId(), (List) userDetail.get("deptIds")); }; - if (userDetail.get("roleIds") !=null){ + if (userDetail.get("rolesIds") !=null){ roleService.delUserRoleRelation(sysUser.getUserId()); - roleService.saveUserRoleRelation(sysUser.getUserId(),(List) userDetail.get("roleIds")); + roleService.saveUserRoleRelation(sysUser.getUserId(),(List) userDetail.get("rolesIds")); } } diff --git a/nladmin-ui/src/api/system/menu.js b/nladmin-ui/src/api/system/menu.js index 4e41436..7050f81 100644 --- a/nladmin-ui/src/api/system/menu.js +++ b/nladmin-ui/src/api/system/menu.js @@ -41,7 +41,7 @@ export function getChild(id) { export function buildMenus(data) { return request({ - url: 'api/sysMenu/build?system_type=' + data, + url: 'api/sysMenu/build?systemType=' + data, method: 'get' }) } diff --git a/nladmin-ui/src/router/index.js b/nladmin-ui/src/router/index.js index 69a4be5..b3968c2 100644 --- a/nladmin-ui/src/router/index.js +++ b/nladmin-ui/src/router/index.js @@ -52,7 +52,7 @@ router.beforeEach((to, from, next) => { }) export const loadMenus = (next, to) => { - buildMenus().then(res => { + buildMenus(1).then(res => { const sdata = JSON.parse(JSON.stringify(res)) const rdata = JSON.parse(JSON.stringify(res)) const sidebarRoutes = filterAsyncRouter(sdata) diff --git a/nladmin-ui/src/views/system/dept/index.vue b/nladmin-ui/src/views/system/dept/index.vue index ff46232..04bd219 100644 --- a/nladmin-ui/src/views/system/dept/index.vue +++ b/nladmin-ui/src/views/system/dept/index.vue @@ -66,6 +66,8 @@ v-model="form.isUsed" active-color="#409EFF" inactive-color="#F56C6C" + active-value = 'true' + inactive-valu='false' /> diff --git a/nladmin-ui/src/views/system/dict/dictDetail.js b/nladmin-ui/src/views/system/dict/dictDetail.js index 9dd8869..b9f5ea3 100644 --- a/nladmin-ui/src/views/system/dict/dictDetail.js +++ b/nladmin-ui/src/views/system/dict/dictDetail.js @@ -1,8 +1,8 @@ import request from '@/utils/request' -export function get(dictName) { +export function get(code) { const params = { - dictName, + code, page: 0, size: 9999 } diff --git a/nladmin-ui/src/views/system/menu/dd/index.vue b/nladmin-ui/src/views/system/menu/dd/index.vue new file mode 100644 index 0000000..3150b9e --- /dev/null +++ b/nladmin-ui/src/views/system/menu/dd/index.vue @@ -0,0 +1,304 @@ + + + + + diff --git a/nladmin-ui/src/views/system/menu/index.vue b/nladmin-ui/src/views/system/menu/index.vue index 3150b9e..91f85cf 100644 --- a/nladmin-ui/src/views/system/menu/index.vue +++ b/nladmin-ui/src/views/system/menu/index.vue @@ -9,10 +9,22 @@ clearable size="mini" placeholder="模糊搜索" - style="width: 200px;" + style="width: 200px;margin-bottom: 10px" class="filter-item" - @keyup.enter.native="crud.toQuery" + @keyup.enter.native="queryBlurry" /> + + + @@ -57,8 +69,8 @@ - - + + @@ -69,8 +81,8 @@ - - + + @@ -84,7 +96,7 @@ - + @@ -137,8 +149,12 @@ @selection-change="crud.selectionChangeHandler" > - - + + + +