sr il y a 4 ans
Parent
commit
dc3ce7483a
38 fichiers modifiés avec 1097 ajouts et 148 suppressions
  1. 16 1
      boman-api/boman-api-system/src/main/java/com/boman/system/api/domain/SysMenu.java
  2. 6 0
      boman-api/boman-domain/pom.xml
  3. 13 0
      boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java
  4. 72 2
      boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java
  5. 3 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/FormDataConstant.java
  6. 18 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/GlobalBtn.java
  7. 13 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/TableNameConst.java
  8. 54 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/RoleMenuDto.java
  9. 8 0
      boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/obj/ObjectUtils.java
  10. 13 1
      boman-modules/boman-gen/src/main/java/com/boman/gen/service/LoadTableServerImpl.java
  11. 16 0
      boman-modules/boman-system/src/main/java/com/boman/system/controller/SysMenuController.java
  12. 10 3
      boman-modules/boman-system/src/main/java/com/boman/system/controller/SysRoleMenuController.java
  13. 10 1
      boman-modules/boman-system/src/main/java/com/boman/system/mapper/SysRoleMenuMapper.java
  14. 13 2
      boman-modules/boman-system/src/main/java/com/boman/system/service/ISysMenuService.java
  15. 21 4
      boman-modules/boman-system/src/main/java/com/boman/system/service/impl/ISysRoleMenuService.java
  16. 117 22
      boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java
  17. 86 8
      boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysRoleMenuServiceImpl.java
  18. 9 2
      boman-modules/boman-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
  19. 34 13
      boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java
  20. 0 1
      boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java
  21. 24 8
      boman-web-core/src/main/java/com/boman/web/core/utils/HandlerFormDataUtils.java
  22. 1 1
      ruoyi-ui/package.json
  23. BIN
      ruoyi-ui/src/assets/images/pic_sy_shz.png
  24. BIN
      ruoyi-ui/src/assets/images/pic_sy_ybh.png
  25. BIN
      ruoyi-ui/src/assets/images/pic_sy_ytj.png
  26. 11 11
      ruoyi-ui/src/components/FlowChartShow/index.vue
  27. 2 1
      ruoyi-ui/src/components/FormItemComponent/index.vue
  28. 14 8
      ruoyi-ui/src/components/HistoricalProcess/index.vue
  29. 1 1
      ruoyi-ui/src/components/ItemComponent/index.vue
  30. 9 6
      ruoyi-ui/src/components/MutipleSelectPop/index.vue
  31. 9 6
      ruoyi-ui/src/components/mutipleSelectPop/index.vue
  32. 9 3
      ruoyi-ui/src/components/todoProcess/index.vue
  33. 321 0
      ruoyi-ui/src/props/index.js
  34. 123 0
      ruoyi-ui/src/utils/layoutAlgorithm.js
  35. 9 12
      ruoyi-ui/src/views/system/editing/index.vue
  36. 9 12
      ruoyi-ui/src/views/system/form/index.vue
  37. 9 5
      ruoyi-ui/src/views/system/surface/index.vue
  38. 14 14
      ruoyi-ui/src/views/system/table/index.vue

+ 16 - 1
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;
 
@@ -75,6 +75,21 @@ public class SysMenu extends BaseEntity
      */
     private String sysTableName;
 
+    /**
+     * true 此表中有此菜单并且选中
+     * false 此表中有此菜单,但是未选择
+     * 0 此表中无此菜单
+     */
+    private List<JSONObject> containsHead;
+
+    public List<JSONObject> getContainsHead() {
+        return containsHead;
+    }
+
+    public void setContainsHead(List<JSONObject> containsHead) {
+        this.containsHead = containsHead;
+    }
+
     public String getSysTableName() {
         return sysTableName;
     }

+ 6 - 0
boman-api/boman-domain/pom.xml

@@ -21,6 +21,12 @@
             <artifactId>boman-common-core</artifactId>
             <version>2.5.0-SNAPSHOT</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 13 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java

@@ -163,6 +163,19 @@ public class GenTableColumn extends BaseEntity
 
     private List<SysFile> annex;
 
+    /**
+     * 前端单对象展示样式
+     */
+    private String cssClass;
+
+    public String getCssClass() {
+        return cssClass;
+    }
+
+    public void setCssClass(String cssClass) {
+        this.cssClass = cssClass;
+    }
+
     public List<SysFile> getAnnex() {
         return annex;
     }

+ 72 - 2
boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java

@@ -1,22 +1,35 @@
 package com.boman.domain;
 
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @author tjf
  * @Date: 2021/04/22/15:16
  */
 public enum RoleEnum {
 
+    /** 新增 */
     A("A","新增"),
+    /** 修改 */
     M("M","修改"),
+    /** 删除 */
     D("D","删除"),
+    /** 查询 */
     Q("Q","查询"),
+    /** 提交 */
     S("S","提交"),
+    /** 反提交 */
     U("U","反提交"),
+    /** 导入 */
     I("I","导入"),
+    /** 导出 */
     E("E","导出");
 
-    private String role;
-    private String name;
+    private final String role;
+    private final String name;
 
     RoleEnum(String role, String name) {
         this.role = role;
@@ -46,4 +59,61 @@ public enum RoleEnum {
         }
         return null;
     }
+
+    /**
+     * 功能描述: 拿到所有的名称 eg: 新增、修改.....
+     *
+     * @param
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<String> names(){
+        RoleEnum[] values = RoleEnum.values();
+        return Arrays.stream(values).map(RoleEnum::getName).collect(Collectors.toList());
+    }
+
+    /**
+     * 功能描述: 拿到所有的roles, 顺序很重要
+     * eg: A、M.....
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<String> roles(){
+        RoleEnum[] values = RoleEnum.values();
+        return Arrays.stream(values).map(RoleEnum::getRole).collect(Collectors.toList());
+    }
+
+    /**
+     * 功能描述: 拿到所有的roles eg: A、M.....
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<Map<String, String>> all() {
+        RoleEnum[] values = RoleEnum.values();
+        List<Map<String, String>> result = new ArrayList<>(values.length);
+        for (RoleEnum value : values) {
+            Map<String, String> map = new HashMap<>(2);
+            map.put("name", value.name);
+            map.put("role", value.role);
+            result.add(map);
+        }
+        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;
+    }
 }

+ 3 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/FormDataConstant.java

@@ -186,4 +186,7 @@ public class FormDataConstant {
     public static final String BLUR = "blur";
     public static final String REQUIRED = "required";
 
+    /** 冒号 */
+    public static final String COLON = ":";
+
 }

+ 18 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/GlobalBtn.java

@@ -0,0 +1,18 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 15:28
+ **/
+public class GlobalBtn {
+
+    public static final String A = "A";
+    public static final String M = "M";
+    public static final String D = "D";
+    public static final String Q = "Q";
+    public static final String S = "S";
+    public static final String U = "U";
+    public static final String I = "I";
+    public static final String E = "E";
+
+}

+ 13 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/TableNameConst.java

@@ -0,0 +1,13 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 09:21
+ **/
+public class TableNameConst {
+
+
+    public static final String ID = "id";
+
+    public static final String SYS_ROLE_MENU = "sys_role_menu";
+}

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

