Browse Source

Merge remote-tracking branch 'origin/master'

Administrator 4 years ago
parent
commit
08867d8bde

+ 4 - 4
boman-api/boman-api-system/src/main/java/com/boman/system/api/domain/SysMenu.java

@@ -1,7 +1,7 @@
 package com.boman.system.api.domain;
 
+import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.web.domain.BaseEntity;
-import com.sun.javafx.beans.IDProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
@@ -80,13 +80,13 @@ public class SysMenu extends BaseEntity
      * false 此表中有此菜单,但是未选择
      * 0 此表中无此菜单
      */
-    private List<Object> containsHead;
+    private List<JSONObject> containsHead;
 
-    public List<Object> getContainsHead() {
+    public List<JSONObject> getContainsHead() {
         return containsHead;
     }
 
-    public void setContainsHead(List<Object> containsHead) {
+    public void setContainsHead(List<JSONObject> containsHead) {
         this.containsHead = containsHead;
     }
 

+ 20 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java

@@ -1,5 +1,7 @@
 package com.boman.domain;
 
+import com.alibaba.fastjson.JSONObject;
+
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -96,4 +98,22 @@ public enum RoleEnum {
         }
         return result;
     }
+
+    /**
+     * 功能描述: 拿到所有的roles eg: A、M.....
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<JSONObject> initData() {
+        List<String> roles = roles();
+        List<JSONObject> result = new ArrayList<>(roles.size());
+        for (String role : roles) {
+            JSONObject jsonObject = new JSONObject(2);
+            jsonObject.put("name", role);
+            jsonObject.put("type", "0");
+            result.add(jsonObject);
+        }
+
+        return result;
+    }
 }

+ 14 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/RoleMenuDto.java

@@ -17,8 +17,16 @@ import static com.boman.domain.constant.FormDataConstant.COLON;
 public class RoleMenuDto {
 
     private Long menuId;
+    private Long roleId;
+    /** A M D..... **/
     private List<String> head;
 
+    /**
+     * 功能描述: 返回A M D......
+     *
+     * @param perms perms
+     * @return java.lang.String
+     */
     public static String getBtnFromPerms(String perms) {
         // sys_user:A
         requireNonNull(perms, "权限标识为空");
@@ -28,6 +36,12 @@ public class RoleMenuDto {
         return split[1];
     }
 
+    /**
+     * 功能描述: 返回tableName
+     *
+     * @param perms perms
+     * @return java.lang.String
+     */
     public static String getTableNameFromPerms(String perms) {
         // sys_user:A
         requireNonNull(perms, "权限标识为空");

+ 8 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/obj/ObjectUtils.java

@@ -82,6 +82,14 @@ public class ObjectUtils {
     }
 
 
+    public static boolean isEmpty(Long input) {
+        return input == null || input < 0;
+    }
+
+    public static boolean isNotEmpty(Long input) {
+        return !isEmpty(input);
+    }
+
     public static String requireNonNull(String input, String... errorMsg) {
         if (input == null || input.isEmpty() || NULL.equalsIgnoreCase(input) || UNDEFINED.equalsIgnoreCase(input)) {
             throw new IllegalArgumentException(errorMsg[0]);

+ 3 - 4
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysRoleMenuController.java

@@ -2,7 +2,6 @@ package com.boman.system.controller;
 
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.domain.dto.RoleMenuDto;
-import com.boman.system.domain.SysRoleMenu;
 import com.boman.system.service.impl.ISysRoleMenuService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,11 +29,11 @@ public class SysRoleMenuController {
     /**
      * 功能描述: 批量保存roleMenu
      *
-     * @param dto dto
+     * @param dtos dtos
      * @return com.boman.common.core.web.domain.AjaxResult
      */
     @PostMapping
-    public AjaxResult list(@RequestBody RoleMenuDto dto) {
-        return AjaxResult.success(service.saveList(dto));
+    public AjaxResult list(@RequestBody List<RoleMenuDto> dtos) {
+        return AjaxResult.success(service.saveList(dtos));
     }
 }

+ 10 - 1
boman-modules/boman-system/src/main/java/com/boman/system/mapper/SysRoleMenuMapper.java

@@ -3,6 +3,7 @@ package com.boman.system.mapper;
 import java.util.List;
 
 import com.boman.system.domain.SysRoleMenu;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 角色与菜单关联表 数据层
@@ -27,6 +28,14 @@ public interface SysRoleMenuMapper
      */
     public int deleteRoleMenuByRoleId(Long roleId);
 
+    /**
+     * 功能描述: 通过角色ID批量删除角色和菜单关联
+     *
+     * @param roleIdList roleIdList
+     * @return int
+     */
+    public int deleteByRoleIdList(@Param("roleIdList") List<Long> roleIdList);
+
     /**
      * 批量删除角色菜单关联信息
      * 
@@ -41,5 +50,5 @@ public interface SysRoleMenuMapper
      * @param roleMenuList 角色菜单列表
      * @return 结果
      */
-    public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
+    int batchRoleMenu(@Param("roleMenuList") List<SysRoleMenu> roleMenuList);
 }

+ 9 - 0
boman-modules/boman-system/src/main/java/com/boman/system/service/ISysMenuService.java

@@ -36,6 +36,15 @@ public interface ISysMenuService
 
     public List<SysMenu> selectMenuListAll(SysMenu menu);
 
+    /**
+     * 功能描述: 获取menu下所有的子节点
+     *
+     * @param allMenus 所有的
+     * @param menu     父节点吧
+     * @return java.util.List<com.boman.system.api.domain.SysMenu>
+     */
+    List<SysMenu> getChildList(List<SysMenu> allMenus, SysMenu menu);
+
     /**
      * 根据用户ID查询权限
      * 

+ 18 - 2
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/ISysRoleMenuService.java

@@ -15,10 +15,26 @@ public interface ISysRoleMenuService {
    /**
     * 功能描述: 批量保存roleMenu
     *
-    * @param dto dto
+    * @param dtos dtos
     * @return int
     */
-    int saveList(RoleMenuDto dto);
+    int saveList(List<RoleMenuDto> dtos);
+
+    /**
+     * 功能描述: 根据roleIdList删除
+     *
+     * @param roleIdList  roleIdList
+     * @return int
+     */
+    int deleteByRoleIdList(List<Long> roleIdList);
+
+    /**
+     * 功能描述: 批量保存roleMenuList
+     *
+     * @param roleMenuList  roleMenuList
+     * @return int
+     */
+    int batchRoleMenu(List<SysRoleMenu> roleMenuList);
 
 
 }

+ 25 - 15
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -3,6 +3,7 @@ package com.boman.system.service.impl;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.redis.RedisKey;
 import com.boman.common.redis.service.RedisService;
@@ -511,14 +512,19 @@ public class SysMenuServiceImpl implements ISysMenuService {
     }
 
     /**
-     * 得到子节点列表
+     * 功能描述: 获取menu下所有的子节点
+     *
+     * @param allMenus 所有的
+     * @param menu     父节点
+     * @return java.util.List<com.boman.system.api.domain.SysMenu>
      */
-    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
+    @Override
+    public List<SysMenu> getChildList(List<SysMenu> allMenus, SysMenu menu) {
         List<SysMenu> tlist = new ArrayList<SysMenu>();
-        Iterator<SysMenu> it = list.iterator();
+        Iterator<SysMenu> it = allMenus.iterator();
         while (it.hasNext()) {
             SysMenu n = (SysMenu) it.next();
-            if (n.getParentId().longValue() == t.getId().longValue()) {
+            if (n.getParentId().longValue() == menu.getId().longValue()) {
                 tlist.add(n);
             }
         }
@@ -544,14 +550,15 @@ public class SysMenuServiceImpl implements ISysMenuService {
         }
 
         Map<String, Object> result = Maps.newHashMapWithExpectedSize(2);
-        result.put("heads", RoleEnum.all());
+        List<Map<String, String>> all = RoleEnum.all();
+        result.put("heads", all);
         if (isEmpty(tempList)) {
             result.put("sysMenus", tempList);
             return result;
         }
 
         for (SysMenu sysMenu : tempList) {
-            List<Object> containsHead = Lists.newArrayList("0", "0", "0", "0", "0", "0", "0", "0");
+            List<JSONObject> containsHead = RoleEnum.initData();
             List<SysMenu> childList = getChildList(menus, sysMenu);
             for (SysMenu childMenu : childList) {
                 String btn = RoleMenuDto.getBtnFromPerms(childMenu.getPerms());
@@ -571,31 +578,34 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return result;
     }
 
-    private void switchBtn(List<Object> containsHead, String btn, Object value) {
+    private void switchBtn(List<JSONObject> containsHead, String btn, Object value) {
+        JSONObject jsonObject = new JSONObject(2);
+        jsonObject.put("name", btn);
+        jsonObject.put("type", value);
         switch (btn) {
             case GlobalBtn.A:
-                containsHead.set(0, value);
+                containsHead.set(0, jsonObject);
                 break;
             case GlobalBtn.M:
-                containsHead.set(1, value);
+                containsHead.set(1, jsonObject);
                 break;
             case GlobalBtn.D:
-                containsHead.set(2, value);
+                containsHead.set(2, jsonObject);
                 break;
             case GlobalBtn.Q:
-                containsHead.set(3, value);
+                containsHead.set(3, jsonObject);
                 break;
             case GlobalBtn.S:
-                containsHead.set(4, value);
+                containsHead.set(4, jsonObject);
                 break;
             case GlobalBtn.U:
-                containsHead.set(5, value);
+                containsHead.set(5, jsonObject);
                 break;
             case GlobalBtn.I:
-                containsHead.set(6, value);
+                containsHead.set(6, jsonObject);
                 break;
             case GlobalBtn.E:
-                containsHead.set(7, value);
+                containsHead.set(7, jsonObject);
                 break;
             default:
                 break;

+ 79 - 38
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysRoleMenuServiceImpl.java

@@ -12,10 +12,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import static com.boman.common.core.utils.obj.ObjectUtils.isEmpty;
-import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
 
 /**
  * @author shiqian
@@ -40,45 +41,85 @@ public class SysRoleMenuServiceImpl implements ISysRoleMenuService{
      * @return int
      */
     @Override
-    public int saveList(RoleMenuDto dto) {
-//        for (SysRoleMenu sysRoleMenu : roleMenuList) {
-//            Long maxId = remoteObjService.getMaxId(TableNameConst.SYS_ROLE_MENU, TableNameConst.ID);
-//            sysRoleMenu.setId(maxId);
-//        }
-//
-//        return mapper.batchRoleMenu(roleMenuList);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        Long menuId = dto.getMenuId();
-        SysMenu menu = menuService.selectMenuById(menuId);
-        requireNonNull(menu, "根据menuId = [" + menuId + "], 未找到菜单");
-        String perms = menu.getPerms();
-        requireNonNull(perms, "权限标识为空");
-        List<String> head = dto.getHead();
-        requireNonNull(head, "操作为空");
-
-        String btn = RoleMenuDto.getBtnFromPerms(menu.getPerms());
-        String tableName = RoleMenuDto.getTableNameFromPerms(menu.getPerms());
+    public int saveList(List<RoleMenuDto> dtos) {
+        int effective = 0;
+        for (RoleMenuDto dto : dtos) {
+            Long menuId = requireNonNull(dto.getMenuId(), "menuId is empty");
+            Long roleId = requireNonNull(dto.getRoleId(), "roleId is empty");
+            SysMenu menu = requireNonNull(menuService.selectMenuById(menuId), "根据menuId = [" + menuId + "], 未找到菜单");
+            List<String> head = dto.getHead();
+            requireNonNull(head, "操作为空");
+            List<SysMenu> allMenus = menuService.selectMenuListAll(new SysMenu());
+            List<SysMenu> childList = menuService.getChildList(allMenus, menu);
+            if (isEmpty(childList)) {
+                return 0;
+            }
+
+            // 根据子菜单和前台传过来的head来判断包含AMD...中的哪些
+            childList = buildBtnByHead(head, childList);
+            List<SysRoleMenu> roleMenuList = buildRoleMenu(roleId, map(childList, SysMenu::getId));
+            // 先删除,再添加,防止联合索引报错
+            deleteByRoleIdList(Collections.singletonList(roleId));
+            effective += batchRoleMenu(roleMenuList);
+        }
+
+        return effective;
+    }
 
+    /**
+     * 功能描述: 根据前台传过来的head中判断是否包含childList中perms的btn,返回包含的
+     *
+     * @param head     A M D......
+     * @param menuList menuList
+     * @return java.util.List<com.boman.system.api.domain.SysMenu>
+     */
+    private List<SysMenu> buildBtnByHead(List<String> head, List<SysMenu> menuList) {
+        return filter(menuList, menu -> head.contains(RoleMenuDto.getBtnFromPerms(menu.getPerms())));
+    }
 
+    /**
+     * 功能描述: 根据roleIdList删除
+     *
+     * @param roleIdList roleIdList
+     * @return int
+     */
+    @Override
+    public int deleteByRoleIdList(List<Long> roleIdList) {
+        if (isEmpty(roleIdList)) {
+            return 0;
+        }
+        return mapper.deleteByRoleIdList(roleIdList);
+    }
 
+    /**
+     * 功能描述: 批量保存roleMenuList
+     *
+     * @param roleMenuList roleMenuList
+     * @return int
+     */
+    @Override
+    public int batchRoleMenu(List<SysRoleMenu> roleMenuList) {
+        return mapper.batchRoleMenu(roleMenuList);
+    }
 
-        return 0;
+    /**
+     * 功能描述: buildRoleMenu
+     *
+     * @param roleId     roleId
+     * @param menuIdList menuIdList
+     * @return java.util.List<com.boman.system.domain.SysRoleMenu>
+     */
+    private List<SysRoleMenu> buildRoleMenu(Long roleId, List<Long> menuIdList) {
+        List<SysRoleMenu> result = new ArrayList<>(menuIdList.size());
+        for (Long menuId : menuIdList) {
+            SysRoleMenu roleMenu = new SysRoleMenu();
+            Long maxId = remoteObjService.getMaxId(TableNameConst.SYS_ROLE_MENU, TableNameConst.ID);
+            roleMenu.setId(maxId);
+            roleMenu.setRoleId(roleId);
+            roleMenu.setMenuId(menuId);
+            result.add(roleMenu);
+        }
+
+        return result;
     }
 }

+ 9 - 2
boman-modules/boman-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml

@@ -17,6 +17,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<delete id="deleteRoleMenuByRoleId" parameterType="Long">
 		delete from sys_role_menu where role_id=#{roleId}
 	</delete>
+
+	<delete id="deleteByRoleIdList" parameterType="Long">
+		delete from sys_role_menu where role_id in
+		<foreach collection="roleIdList" item="roleId" open="(" separator="," close=")">
+			#{roleId}
+		</foreach>
+	</delete>
 	
 	<delete id="deleteRoleMenu" parameterType="Long">
  		delete from sys_role_menu where role_id in
@@ -27,8 +34,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	
 	<insert id="batchRoleMenu">
 		insert into sys_role_menu(id, role_id, menu_id) values
-		<foreach item="item" index="index" collection="list" separator=",">
-			(#{item.id},#{item.roleId},#{item.menuId})
+		<foreach item="item" collection="roleMenuList" separator=",">
+			(#{item.id}, #{item.roleId}, #{item.menuId})
 		</foreach>
 	</insert>
 	

+ 1 - 0
ruoyi-ui/src/components/HistoricalProcess/index.vue

@@ -374,6 +374,7 @@ export default {
   .table {
     flex: 1;
     display: flex;
+    color:#d81d04;
   }
 }
 </style>

+ 8 - 11
ruoyi-ui/src/views/system/editing/index.vue

@@ -3,7 +3,11 @@
     <!-- 头部 -->
     <div class="eniting_header">
       <!-- <p class="p">表编辑</p> -->
-      <div class="imge_tab"><img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew"></div>
+      <div class="imge_tab">
+        <img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew == 2" >
+        <img src="../../../assets/images/pic_sy_shz.png" alt="" v-if="imgShoew == 4" >
+        <img src="../../../assets/images/pic_sy_ybh.png" alt="" v-if="imgShoew == 3" >
+      </div>
       <div class="ppl">
         <p v-for="(item,index) in tabldie" :key="index" @click="enditTab(index)">
           <img src="../../../assets/images/icon_tbtab_normal.png" alt="" class="index_headerImg" v-if="num !== index">
@@ -95,7 +99,7 @@
         },
         jeigneu: [],
         jeigneutwo: [],
-        imgShoew:false
+        imgShoew:1
       };
     },
     mounted() {
@@ -196,15 +200,8 @@
           // 图片的显示隐藏
           if(this.queryData.showData.length !==0){
            this.queryData.showData.filter(route => {
-               if(route.hrChildren.length !== 0){
-                 if(route.hrChildren[0].readonly !== null){
-                   if(route.hrChildren[0].readonly == true){
-                         this.imgShoew = true
-                   }else{
-                     this.imgShoew = false
-                   }
-                 }
-
+               if(route.cssClass !== null){
+                 this.imgShoew = route.cssClass
                }
            })
           }

+ 8 - 11
ruoyi-ui/src/views/system/form/index.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="tabForm">
     <div class="tabForm_header">
-      <div class="imge_tab"><img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew"></div>
+      <div class="imge_tab">
+        <img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew == 2" >
+        <img src="../../../assets/images/pic_sy_shz.png" alt="" v-if="imgShoew == 4" >
+        <img src="../../../assets/images/pic_sy_ybh.png" alt="" v-if="imgShoew == 3" >
+      </div>
       <div class="table_headerBtun" v-if="queryData.buttonList">
         <el-button type="primary" size="small" plain @click="handleQuery(item)" v-for="(item,index) in queryData.buttonList.split('')" :key="index">{{item | btnConversion}}</el-button>
         <el-button type="primary" size="small" plain @click="handleQuery('sx')">刷新</el-button>
@@ -153,7 +157,7 @@
           table:'',
           idList:[]
         },
-        imgShoew:false
+        imgShoew:1
       };
     },
     filters:{
@@ -242,15 +246,8 @@
           // 图片的显示隐藏
           if(this.queryData.showData.length !==0){
            this.queryData.showData.filter(route => {
-               if(route.hrChildren.length !== 0){
-                 if(route.hrChildren[0].readonly !== null){
-                  if(route.hrChildren[0].readonly == true){
-                        this.imgShoew = true
-                  }else{
-                    this.imgShoew = false
-                  }
-                 }
-
+               if(route.cssClass !== null){
+                 this.imgShoew = route.cssClass
                }
            })
           }

+ 2 - 0
ruoyi-ui/src/views/system/surface/index.vue

@@ -25,6 +25,8 @@
             <template slot-scope="scope">
               <img class="img_icon" v-if="item.htmlType=='imageUpload' && scope.row[scope.column.property]" @click="imgBtn(JSON.parse(scope.row[scope.column.property])[0].url)"
                 :src="JSON.parse(scope.row[scope.column.property])[0].url" alt="">
+              <!-- :style="scope.row.list_class" scope.row[scope.column.property] -->
+              <span  :style="scope.row.list_class" v-else-if="item.columnComment == '状态' || item.columnComment == '提交' " >{{ scope.row[scope.column.property] }}</span>
               <span  v-else>{{ scope.row[scope.column.property] }}</span>
             </template>
           </el-table-column>

+ 9 - 9
ruoyi-ui/src/views/system/table/index.vue

@@ -3,7 +3,11 @@
     <div class="table_header">
       <!-- <p>单表</p>
       <el-divider></el-divider> -->
-      <div class="imge_tab"><img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew" ></div>
+      <div class="imge_tab">
+        <img src="../../../assets/images/pic_sy_ytj.png" alt="" v-if="imgShoew == 2" >
+         <img src="../../../assets/images/pic_sy_shz.png" alt="" v-if="imgShoew == 4" >
+          <img src="../../../assets/images/pic_sy_ybh.png" alt="" v-if="imgShoew == 3" >
+      </div>
       <div class="table_headerBtun" v-if="queryData.buttonList">
         <el-button type="primary" size="mini" plain v-for="(item,index) in jeigneutwo" :key="index" @click="handleQuery(item)">{{item}}</el-button>
       </div>
@@ -85,7 +89,7 @@
         jeigneutwo:[],
         xidugje:0,
         tijeq:0,
-        imgShoew:false
+        imgShoew:0
       };
     },
     // filters:{
@@ -285,13 +289,9 @@
          // 图片的显示隐藏
          if(this.queryData.showData.length !==0){
           this.queryData.showData.filter(route => {
-              if(route.hrChildren.length !== 0){
-                 if(route.hrChildren[0].readonly == true){
-                       this.imgShoew = true
-                 }else{
-                   this.imgShoew = false
-                 }
-              }
+            if(route.cssClass !== null){
+              this.imgShoew = route.cssClass
+            }
           })
          }
         })