Explorar el Código

首页-设置常用菜单

bing hace 1 año
padre
commit
985f2f5fb0

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java

@@ -58,6 +58,12 @@ public class SysMenuController extends BaseController {
         return R.ok(rs);
     }
 
+    @GetMapping("/getSelectedMenu")
+    public R<List<SysMenuVo>> getSelectedMenu() {
+        List<SysMenuVo> menus = menuService.selectMenuSelectedByUserId(LoginHelper.getUserId());
+        return R.ok(menus);
+    }
+
     /**
      * 获取菜单列表
      */

+ 76 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/UserCommonUseMenuController.java

@@ -0,0 +1,76 @@
+package org.dromara.system.controller.system;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.system.domain.vo.UserCommonUseMenuVo;
+import org.dromara.system.domain.bo.UserCommonUseMenuBo;
+import org.dromara.system.service.IUserCommonUseMenuService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 用户常用菜单设置
+ * 前端访问路由地址为:/system/userCommonUseMenu
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/userCommonUseMenu")
+public class UserCommonUseMenuController extends BaseController {
+
+    private final IUserCommonUseMenuService userCommonUseMenuService;
+
+
+    /**
+     * 获取用户常用菜单设置详细信息
+     *
+     */
+//    @SaCheckPermission("system:userCommonUseMenu:query")
+    @GetMapping("/getCommonMenu")
+    public R<List<UserCommonUseMenuVo>> getInfo() {
+        return R.ok(userCommonUseMenuService.queryListByUserId(LoginHelper.getUserId()));
+    }
+
+    /**
+     * 新增用户常用菜单设置
+     */
+//    @SaCheckPermission("system:userCommonUseMenu:add")
+    @Log(title = "新增用户常用菜单设置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody UserCommonUseMenuBo bo) {
+        return toAjax(userCommonUseMenuService.insertByBo(LoginHelper.getUserId(),bo.getMenuId()));
+    }
+
+
+    /**
+     * 删除用户常用菜单设置
+     *
+     * @param menuId 菜单id
+     */
+//    @SaCheckPermission("system:userCommonUseMenu:remove")
+    @Log(title = "删除用户常用菜单设置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{menuId}")
+    public R<Void> remove(@NotNull(message = "菜单id不能为空")
+                          @PathVariable Long menuId) {
+        return toAjax(userCommonUseMenuService.delete(LoginHelper.getUserId(),menuId));
+    }
+}

+ 33 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/UserCommonUseMenu.java

@@ -0,0 +1,33 @@
+package org.dromara.system.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 用户常用菜单设置对象 t_user_common_use_menu
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+@Data
+@TableName("t_user_common_use_menu")
+public class UserCommonUseMenu {
+
+    /**
+     * 用户id
+     */
+    @TableId(value = "user_id",type = IdType.INPUT)
+    private Long userId;
+
+    /**
+     * 菜单id
+     */
+//    @TableId(value = "menu_id")
+    private Long menuId;
+
+
+}

+ 36 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/UserCommonUseMenuBo.java

@@ -0,0 +1,36 @@
+package org.dromara.system.domain.bo;
+
+import org.dromara.system.domain.UserCommonUseMenu;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 用户常用菜单设置业务对象 t_user_common_use_menu
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = UserCommonUseMenu.class, reverseConvertGenerate = false)
+public class UserCommonUseMenuBo extends BaseEntity {
+
+    /**
+     * 用户id
+     */
+//    @NotNull(message = "用户id不能为空", groups = { EditGroup.class })
+    private Long userId;
+
+    /**
+     * 菜单id
+     */
+    @NotNull(message = "菜单id不能为空", groups = { EditGroup.class,AddGroup.class })
+    private Long menuId;
+
+
+}

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMenuVo.java

@@ -113,4 +113,9 @@ public class SysMenuVo implements Serializable {
      */
     private List<SysMenuVo> children = new ArrayList<>();
 
+    /**
+     * 网站的路由地址给
+     */
+    private String routePath;
+
 }

+ 44 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/UserCommonUseMenuVo.java

@@ -0,0 +1,44 @@
+package org.dromara.system.domain.vo;
+
+import org.dromara.system.domain.UserCommonUseMenu;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 用户常用菜单设置视图对象 t_user_common_use_menu
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = UserCommonUseMenu.class)
+public class UserCommonUseMenuVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户id
+     */
+    @ExcelProperty(value = "用户id")
+    private Long userId;
+
+    /**
+     * 菜单id
+     */
+    @ExcelProperty(value = "菜单id")
+    private Long menuId;
+
+
+}