@@ -0,0 +1,54 @@
+package com.boman.domain.dto;
+
+
+
+import lombok.Data;
+
+import java.util.List;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.domain.constant.FormDataConstant.COLON;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 17:25
+ **/
+@Data
+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, "权限标识为空");
+        String[] split = perms.split(COLON);
+        assert split.length == 2;
+        // A
+        return split[1];
+    }
+
+    /**
+     * 功能描述: 返回tableName
+     *
+     * @param perms perms
+     * @return java.lang.String
+     */
+    public static String getTableNameFromPerms(String perms) {
+        // sys_user:A
+        requireNonNull(perms, "权限标识为空");
+        String[] split = perms.split(COLON);
+        assert split.length == 2;
+        // sys_user
+        return split[0];
+    }
+
+}

+ 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]);

+ 13 - 1
boman-modules/boman-gen/src/main/java/com/boman/gen/service/LoadTableServerImpl.java

@@ -1,5 +1,6 @@
 package com.boman.gen.service;
 
+import com.boman.common.core.utils.StringUtils;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.redis.RedisKey;
@@ -7,7 +8,9 @@ import com.boman.common.redis.service.RedisService;
 import com.boman.domain.GenTable;
 import com.boman.domain.GenTableColumn;
 import com.boman.domain.GenTableRelation;
+import com.boman.domain.SysDictData;
 import com.boman.domain.constant.FormDataConstant;
+import com.boman.system.api.RemoteDictDataService;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.collections4.CollectionUtils;
@@ -37,6 +40,8 @@ public class LoadTableServerImpl implements ILoadTableServer{
     private RedisService redisService;
     @Autowired
     private IGenTableRelationService genTableRelationService;
+    @Autowired
+    private RemoteDictDataService remoteDictDataService;
 
 
     @Override
@@ -133,12 +138,19 @@ public class LoadTableServerImpl implements ILoadTableServer{
                 if (table.getId().equals(tableColumn.getTableId())) {
                     // 存一个tableName留作备用
                     tableColumn.setTableName(table.getTableName());
+                    String dictType = tableColumn.getDictType();
+                    if(StringUtils.isNotBlank(dictType)){
+                        //查询对应的字典数据集合
+                        List<SysDictData> sysDictData = remoteDictDataService.listByType(dictType);
+                        if (sysDictData.size() > 0){
+                            tableColumn.setSysDictData(sysDictData);
+                        }
+                    }
                     // 把外键信息存进去,留着查询的时候用
                     packFkInfo(tableColumn);
                     columnList.add(tableColumn);
                 }
             }
-
             table.setColumns(columnList);
             table.setIsContainsBlob(isContainsBlob(columnList));
             redisService.setCacheObject(RedisKey.TABLE_INFO + table.getTableName(), table, 12L, TimeUnit.DAYS);

+ 16 - 0
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysMenuController.java

@@ -100,10 +100,26 @@ public class SysMenuController extends BaseController
         return ajax;
     }
 
+    /**
+     * 功能描述: 根据菜单id,找到此菜单以及子菜单下所有的叶子节点
+     *
+     * @param menuId menuId
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
     @GetMapping(value = "/allLeafNodeById/{menuId}")
     public AjaxResult allLeafNodeById(@PathVariable("menuId") Long menuId) {
         return AjaxResult.success(menuService.allLeafNodeById(menuId));
     }
+    /**
+     * 功能描述: 根据菜单id,找到此菜单以及子菜单下所有的叶子节点, 同时匹配叶子结点对应的头部的规则
+     *
+     * @param menuId menuId
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
+    @GetMapping(value = "/listMenus/{menuId}")
+    public AjaxResult listMenus(@PathVariable("menuId") Long menuId) {
+        return AjaxResult.success(menuService.listMenus(menuId));
+    }
 
     /**
      * 新增菜单

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

@@ -1,7 +1,7 @@
 package com.boman.system.controller;
 
 import com.boman.common.core.web.domain.AjaxResult;
-import com.boman.system.domain.SysRoleMenu;
+import com.boman.domain.dto.RoleMenuDto;
 import com.boman.system.service.impl.ISysRoleMenuService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,8 +25,15 @@ public class SysRoleMenuController {
 
     @Resource
     private ISysRoleMenuService service;
+
+    /**
+     * 功能描述: 批量保存roleMenu
+     *
+     * @param dtos dtos
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
     @PostMapping
-    public AjaxResult list(@RequestBody List<SysRoleMenu> roleMenuList) {
-        return AjaxResult.success(service.saveList(roleMenuList));
+    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);
 }

+ 13 - 2
boman-modules/boman-system/src/main/java/com/boman/system/service/ISysMenuService.java

@@ -1,6 +1,7 @@
 package com.boman.system.service;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 
@@ -35,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查询权限
      * 
@@ -52,10 +62,10 @@ public interface ISysMenuService
     public List<SysMenu> selectMenuTreeById(Long id);
 
     /**
-     * 根据用户ID查询菜单树信息
+     * 功能描述: 根据菜单id,找到此菜单以及子菜单下所有的叶子节点
      *
      * @param menuId menuId
-     * @return 菜单列表
+     * @return java.util.List<com.boman.system.api.domain.SysMenu>
      */
     List<SysMenu> allLeafNodeById(Long menuId);
 
@@ -164,4 +174,5 @@ public interface ISysMenuService
      */
     public String checkMenuNameUnique(SysMenu menu);
 
+    Map<String, Object> listMenus(Long menuId);
 }

+ 21 - 4
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/ISysRoleMenuService.java

@@ -1,5 +1,6 @@
 package com.boman.system.service.impl;
 
+import com.boman.domain.dto.RoleMenuDto;
 import com.boman.system.domain.SysRoleMenu;
 
 import java.util.List;
@@ -11,13 +12,29 @@ import java.util.List;
  */
 public interface ISysRoleMenuService {
 
+   /**
+    * 功能描述: 批量保存roleMenu
+    *
+    * @param dtos dtos
+    * @return int
+    */
+    int saveList(List<RoleMenuDto> dtos);
+
+    /**
+     * 功能描述: 根据roleIdList删除
+     *
+     * @param roleIdList  roleIdList
+     * @return int
+     */
+    int deleteByRoleIdList(List<Long> roleIdList);
+
     /**
-     * 功能描述: 批量保存roleMenu
+     * 功能描述: 批量保存roleMenuList
      *
-     * @param roleMenuList roleMenuList
-     * @return boolean
+     * @param roleMenuList  roleMenuList
+     * @return int
      */
-    int saveList(List<SysRoleMenu> roleMenuList);
+    int batchRoleMenu(List<SysRoleMenu> roleMenuList);
 
 
 }

+ 117 - 22
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -3,10 +3,17 @@ package com.boman.system.service.impl;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import com.boman.common.core.utils.obj.ObjectUtils;
+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;
+import com.boman.domain.GenTable;
+import com.boman.domain.RoleEnum;
+import com.boman.domain.constant.GlobalBtn;
+import com.boman.domain.dto.RoleMenuDto;
 import com.boman.system.api.domain.SysMenu;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.boman.common.core.constant.UserConstants;
