浏览代码

feat:租户管理员添加菜单逻辑

xuezizhuo 1 年之前
父节点
当前提交
2293dac9ca

+ 18 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@@ -161,4 +161,22 @@ public class SysMenuController extends BaseController
     {
         return success(menuService.selectMenuByPath(path));
     }
+
+    /**
+     * 新增菜单添加租户逻辑
+     */
+    @PostMapping("/addMenu")
+    public AjaxResult addMenu(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        menu.setCreateBy(getUsername());
+        return toAjax(menuService.insertMenus(menu,getUserId()));
+    }
 }

+ 39 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTenantMenu.java

@@ -0,0 +1,39 @@
+package com.ruoyi.system.domain;
+
+/**
+ * 租户和菜单关联 sys_tenant_menu
+ *
+ * @author ruoyi
+ */
+public class SysTenantMenu {
+
+    /** 租户ID */
+    private Long tenantId;
+
+    /** 菜单ID */
+    private Long menuId;
+
+    public Long getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Long tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public Long getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(Long menuId) {
+        this.menuId = menuId;
+    }
+
+    @Override
+    public String toString() {
+        return "SysTenantMenu{" +
+                "tenantId=" + tenantId +
+                ", menuId=" + menuId +
+                '}';
+    }
+}

+ 12 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMenuMapper.java

@@ -0,0 +1,12 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.SysTenantMenu;
+
+public interface SysTenantMenuMapper {
+
+    /**
+     * 新增租户角色关联
+     */
+    int insertSysTenantMenu(SysTenantMenu sysTenantMenu);
+
+}

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java

@@ -154,4 +154,12 @@ public interface ISysMenuService
      * @return 菜单信息
      */
     SysMenu selectMenuByPath(String path);
+
+    /**
+     * 新增保存菜单信息(添加租户逻辑)
+     *
+     * @param menu 菜单信息
+     * @return 结果
+     */
+    int insertMenus(SysMenu menu,Long userId);
 }

+ 25 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -9,6 +9,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ruoyi.system.domain.SysTenantMenu;
+import com.ruoyi.system.mapper.SysTenantMenuMapper;
 import com.ruoyi.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -26,6 +28,7 @@ import com.ruoyi.system.mapper.SysMenuMapper;
 import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysRoleMenuMapper;
 import com.ruoyi.system.service.ISysMenuService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 菜单 业务层处理
@@ -49,6 +52,9 @@ public class SysMenuServiceImpl implements ISysMenuService
     @Autowired
     private SysRoleMenuMapper roleMenuMapper;
 
+    @Autowired
+    private SysTenantMenuMapper tenantMenuMapper;
+
     /**
      * 根据用户查询系统菜单列表
      * 
@@ -371,6 +377,25 @@ public class SysMenuServiceImpl implements ISysMenuService
         return menuMapper.selectMenuByPath(path);
     }
 
+    @Override
+    @Transactional
+    public int insertMenus(SysMenu menu, Long userId) {
+        int i = 0;
+        SysUser user = userService.selectUserById(userId);
+        //管理员添加系统菜单
+        if (SysUser.isAdmin(userId)) {
+            i = menuMapper.insertMenu(menu);
+        } else if (user.isTenantAdmin()) {
+            //租户管理员添加租户菜单
+            menuMapper.insertMenu(menu);
+            SysTenantMenu tenantMenu = new SysTenantMenu();
+            tenantMenu.setTenantId(user.getTenantId());
+            tenantMenu.setMenuId(menu.getMenuId());
+            i = tenantMenuMapper.insertSysTenantMenu(tenantMenu);
+        }
+        return i;
+    }
+
     /**
      * 获取路由名称
      * 

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -200,7 +200,7 @@
 		where menu_id = #{menuId}
 	</update>
 
-	<insert id="insertMenu" parameterType="SysMenu">
+	<insert id="insertMenu" parameterType="SysMenu" useGeneratedKeys="true" keyProperty="menuId">
 		insert into sys_menu(
 		<if test="menuId != null and menuId != 0">menu_id,</if>
 		<if test="parentId != null and parentId != 0">parent_id,</if>

+ 12 - 0
ruoyi-system/src/main/resources/mapper/system/SysTenantMenuMapper.xml

@@ -0,0 +1,12 @@
+<?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="com.ruoyi.system.mapper.SysTenantMenuMapper">
+
+    <insert id="insertSysTenantMenu" parameterType="SysTenantMenu">
+        insert into sys_tenant_menu(tenant_id ,menu_id )
+        values(#{tenantId}, #{menuId})
+    </insert>
+
+</mapper>

+ 10 - 2
ruoyi-ui/src/api/menu.js

@@ -7,10 +7,18 @@ export const getRouters = () => {
     method: 'get'
   })
 }
-// 获取菜单路由接口
+// 根据用户权限获取菜单路由接口
 export const getMenuList = () => {
   return request({
-    url: '/system/menu/getMenuList',
+    url: '/system/menu/list',
     method: 'get'
   })
+}
+// 新增菜单(租户管理员新增到自己菜单下)
+export function addMenu(data) {
+  return request({
+    url: '/system/menu/addMenu',
+    method: 'post',
+    data: data
+  })
 }