+ 23 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/UserCommonUseMenuMapper.java

@@ -0,0 +1,23 @@
+package org.dromara.system.mapper;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.dromara.system.domain.UserCommonUseMenu;
+import org.dromara.system.domain.vo.UserCommonUseMenuVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 用户常用菜单设置Mapper接口
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+public interface UserCommonUseMenuMapper extends BaseMapperPlus<UserCommonUseMenu, UserCommonUseMenuVo> {
+
+    @Delete("delete from t_user_common_use_menu where user_id = #{userId}")
+    int delByUserId(@Param("userId")Long userId);
+
+    @Delete("delete from t_user_common_use_menu where user_id = #{userId} and menu_id =#{menuId}")
+    int delByUserIdMenuId(@Param("userId")Long userId, @Param("menuId")Long menuId);
+
+}

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMenuService.java

@@ -41,6 +41,8 @@ public interface ISysMenuService {
      */
     Set<String> selectMenuPermsByUserId(Long userId);
 
+    List<SysMenuVo> selectMenuSelectedByUserId(Long userId);
+
     /**
      * 根据角色ID查询权限
      *

+ 48 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IUserCommonUseMenuService.java

@@ -0,0 +1,48 @@
+package org.dromara.system.service;
+
+import org.dromara.system.domain.UserCommonUseMenu;
+import org.dromara.system.domain.vo.UserCommonUseMenuVo;
+import org.dromara.system.domain.bo.UserCommonUseMenuBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 用户常用菜单设置Service接口
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+public interface IUserCommonUseMenuService {
+
+
+    /**
+     * 查询符合条件的用户常用菜单设置列表
+     *
+     * @param bo 查询条件
+     * @return 用户常用菜单设置列表
+     */
+    List<UserCommonUseMenuVo> queryListByUserId(Long userId);
+
+    /**
+     * 新增用户常用菜单设置
+     *
+     * @param bo 用户常用菜单设置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(Long userId,Long menuId);
+
+
+    /**
+     * 校验并批量删除用户常用菜单设置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean delete(Long userId,Long menuId);
+
+    Boolean deleteByUserId(Long userId);
+}

+ 52 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java

@@ -22,14 +22,17 @@ import org.dromara.system.domain.bo.SysMenuBo;
 import org.dromara.system.domain.vo.MetaVo;
 import org.dromara.system.domain.vo.RouterVo;
 import org.dromara.system.domain.vo.SysMenuVo;
+import org.dromara.system.domain.vo.UserCommonUseMenuVo;
 import org.dromara.system.mapper.SysMenuMapper;
 import org.dromara.system.mapper.SysRoleMapper;
 import org.dromara.system.mapper.SysRoleMenuMapper;
 import org.dromara.system.mapper.SysTenantPackageMapper;
 import org.dromara.system.service.ISysMenuService;
+import org.dromara.system.service.IUserCommonUseMenuService;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 菜单 业务层处理
@@ -45,6 +48,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
     private final SysRoleMenuMapper roleMenuMapper;
     private final SysTenantPackageMapper tenantPackageMapper;
 
+    private final IUserCommonUseMenuService userCommonUseMenuService;
+
     /**
      * 根据用户查询系统菜单列表
      *
@@ -92,6 +97,53 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return menuList;
     }
 
+    /**
+     * 查询所有已选择了的菜单已经路由path
+     * @param userId 用户id
+     * @return
+     */
+    public List<SysMenuVo> selectMenuSelectedByUserId(Long userId) {
+
+        // 查询已选择的菜单
+        List<UserCommonUseMenuVo> selected = userCommonUseMenuService.queryListByUserId(userId);
+        if(CollUtil.isEmpty(selected)){
+            return Collections.emptyList();
+        }
+        List<Long> selectedMenuIds = selected.stream().map(UserCommonUseMenuVo::getMenuId).toList();
+        // 查询所有菜单
+        SysMenuBo menu = new SysMenuBo();
+        menu.setVisible(UserConstants.NORMAL);
+        menu.setStatus(UserConstants.MENU_NORMAL);
+        List<SysMenuVo> allMenus = selectMenuList(menu, userId);
+        List<SysMenuVo> selectedMenus = allMenus.stream().filter(e -> selectedMenuIds.contains(e.getMenuId())).toList();
+        for (SysMenuVo selectedMenu : selectedMenus) {
+            // 查找路由 通过 递归方式
+            selectedMenu.setRoutePath(selectedMenu.getPath());
+            String routerPath = getRouterPath(selectedMenu, allMenus);
+            selectedMenu.setRoutePath(routerPath);
+        }
+        return selectedMenus;
+    }
+
+    private String getRouterPath(SysMenuVo menu, List<SysMenuVo> menus) {
+        // 查找路由 通过 递归方式
+        // 找出菜单的routepath,拼接所有父级菜单的path
+        String rs = menu.getRoutePath();
+        Long parentId = menu.getParentId();
+        if(parentId !=null ){
+            Optional<SysMenuVo> first = menus.stream().filter(e -> e.getMenuId().equals(parentId)).findFirst();
+            if(first.isPresent()){
+                SysMenuVo s = first.get();
+                s.setRoutePath(s.getPath()+"/"+menu.getRoutePath());
+                return getRouterPath(s, menus);
+            }else{
+                System.err.println(rs);
+                return rs;
+            }
+        }
+        return rs;
+    }
+
     /**
      * 根据用户ID查询权限
      *

+ 89 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/UserCommonUseMenuServiceImpl.java

@@ -0,0 +1,89 @@
+package org.dromara.system.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.dromara.system.domain.bo.UserCommonUseMenuBo;
+import org.dromara.system.domain.vo.UserCommonUseMenuVo;
+import org.dromara.system.domain.UserCommonUseMenu;
+import org.dromara.system.mapper.UserCommonUseMenuMapper;
+import org.dromara.system.service.IUserCommonUseMenuService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 用户常用菜单设置Service业务层处理
+ *
+ * @author bing
+ * @date 2024-10-11
+ */
+@RequiredArgsConstructor
+@Service
+public class UserCommonUseMenuServiceImpl implements IUserCommonUseMenuService {
+
+    private final UserCommonUseMenuMapper baseMapper;
+
+
+    /**
+     * 查询符合条件的用户常用菜单设置列表
+     *
+     * @param userId@return 用户常用菜单设置列表
+     */
+    @Override
+    public List<UserCommonUseMenuVo> queryListByUserId(Long userId) {
+        return MapstructUtils.convert(baseMapper.selectList(new LambdaQueryWrapper<UserCommonUseMenu>().eq(UserCommonUseMenu::getUserId, userId)), UserCommonUseMenuVo.class);
+    }
+
+    /**
+     * 新增用户常用菜单设置
+     *
+     * @param userId
+     * @param menuId
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(Long userId, Long menuId) {
+        LambdaQueryWrapper<UserCommonUseMenu> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(UserCommonUseMenu::getUserId, userId);
+        queryWrapper.eq(UserCommonUseMenu::getMenuId, menuId);
+        Long aLong = baseMapper.selectCount(queryWrapper);
+        if (aLong > 0) {
+            // 已存在,无需添加
+            return true;
+        }
+        UserCommonUseMenu userCommonUseMenu = new UserCommonUseMenu();
+        userCommonUseMenu.setUserId(userId);
+        userCommonUseMenu.setMenuId(menuId);
+        return baseMapper.insert(userCommonUseMenu) > 0;
+    }
+
+    /**
+     * 校验并批量删除用户常用菜单设置信息
+     *
+     * @param userId
+     * @param menuId
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean delete(Long userId, Long menuId) {
+        return baseMapper.delByUserIdMenuId(userId, menuId)>0;
+    }
+
+    /**
+     * @param userId
+     * @return
+     */
+    @Override
+    public Boolean deleteByUserId(Long userId) {
+        return baseMapper.delByUserId(userId) > 0;
+    }
+}

+ 13 - 0
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserCommonUseMenuMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.system.mapper.UserCommonUseMenuMapper">
+
+    <resultMap type="org.dromara.system.domain.UserCommonUseMenu" id="UserCommonUseMenuResult">
+            <result property="userId"    column="user_id"    />
+            <result property="menuId"    column="menu_id"    />
+    </resultMap>
+
+
+</mapper>