@@ -22,6 +29,11 @@ import com.boman.system.mapper.SysRoleMapper;
 import com.boman.system.mapper.SysRoleMenuMapper;
 import com.boman.system.service.ISysMenuService;
 
+import javax.annotation.Resource;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
+import static com.boman.domain.constant.FormDataConstant.COLON;
+
 /**
  * 菜单 业务层处理
  *
@@ -39,6 +51,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
 
     @Autowired
     private SysRoleMenuMapper roleMenuMapper;
+    @Resource
+    private RedisService redisService;
 
     /**
      * 根据用户查询系统菜单列表
@@ -111,37 +125,38 @@ public class SysMenuServiceImpl implements ISysMenuService {
     }
 
     /**
-     * 根据用户ID查询菜单树信息
+     * 功能描述: 根据菜单id,找到此菜单以及子菜单下所有的叶子节点
      *
      * @param menuId menuId
-     * @return 菜单列表
+     * @return java.util.List<com.boman.system.api.domain.SysMenu>
      */
     @Override
     public List<SysMenu> allLeafNodeById(Long menuId) {
-        List<SysMenu> tempList = Lists.newArrayListWithCapacity(16);
         SysMenu menu = selectMenuById(menuId);
         List<SysMenu> menus = menuMapper.selectMenuList(new SysMenu());
-        List<SysMenu> sysMenus = recursionList(menus, menu, tempList);
-        return ObjectUtils.filter(sysMenus, menu1 -> SysMenu.BUTTON.equals(menu1.getMenuType()));
+        List<SysMenu> tempList = Lists.newArrayListWithCapacity(16);
+        recursionList(menus, menu, tempList);
+        // 把父亲去掉
+        if (tempList.size() > 1) {
+            tempList.remove(0);
+        }
+
+        return tempList;
     }
 
-    private List<SysMenu> recursionList(List<SysMenu> menus, SysMenu menu, List<SysMenu> tempList) {
-        int child = 0;
+    private void recursionList(List<SysMenu> menus, SysMenu menu, List<SysMenu> tempList) {
         // 得到子节点列表
         List<SysMenu> childList = getChildList(menus, menu);
+        if (isEmpty(childList)) {
+            return;
+        }
+
+        tempList.add(menu);
         for (SysMenu tChild : childList) {
             if (hasChild(menus, tChild)) {
                 recursionList(menus, tChild, tempList);
-            } else {
-                child++;
             }
         }
-
-        if (child == childList.size() && childList.size() != 0) {
-            tempList.addAll(childList);
-        }
-
-        return tempList;
     }
 
     /**
@@ -207,7 +222,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
         List<SysMenu> returnList = new ArrayList<>();
-        List<Long> allMenuId = ObjectUtils.map(menus, SysMenu::getId);
+        List<Long> allMenuId = map(menus, SysMenu::getId);
         for (SysMenu menu : menus) {
             // 如果是顶级节点, 遍历该父节点的所有子节点
             if (!allMenuId.contains(menu.getParentId())) {
@@ -228,7 +243,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public List<SysMenu> buildMenuTreeNotAddLeafNode(List<SysMenu> menus) {
         List<SysMenu> returnList = new ArrayList<>();
-        List<Long> allMenuId = ObjectUtils.map(menus, SysMenu::getId);
+        List<Long> allMenuId = map(menus, SysMenu::getId);
         for (SysMenu menu : menus) {
             // 如果是顶级节点, 遍历该父节点的所有子节点
             if (!allMenuId.contains(menu.getParentId())) {
@@ -497,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);
             }
         }
@@ -517,4 +537,79 @@ public class SysMenuServiceImpl implements ISysMenuService {
     private boolean hasChild(List<SysMenu> list, SysMenu t) {
         return getChildList(list, t).size() > 0;
     }
+
+    @Override
+    public Map<String, Object> listMenus(Long menuId) {
+        SysMenu menu = selectMenuById(menuId);
+        List<SysMenu> menus = menuMapper.selectMenuList(new SysMenu());
+        List<SysMenu> tempList = Lists.newArrayListWithCapacity(16);
+        recursionList(menus, menu, tempList);
+        // 把父亲去掉
+        if (tempList.size() > 1) {
+            tempList.remove(0);
+        }
+
+        Map<String, Object> result = Maps.newHashMapWithExpectedSize(2);
+        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<JSONObject> containsHead = RoleEnum.initData();
+            List<SysMenu> childList = getChildList(menus, sysMenu);
+            for (SysMenu childMenu : childList) {
+                String btn = RoleMenuDto.getBtnFromPerms(childMenu.getPerms());
+                String tableName = RoleMenuDto.getTableNameFromPerms(childMenu.getPerms());
+                GenTable genTable = redisService.getCacheObject(RedisKey.TABLE_INFO + tableName);
+                String menuRole = genTable.getMenuRole();
+                if (menuRole.contains(btn)) {
+                    switchBtn(containsHead, btn, true);
+                } else {
+                    switchBtn(containsHead, btn, false);
+                }
+            }
+
+            sysMenu.setContainsHead(containsHead);
+        }
+        result.put("sysMenus", tempList);
+        return result;
+    }
+
+    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, jsonObject);
+                break;
+            case GlobalBtn.M:
+                containsHead.set(1, jsonObject);
+                break;
+            case GlobalBtn.D:
+                containsHead.set(2, jsonObject);
+                break;
+            case GlobalBtn.Q:
+                containsHead.set(3, jsonObject);
+                break;
+            case GlobalBtn.S:
+                containsHead.set(4, jsonObject);
+                break;
+            case GlobalBtn.U:
+                containsHead.set(5, jsonObject);
+                break;
+            case GlobalBtn.I:
+                containsHead.set(6, jsonObject);
+                break;
+            case GlobalBtn.E:
+                containsHead.set(7, jsonObject);
+                break;
+            default:
+                break;
+        }
+    }
+
 }

+ 86 - 8
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysRoleMenuServiceImpl.java

@@ -1,16 +1,22 @@
 package com.boman.system.service.impl;
 
+import com.boman.domain.constant.TableNameConst;
+import com.boman.domain.dto.RoleMenuDto;
+import com.boman.system.api.domain.SysMenu;
 import com.boman.system.domain.SysRoleMenu;
 import com.boman.system.mapper.SysRoleMenuMapper;
+import com.boman.system.service.ISysMenuService;
 import com.boman.web.core.api.RemoteObjService;
 import org.slf4j.Logger;
 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.*;
 
 /**
  * @author shiqian
@@ -25,23 +31,95 @@ public class SysRoleMenuServiceImpl implements ISysRoleMenuService{
     private SysRoleMenuMapper mapper;
     @Resource
     private RemoteObjService remoteObjService;
+    @Resource
+    private ISysMenuService menuService;
+
     /**
      * 功能描述: 批量保存roleMenu
      *
-     * @param roleMenuList roleMenuList
+     * @param dto dto
      * @return int
      */
     @Override
-    public int saveList(List<SysRoleMenu> roleMenuList) {
-        if (isEmpty(roleMenuList)) {
-            return 0;
+    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);
         }
 
-        for (SysRoleMenu sysRoleMenu : roleMenuList) {
-            Long maxId = remoteObjService.getMaxId("sys_role_menu", "id");
-            sysRoleMenu.setId(maxId);
+        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);
     }
+
+    /**
+     * 功能描述: 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>
 	

+ 34 - 13
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -5,19 +5,23 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.constant.GenConstants;
 import com.boman.common.core.utils.SecurityUtils;
+import com.boman.common.core.utils.StringUtils;
 import com.boman.common.core.utils.array.ArrayUtils;
 import com.boman.common.core.utils.collection.CollectionUtils;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.redis.RedisKey;
 import com.boman.common.redis.service.RedisService;
+import com.boman.domain.GenTable;
+import com.boman.domain.GenTableColumn;
+import com.boman.domain.SysDictData;
 import com.boman.domain.constant.*;
 import com.boman.gen.api.RemoteGenTableColumnService;
 import com.boman.gen.api.RemoteGenTableService;
-import com.boman.domain.GenTable;
-import com.boman.domain.GenTableColumn;
-import com.boman.system.api.RemoteDictDataService;
-import com.boman.web.core.domain.*;
+import com.boman.web.core.domain.ActionType;
+import com.boman.web.core.domain.FormDataDto;
+import com.boman.web.core.domain.RowResult;
+import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.service.delete.IBaseDeleteService;
 import com.boman.web.core.service.save.IBaseSaveService;
 import com.boman.web.core.service.select.IBaseSelectService;
@@ -35,7 +39,10 @@ import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.sql.Timestamp;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 
@@ -70,8 +77,6 @@ public class TableServiceCmdService {
     @Resource
     private RestTemplate restTemplate;
     @Resource
-    private RemoteDictDataService remoteDictDataService;
-    @Resource
     private RemoteGenTableService remoteGenTableService;
     @Resource
     private RemoteGenTableColumnService remoteGenTableColumnService;
@@ -119,7 +124,7 @@ public class TableServiceCmdService {
 
     private void handlerInputType(JSONObject commitData, List<GenTableColumn> columns) {
         for (Map.Entry<String, Object> entry : commitData.entrySet()) {
-            Object value =entry.getValue();
+            Object value = entry.getValue();
             for (GenTableColumn column : columns) {
                 if (entry.getKey().equals(column.getColumnName())
                         && ArrayUtils.arraysContains(GenConstants.COLUMNTYPE_NUMBER, getDbType(column.getColumnType()))) {
@@ -287,6 +292,9 @@ public class TableServiceCmdService {
         // 处理blob
         handleBlob(jsonList, genTable.getIsContainsBlob());
         List<GenTableColumn> parentColumns = filterHrAndSort(columns);
+
+        //接收可能存在的cssClass
+        String cssClass = null;
         // 处理成hr的形式
         for (GenTableColumn hrColumn : parentColumns) {
             List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
@@ -297,11 +305,19 @@ public class TableServiceCmdService {
                     String htmlType = column.getHtmlType();
                     String dictType = column.getDictType();
                     if (containsKeyIgnoreCase(json, columnName)) {
+                        column.setColumnValue(json.get(columnName));
                         // sysDict
                         if (isNotEmpty(dictType)) {
-                            // 既要sysDictData还得要columnValue
-                            column.setSysDictData(listSysDictDataByType(dictType));
-                            column.setColumnValue(json.get(columnName));
+                            String value = json.getString(columnName);
+                            List<SysDictData> sysDictData = column.getSysDictData();
+                            if (sysDictData != null && sysDictData.size() > 0) {
+                                for (SysDictData sysDictDatum : sysDictData) {
+                                    if (sysDictDatum.getDictValue().equals(value)) {
+                                        cssClass = sysDictDatum.getCssClass();
+                                        break;
+                                    }
+                                }
+                            }
                         }
                         // dateTime
                         if (NEED_CONVERT_DATE_LIST.contains(columnType)) {
@@ -315,8 +331,7 @@ public class TableServiceCmdService {
                         if (HTML_IMAGE_UPLOAD.equalsIgnoreCase(htmlType) || HTML_FILE_UPLOAD.equalsIgnoreCase(htmlType)) {
                             column.setAnnex(getAnnex(json.getString(columnName)));
                         }
-
-                        column.setReadonly(SubmitConstant.STATUS.equals(columnName));
+                        //column.setReadonly(SubmitConstant.STATUS.equals(columnName));
                     }
 
                     children.add(column);
@@ -325,6 +340,12 @@ public class TableServiceCmdService {
             hrColumn.setHrChildren(children);
         }
 
+        //给基本属性和日志信息添加上cssClass
+        if (StringUtils.isNotBlank(cssClass)){
+            for (GenTableColumn parentColumn : parentColumns) {
+                parentColumn.setCssClass(cssClass);
+            }
+        }
         JSONObject result = new JSONObject();
         result.put(SHOW_DATA, parentColumns);
         result.put(BUTTON_LIST, getButton(tableName));

+ 0 - 1
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -104,7 +104,6 @@ public class ColumnUtils {
                     returnData.add(allColumn);
                 }
             }
-
         }
 
         return returnData;

+ 24 - 8
boman-web-core/src/main/java/com/boman/web/core/utils/HandlerFormDataUtils.java

@@ -46,15 +46,31 @@ public class HandlerFormDataUtils {
             return;
         }
 
-        RemoteDictDataService remoteDictDataService = SpringUtils.getBean(RemoteDictDataService.class);
         for (JSONObject jsonObject : result) {
-            for (GenTableColumn column : allColumns) {
-                String dictType = column.getDictType();
-                String columnName = column.getColumnName();
-                if (containsKeyIgnoreCase(jsonObject, columnName) && isNotEmpty(dictType)) {
-                    // 列表需要字典值的dictLabel, 不放入sysDictData
-                    String dictLabel = remoteDictDataService.selectDictLabel(dictType, jsonObject.getString(columnName));
-                    jsonObject.put(columnName, dictLabel);
+            //获取到所有rows查询字段的值
+            Set<String> strings = jsonObject.keySet();
+
+            if ( strings.size() == 0){
+                break;
+            }
+            for (String string : strings) {
+                for (GenTableColumn column : allColumns) {
+                    String dictType = column.getDictType();
+                    String columnName = column.getColumnName();
+                    if (string.equals(columnName) && isNotEmpty(dictType)) {
+                        // 列表需要字典值的dictLabel, 不放入sysDictData
+                        List<SysDictData> sysDictData = column.getSysDictData();
+                        //获取到字段的值
+                        String value = String.valueOf(jsonObject.get(string));
+                        if (sysDictData != null && sysDictData.size() > 0){
+                            for (SysDictData sysDictDatum : sysDictData) {
+                                if (sysDictDatum.getDictValue().equals(value)) {
+                                    jsonObject.put(columnName, sysDictDatum.getDictLabel());
+                                    jsonObject.put("list_class", sysDictDatum.getListClass());
+                                }
+                            }
+                        }
+                    }
                 }
             }
         }

+ 1 - 1
ruoyi-ui/package.json

@@ -38,7 +38,7 @@
   "dependencies": {
     "@riophae/vue-treeselect": "0.4.0",
     "axios": "0.21.0",
-    "burgeon-ui": "^1.0.46",
+    "burgeon-ui": "1.0.46",
     "clipboard": "2.0.6",
     "core-js": "3.8.1",
     "echarts": "4.9.0",

BIN
ruoyi-ui/src/assets/images/pic_sy_shz.png


BIN
ruoyi-ui/src/assets/images/pic_sy_ybh.png


BIN
ruoyi-ui/src/assets/images/pic_sy_ytj.png


+ 11 - 11
ruoyi-ui/src/components/FlowChartShow/index.vue

@@ -217,18 +217,18 @@ export default {
       let id = this.instanceId?this.instanceId:this.$route.query.instanceId
       addGenflowshow({instanceId:id})
         .then(res => {
-          if(res.data.resultCode === 0){
-            let guiStyle = res.data.data.guiStyle?JSON.parse(res.data.data.guiStyle):{}
-            let approvalHistory = res.data.data.guiValue?res.data.data.guiValue:[]
+          if(res.resultCode === 0){
+            let guiStyle = res.data.guiStyle?JSON.parse(res.data.guiStyle):{}
+            let approvalHistory = res.data.guiValue?res.data.guiValue:[]
             this.myDiagram = Object.assign(this.myDiagram,guiStyle)
             this.approvalHistory = approvalHistory
-            if(res.data.data.showNodes.indexOf(res.data.data.currentNode) >= 0){
-              res.data.data.showNodes.splice(res.data.data.showNodes.findIndex(item => item === res.data.data.currentNode), 1)
+            if(res.data.showNodes.indexOf(res.data.currentNode) >= 0){
+              res.data.showNodes.splice(res.data.showNodes.findIndex(item => item === res.data.data.currentNode), 1)
             }
-            res.data.data.showNodes.push(res.data.data.currentNode)
-            this.showNodes = res.data.data.showNodes
-            this.processStatus = res.data.data.processStatus
-            switch(res.data.data.processStatus){
+            res.data.showNodes.push(res.data.currentNode)
+            this.showNodes = res.data.showNodes
+            this.processStatus = res.data.processStatus
+            switch(res.data.processStatus){
               case 0:
                 this.processStyle = {
                   color:'#C8C8C8'
@@ -257,9 +257,9 @@ export default {
                 };
                 break;
             }
-            this.processStatusName = res.data.data.processStatusName
+            this.processStatusName = res.data.processStatusName
             this.myDisplay = new FlowDisplay('myFlowDesignerDiv');
-            this.showFlowPath(this.myDisplay,res.data.data.currentNode)
+            this.showFlowPath(this.myDisplay,res.data.currentNode)
           }
         });
 

+ 2 - 1
ruoyi-ui/src/components/FormItemComponent/index.vue

@@ -28,7 +28,7 @@
 </template>
 <script>
 import Vue from "vue";
-import layoutAlgorithm from "@/api/layoutAlgorithm";
+import layoutAlgorithm from "../../utils/layoutAlgorithm.js";
 export default {
   name: "FormItemComponent",
   props: {
@@ -146,3 +146,4 @@ export default {
   grid-auto-rows: minmax(auto);
 }
 </style>
+

+ 14 - 8
ruoyi-ui/src/components/HistoricalProcess/index.vue

@@ -8,7 +8,7 @@
       :buttonType="false"
       @formChange="formChange"
     ></FormItemComponent>
-    <StandardTable
+    <StandardTabletwo
       class="table"
       :currentPage="searchData.page"
       :pageSize="searchData.pageSize"
@@ -16,7 +16,7 @@
       :columns="columns"
       :data="data"
       :standardTableEvent="standardTableEvent"
-    ></StandardTable>
+    ></StandardTabletwo>
 
     <!-- 详情弹框 -->
     <Modal
@@ -35,7 +35,7 @@
 <script>
 import FormItemComponent from "../FormItemComponent";
 import ItemComponent from "../ItemComponent";
-import StandardTable from "../StandardTable";
+import StandardTabletwo from "../StandardTabletwo";
 import FlowChartShow from "../FlowChartShow";
 // import { mapMutations } from "vuex";
 import {
@@ -45,7 +45,7 @@ import {
   } from "@/api/activiti/definition";
 export default {
   name: "HistoricalProcess",
-  components: { FormItemComponent, StandardTable, FlowChartShow },
+  components: { FormItemComponent, StandardTabletwo, FlowChartShow },
   props: {
     tabalive: { type: String, default: "" }
   },
@@ -273,10 +273,10 @@ export default {
     //业务关系下拉数据
     getselectOption() {
       addGenhistoricap().then(res => {
-        if (res.data.resultCode === 0) {
+        if (res.resultCode === 0) {
           this.formLists.forEach(outer => {
             if (outer.item.filed === "businessType") {
-              outer.item.options = res.data.data.relations.map(item => {
+              outer.item.options = res.data.relations.map(item => {
                 item.value = item.businesskey;
                 item.label = item.businessName;
                 return item;
@@ -317,10 +317,15 @@ export default {
       let obj = Object.assign({}, this.searchData);
       delete obj.updateTime;
       addGenhistorihistory(obj).then(res => {
-        if (res.data.resultCode === 0) {
-          let data = res.data.data;
+        if (res.resultCode === 0) {
+          let data = res.data;
           this.total = data.total;
           this.data = data.records;
+        }else{
+          this.$message({
+                   message: res.resultMsg,
+                   type: 'warning'
+                 });
         }
       });
     },
@@ -369,6 +374,7 @@ export default {
   .table {
     flex: 1;
     display: flex;
+    color:#d81d04;
   }
 }
 </style>

+ 1 - 1
ruoyi-ui/src/components/ItemComponent/index.vue

@@ -170,7 +170,7 @@
   </div>
 </template>
 <script>
-// import dataProp from "../config/props.config";
+import dataProp from "../../props/index.js";
 export default {
   name: "ItemComponent",
   props: {

+ 9 - 6
ruoyi-ui/src/components/MutipleSelectPop/index.vue

@@ -2,7 +2,7 @@
   <div class="MutipleSelectPop">
     <div class="dialog_left">
       <div class="left_top">
-        <Input
+       <Input
           @on-change="inputchange"
           @on-keydown="inputkeydown"
           search
@@ -690,8 +690,8 @@ export default {
       this.tableLoading = true;
       addGenmutiporuder( param).then(res => {
         this.tableLoading = false;
-        let data = res.data;
-        if (data.code === 0) {
+        let data = res;
+        if (res.code === 0) {
           if (data.data) {
             this.transferTbody(data.data);
           }
@@ -721,12 +721,14 @@ export default {
       this.tree_loading = true;
       addGenmutiportree().then(res => {
         this.tree_loading = false;
-        if (res.data.resultCode === 0) {
+        if (res.resultCode === 0) {
+          console.log(345678)
           this.treeNewData = [];
           let newArr = [];
           let root = {};
-          if (res.data.data.records.length > 0) {
-            res.data.data.records.forEach(item => {
+          if (res.data.records.length > 0) {
+            console.log(3456788)
+            res.data.records.forEach(item => {
               let tem = Object.assign(item);
               newArr.push(tem);
               if (
@@ -737,6 +739,7 @@ export default {
               }
             });
             this.treeNewData = this.arrayTransTree(newArr, "CP_C_ORGUP_ID");
+            console.log(this.treeNewData)
           }
           this.findUser({}); //显示所有的用户
         }

+ 9 - 6
ruoyi-ui/src/components/mutipleSelectPop/index.vue

@@ -2,7 +2,7 @@
   <div class="MutipleSelectPop">
     <div class="dialog_left">
       <div class="left_top">
-        <Input
+       <Input
           @on-change="inputchange"
           @on-keydown="inputkeydown"
           search
@@ -690,8 +690,8 @@ export default {
       this.tableLoading = true;
       addGenmutiporuder( param).then(res => {
         this.tableLoading = false;
-        let data = res.data;
-        if (data.code === 0) {
+        let data = res;
+        if (res.code === 0) {
           if (data.data) {
             this.transferTbody(data.data);
           }
@@ -721,12 +721,14 @@ export default {
       this.tree_loading = true;
       addGenmutiportree().then(res => {
         this.tree_loading = false;
-        if (res.data.resultCode === 0) {
+        if (res.resultCode === 0) {
+          console.log(345678)
           this.treeNewData = [];
           let newArr = [];
           let root = {};
-          if (res.data.data.records.length > 0) {
-            res.data.data.records.forEach(item => {
+          if (res.data.records.length > 0) {
+            console.log(3456788)
+            res.data.records.forEach(item => {
               let tem = Object.assign(item);
               newArr.push(tem);
               if (
@@ -737,6 +739,7 @@ export default {
               }
             });
             this.treeNewData = this.arrayTransTree(newArr, "CP_C_ORGUP_ID");
+            console.log(this.treeNewData)
           }
           this.findUser({}); //显示所有的用户
         }

+ 9 - 3
ruoyi-ui/src/components/todoProcess/index.vue

@@ -340,10 +340,10 @@ export default {
     //业务关系下拉数据
     getselectOption() {
       addGendefini().then(res => {
-        if (res.data.resultCode === 0) {
+        if (res.resultCode === 0) {
           this.formLists.forEach(outer => {
             if (outer.item.filed === "businessType") {
-              outer.item.options = res.data.data.relations.map(item => {
+              outer.item.options = res.data.relations.map(item => {
                 item.value = item.businesskey;
                 item.label = item.businessName;
                 return item;
@@ -367,6 +367,7 @@ export default {
         this.searchData.endTime = new Date(
           this.searchData.createTime[1]
         ).format("yyyy-MM-dd hh:mm");
+        console.log(this.searchData)
       } else {
         this.searchData.startTime = "";
         this.searchData.endTime = "";
@@ -384,6 +385,11 @@ export default {
           this.data = res.data.records;
           console.log(res.data.records,23456)
           // console.log(this.data,2345)
+        }else{
+          this.$message({
+                   message: res.resultMsg,
+                   type: 'warning'
+                 });
         }
       console.log(this.data,2345)
       });
@@ -423,7 +429,7 @@ export default {
       }
       // sendData.userId = this.userInfo.userId;
       addGendefinideal(sendData).then(res => {
-        let data = res.data;
+        let data = res;
         if (data.resultCode === 0) {
           this.queryLists();
           this.msgSuccess(data.resultMsg);

+ 321 - 0
ruoyi-ui/src/props/index.js

@@ -0,0 +1,321 @@
+// 输入框
+const input = {
+  // item 类型
+  type: 'input', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: '',
+  props: {
+    // 输入框类型,可选值为 text、password、textarea、url、email、date
+    type: 'text', // 必填!
+    // 是否显示清空按钮
+    clearable: false,
+    // 设置输入框为禁用状态
+    disabled: false,
+    // 设置输入框为只读
+    readonly: false,
+    // 文本域默认行数,仅在 textarea 类型下有效
+    rows: 4,
+    // 自适应内容高度,仅在 textarea 类型下有效,可传入对象,如 { minRows: 2, maxRows: 6 }
+    autosize: false,
+    // 将用户的输入转换为 Number 类型。在有正则的时候:1)该输入框为空的时候,值为空字符串。2)input方法不可用。
+    number: false,
+    // 自动获取焦点
+    autofocus: false,
+    // 原生的自动完成功能,可选值为 off 和 on
+    autocomplete: 'off',
+    // 占位文本
+    placeholder: '请输入',
+    // 输入框尺寸,可选值为large、small、default或者不设置
+    size: 'default',
+    // 最大输入长度
+    maxlength: null,
+    // 输入框尾部图标,仅在 text 类型下有效
+    icon: null,
+    // 输入框头部图标
+    prefix: null,
+    // 输入框尾部图标
+    suffix: null,
+    // 给表单元素设置 id,详见 Form 用法。
+    'element-id': null,
+    // 原生的 spellcheck 属性
+    spellcheck: false,
+    // 原生的 wrap 属性,可选值为 hard 和 soft,仅在 textarea 下生效
+    wrap: 'soft',
+    // 正则表达式
+    regx: null
+  },
+  event: {
+    // 按下回车键时触发
+    enter: (event, $this) => {},
+    // 设置 icon 属性后,点击图标时触发
+    click: (event, $this) => {},
+    // 数据改变时触发
+    change: (event, $this) => {},
+    // 输入框聚焦时触发
+    focus: (event, $this) => {},
+    // 输入框失去焦点时触发
+    blur: (event, $this) => {},
+    // 原生的 keyup 事件
+    keyup: (event, $this) => {},
+    // 原生的 keydown 事件
+    keydown: (event, $this) => {},
+    // 原生的 keypress 事件
+    keypress: (event, $this) => {},
+    // 开启 search 时可用,点击搜索或按下回车键时触发
+    search: (event, $this) => {},
+    // 添加正则后,校验出错的时候触发
+    regxCheck: (value, $this, errorValue) => {}
+  },
+};
+// 下拉框
+const select = {
+  type: 'select', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: '',
+  // 可选参数
+  options: [
+    // { value: '104', label: '生态蔬菜', disabled: false },
+    // { value: '105', label: '新鲜水果', disabled: false },
+  ],
+  props: {
+    // 是否支持多选
+    multiple: false,
+    // 多选情况下的样式控制,只在multiple为true有效
+    multipleType: false,
+    // 是否禁用
+    disabled: false,
+    // 是否可以清空选项,只在单选时有效
+    clearable: true,
+    // 选择框大小,可选值为large、small、default或者不填
+    size: 'default',
+    // 选择框默认文字
+    placeholder: '请选择',
+    // 当下拉列表为空时显示的内容
+    'not-found-text': '无匹配数据',
+    // 在返回选项时,是否将 label 和 value 一并返回,默认只返回 value
+    'label-in-value': false,
+    // 弹窗的展开方向,可选值为 bottom 和 top
+    placement: 'bottom',
+    // 是否将弹层放置于 body 内,在 Tabs、带有 fixed 的 Table 列内使用时,建议添加此属性,它将不受父级样式影响,从而达到更好的效果
+    transfer: true,
+  }
+};
+// Switch
+const Switch = {
+  type: 'Switch', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: false,
+  props: {
+    
+  }
+};
+// 单选框
+const radiobox = {
+  type: 'radiobox', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: false,
+  // 可选参数
+  props: {
+    // 多选框组的尺寸,可选值为 large、small、default 或者不设置
+    size: 'default',
+    // 是否禁用当前项
+    disabled: false
+  }
+};
+// 复选框
+const checkbox = {
+  type: 'checkbox', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: false,
+  // 可选参数
+  props: {
+    // 多选框组的尺寸,可选值为 large、small、default 或者不设置
+    size: 'default',
+    // 是否禁用当前项
+    disabled: false,
+    // 支持checkout样式为radio样式
+    circle: false
+  },
+  event: {
+    change: (event, $this) => {},
+  }
+};
+// 日期选择
+const DatePicker = {
+  type: 'DatePicker', // 必填!
+  field: '', // 必填!
+  title: '活动日期', // 必填!
+  // input值, type为daterange,datetimerange value为数组 [start_value,end_value]
+  value: '',
+  props: {
+    // 显示类型,可选值为 date、daterange、datetime、datetimerange、year、month
+    type: 'datetimerange', // 必填!
+    // 展示的日期格式
+    format: 'yyyy-MM-dd HH:mm',
+    // 日期选择器出现的位置,可选值为toptop-starttop-endbottombottom-startbottom-endleftleft-startleft-endrightright-startright-end
+    placement: 'bottom-start',
+    // 占位文本
+    placeholder: '请选择获得时间',
+    // 选择器额外配置,比如不可选日期与快捷选项
+    options: {
+      disabledDate (date) {
+          return date && date.valueOf() > Date.now();
+      }
+    },
+    // 手动控制日期选择器的显示状态,true 为显示,false 为收起。使用该属性后,选择器不会主动关闭。建议配合 slot 及 confirm 和相关事件一起使用
+    open: null,
+    // 是否显示底部控制栏,开启后,选择完日期,选择器不会主动关闭,需用户确认后才可关闭
+    confirm: false,
+    // 尺寸,可选值为large、small、default或者不设置
+    size: 'default',
+    // 是否禁用选择器
+    disabled: false,
+    // 是否显示清除按钮
+    clearable: true,
+    // 完全只读,开启后不会弹出选择器
+    readonly: false,
+    // 文本框是否可以输入
+    editable: false,
+    // 是否将弹层放置于 body 内,在 Tabs、带有 fixed 的 Table 列内使用时,建议添加此属性,它将不受父级样式影响,从而达到更好的效果
+    transfer: true
+  }
+};
+
+// 下拉框
+const DropDownSelectFilter = {
+  type: 'DropDownSelectFilter', // 必填!
+  field: '', // 必填!
+  title: '', // 必填!
+  value: '',
+  props: {
+    placeholder:'请选择',
+    // 是否是单选,可选值为 true、false
+    single: true,
+    // 下拉气泡表格里数据
+    data: {},
+    // 数据总条数
+    totalRowCount: 0,
+    // 每页条数
+    pageSize: 10,
+    // 模糊搜索的数据
+    AutoData: [],
+    // 模糊搜索要显示的列
+    columns: [],
+    // 无数据的时候提示
+    dataEmptyMessage: '暂无数据',
+    // 下拉多选 默认选中数据
+    defaultSelected: [],
+    // 是否将弹层放置于 body 内
+    transfer: true,
+    columnsKey:[]
+  }
+};
+//下拉和输入框混合
+
+const selectInput = {
+  // item 类型
+  type: 'selectInput', // 必填!
+  // label名称
+  title: '', // 必填!
+  // 字段名称
+  field: '', // 必填!
+  // input值
+  value: '',
+  slotfiled:'',//卡槽对应的键
+  slotValue:'', 
+  props: {
+    // 输入框类型,可选值为 text、password、textarea、url、email、date
+    type: 'text', // 必填!
+    // 是否显示清空按钮
+    clearable: false,
+    // 设置输入框为禁用状态
+    disabled: false,
+    // 设置输入框为只读
+    readonly: false,
+    // 文本域默认行数,仅在 textarea 类型下有效
+    rows: 4,
+    // 自适应内容高度,仅在 textarea 类型下有效,可传入对象,如 { minRows: 2, maxRows: 6 }
+    autosize: false,
+    // 将用户的输入转换为 Number 类型。在有正则的时候:1)该输入框为空的时候,值为空字符串。2)input方法不可用。
+    number: false,
+    // 自动获取焦点
+    autofocus: false,
+    // 原生的自动完成功能,可选值为 off 和 on
+    autocomplete: 'off',
+    // 占位文本
+    placeholder: '请输入',
+    // 输入框尺寸,可选值为large、small、default或者不设置
+    size: 'default',
+    // 最大输入长度
+    maxlength: null,
+    // 输入框尾部图标,仅在 text 类型下有效
+    icon: null,
+    // 输入框头部图标
+    prefix: null,
+    // 输入框尾部图标
+    suffix: null,
+    // 给表单元素设置 id,详见 Form 用法。
+    'element-id': null,
+    // 原生的 spellcheck 属性
+    spellcheck: false,
+    // 原生的 wrap 属性,可选值为 hard 和 soft,仅在 textarea 下生效
+    wrap: 'soft',
+    // 正则表达式
+    regx: null
+  },
+  event: {
+    // 按下回车键时触发
+    enter: (event, $this) => {},
+    // 设置 icon 属性后,点击图标时触发
+    click: (event, $this) => {},
+    // 数据改变时触发
+    change: (event, $this) => {},
+    // 输入框聚焦时触发
+    focus: (event, $this) => {},
+    // 输入框失去焦点时触发
+    blur: (event, $this) => {},
+    // 原生的 keyup 事件
+    keyup: (event, $this) => {},
+    // 原生的 keydown 事件
+    keydown: (event, $this) => {},
+    // 原生的 keypress 事件
+    keypress: (event, $this) => {},
+    // 开启 search 时可用,点击搜索或按下回车键时触发
+    search: (event, $this) => {},
+    // 添加正则后,校验出错的时候触发
+    regxCheck: (value, $this, errorValue) => {}
+  },
+};
+
+
+const dataProp = {
+  DatePicker,
+  checkbox,
+  radiobox,
+  Switch,
+  select,
+  input,
+  selectInput,
+  DropDownSelectFilter
+};
+export default dataProp;

+ 123 - 0
ruoyi-ui/src/utils/layoutAlgorithm.js

@@ -0,0 +1,123 @@
+
+// 查找数组中最后一个不为空的值,获取可使用空位,为了找出这一行是否能够存放当前元素。
+// 返回值为该行可放的空格数
+function getLastNotNull(array) {
+  let canUseLength = array.length;
+  // 数组取反,获取到第一个不为空的值,则判断出该行可放的空格数量
+  array.reverse().every((item, index) => {
+    if (item) {
+      canUseLength = index;
+      return false;
+    }
+    return true;
+  });
+  return canUseLength;
+}
+
+
+// 判断从当前空格开始填,是否所有空格都能够放入
+// currentRow:当前开始填充行
+// currentCol:当前开始填充列
+// pointer:当前元素的数据,宽高
+// ListsMap:当前整个填充块的
+// defaultColumn:默认一列的行数
+function checkAllSpace(currentRow, currentCol, pointer, ListsMap, defaultColumn) {
+  const rowArray = Array(pointer.row).fill(null);
+  const colArray = Array(pointer.col).fill(null);
+  
+  let flag = true;
+  rowArray.map((item, row) => {
+    colArray.map((temp, col) => {
+      if (ListsMap[row + currentRow][col + currentCol]) {
+        flag = false;
+      }
+    });
+  });
+  if ((currentCol + pointer.col) > defaultColumn) {
+    flag = false;
+  }
+  return flag;
+}
+
+
+// defaultColumn:默认每行的列数
+// lists:[{  //每一个item的行和宽
+//   row:,
+//   col:
+// }]
+// type:fill  填充  newline  换行
+// 返回值是在lists的item中添加x,y属性:
+// {
+//   y:i+1,  //列
+//   x:j+1,  //行
+//   row:pointer.row, //行高
+//   col:pointer.col  //宽高
+// }
+function layoutAlgorithm(defaultColumn, lists, type = 'fill') {
+  // 定义每一行的空数据defaultRow
+  const defaultRow = Array(defaultColumn).fill(null);
+  // 定义最大行数
+  const num = lists.reduce((sum, current) => { sum += (!current.row || current.row < 1) ? 1 : current.row; return sum; }, 0);
+  const sumArray = Array(num).fill(null);
+
+  // 定义map模型 默认 50*defaultColumn的布局
+  const ListsMap = sumArray.concat([]).reduce((currentValue) => {
+    currentValue.push(defaultRow.concat([]));
+    return currentValue;
+  }, []);
+
+
+  const coordinateMap = {};
+  // 遍历配置文件的行列数,获取对应的grid布局坐标
+  lists.every((pointer, pointerIndex) => {
+    // 对初始化数据进行判断处理
+    // 当列数大于默认分列时,将当前元素列改为默认的分列数
+    // 当当前项没有设置宽高,默认设为1
+    if (pointer.show === false) { // 当属性show为false时,则默认返回位置(-1,-1)即不显示该节点
+      if (!coordinateMap[pointerIndex]) { // 记录起始的行列以及宽高,作为function返回值
+        pointer.x = -1;
+        pointer.y = -1;
+        coordinateMap[pointerIndex] = pointer;
+      }
+      return true;
+    }
+    pointer.col = (!pointer.col || pointer.col < 1) ? 1 : pointer.col;
+    pointer.col = pointer.col > defaultColumn ? defaultColumn : pointer.col;
+    pointer.row = (!pointer.row || pointer.row < 1) ? 1 : pointer.row;
+    ListsMap.every((item, i) => item.every((temp, j) => {
+      // 当类型为换行时,判断该行是否可放入,不可放入时则换行
+      if (type === 'newline') {
+        if (getLastNotNull([].concat(item)) < pointer.col) {
+          return true;
+        }
+      }
+      // 当类型为填充时,才执行checkAllSpace,对对应的所有空格进行可填充判断
+      if (!temp && (type === 'fill' ? checkAllSpace(i, j, pointer, ListsMap, defaultColumn) : true)) { // 为空时可放
+        if (!coordinateMap[pointerIndex]) { // 记录起始的行列以及宽高,作为function返回值
+          pointer.x = j + 1;
+          pointer.y = i + 1;
+          coordinateMap[pointerIndex] = pointer;
+        }
+        // 将对应的点打上标记
+        const rowArray = Array(pointer.row).fill(null);
+        const colArray = Array(pointer.col).fill(null);
+        rowArray.map((item, row) => {
+          colArray.map((temp, col) => {
+            ListsMap[i + row][j + col] = `k${pointerIndex}`;
+            return true;
+          });
+          return true;
+        });
+
+        return false;
+      }
+      return true;
+    }));
+    return true;
+  });
+
+  return coordinateMap;
+} 
+
+
+export default layoutAlgorithm;

+ 9 - 12
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">
@@ -50,7 +54,7 @@
     inject: ['reload'],
     data() {
       return {
-        activeNames: ['1'],
+        activeNames: [0],
         title: '单表1',
         // 查询参数
         queryParams: {},
@@ -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
                }
            })
           }

+ 9 - 12
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>
@@ -92,7 +96,7 @@
         loading:true,
         tabList: {},
         currentPage3: 0,
-        activeNames: [1],
+        activeNames: [0],
         title: '列表',
         objParams: {
           table: '',
@@ -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
                }
            })
           }

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

@@ -19,13 +19,15 @@
     <!-- 内容 -->
     <div class="table_nav">
       <el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column type="selection" width="55" style="color: red;" align="center" />
         <template v-for="(item, index) in tabData">
-          <el-table-column :label="item.columnComment" align="center" :prop="item.columnName" :key="index">
+          <el-table-column :label="item.columnComment"  align="center" :prop="item.columnName" :key="index" >
             <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="">
-              <span v-else>{{ scope.row[scope.column.property] }}</span>
+              <!-- :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>
         </template>
@@ -54,7 +56,8 @@
     name: "index",
     data() {
       return {
-        pir_imgs: '', // 图片链接
+        pir_imgs: '', // 图片链接
+        // jue:'color: red;',
         tabData: [],
         multiple: true,
         single: true,
@@ -336,7 +339,8 @@
     // }
 
     .el-collapse {
-      border-top: 0;
+      border-top: 0;
+
     }
   }
 </style>

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

@@ -3,13 +3,17 @@
     <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>
     </div>
     <!-- 内容 -->
-    <div class="table_nav headertable_nav">
+    <div class="table_nav headertable_nav" >
       <el-collapse v-model="activeNames" @change="handleChange">
         <el-form :model="queryParams" :rules="queryData.rules" ref="queryForm" :inline="true" label-width="120px">
           <el-collapse-item :title="item.columnComment" :name="index" v-for="(item,index) in queryData.showData" :key="index">
@@ -85,7 +89,7 @@
         jeigneutwo:[],
         xidugje:0,
         tijeq:0,
-        imgShoew:false
+        imgShoew:0
       };
     },
     // filters:{
@@ -198,11 +202,11 @@
           // this.init()
           this.reload()
         } else if (index == '返回') {
-          if (this.xidugje == 0) {
-            this.$router.go(-2)
-          } else {
+          // if (this.xidugje == 0) {
+          //   this.$router.go(-2)
+          // } else {
             this.$router.go(-1)
-          }
+          // }
         } else if (index == '刷新') {
           this.xidugje = 1
           this.reload()
@@ -285,13 +289,9 @@
          // 图片的显示隐藏
          if(this.queryData.showData.length !==0){
           this.queryData.showData.filter(route => {
-              if(route.hrChildren.length !== 0){
-                 if(route.hrChildren[1].readonly == true){
-                       this.imgShoew = true
-                 }else{
-                   this.imgShoew = false
-                 }
-              }
+            if(route.cssClass !== null){
+              this.imgShoew = route.cssClass
+            }
           })
          }
         })