Browse Source

Merge remote-tracking branch 'origin/master'

hongchuangyanfa 2 năm trước cách đây
mục cha
commit
366a1c4bd1
17 tập tin đã thay đổi với 249 bổ sung167 xóa
  1. 5 4
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 142 139
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
  3. 14 6
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
  4. 4 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java
  5. 5 2
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
  6. 6 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleAndMenusVO.java
  7. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  8. 17 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  9. 2 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  10. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  11. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  12. 14 2
      blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
  13. 1 1
      blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
  14. 1 1
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
  15. 1 1
      blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
  16. 18 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
  17. 13 3
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

+ 5 - 4
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -142,7 +142,7 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
             }
 
-            /*校验登陆账号权限,客户端登陆userType=1,app端登陆userType=2,全部端均可登陆userType=3*/
+            /*校验登陆账号权限,客户端、档案登陆userType=1,app端登陆userType=2,全部端均可登陆userType=3*/
             if (user.getUserType().equals(1) || user.getUserType().equals(2) || user.getUserType().equals(3)) {
                 if (!user.getUserType().equals(3)) {
                     this.judgeLoginPermission(user);
@@ -226,7 +226,7 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
 
     /**
      * 校验登陆账号权限
-     *
+     * @author liuyc
      * @param user user信息
      */
     private void judgeLoginPermission(User user) {
@@ -235,9 +235,10 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
         if (clientId != null) {
             switch (clientId) {
                 case "client":
+                case "archives":
                     result = 1; //WEB=客户端
                     break;
-                case "app":
+                case "uni-app":
                     result = 2; //APP=APP端
                     break;
                 case "saber":
@@ -247,7 +248,7 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
         }
         if (!result.equals(user.getUserType())) {
             if ((result == 1 && user.getUserType().equals(2)) || (result == 2 && user.getUserType().equals(1))) {
-                //客户端与APP端均可登陆
+                //均可登陆
                 return;
             }
             throw new UserDeniedAuthorizationException(TokenUtil.USER_ACCOUNT_NO_PERMISSION);

+ 142 - 139
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java

@@ -40,145 +40,148 @@ import java.util.Objects;
 @ApiModel(value = "Menu对象", description = "Menu对象")
 public class Menu implements Serializable {
 
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "主键")
-	@TableId(value = "id", type = IdType.ASSIGN_ID)
-	private Long id;
-
-	/**
-	 * 菜单父主键
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty(value = "菜单父主键")
-	private Long parentId;
-
-	/**
-	 * 菜单编号
-	 */
-	@ApiModelProperty(value = "菜单编号")
-	private String code;
-
-	/**
-	 * 菜单名称
-	 */
-	@ApiModelProperty(value = "菜单名称")
-	private String name;
-
-	/**
-	 * 菜单别名
-	 */
-	@ApiModelProperty(value = "菜单别名")
-	private String alias;
-
-	/**
-	 * 请求地址
-	 */
-	@ApiModelProperty(value = "请求地址")
-	private String path;
-
-	/**
-	 * 菜单资源
-	 */
-	@ApiModelProperty(value = "菜单资源")
-	private String source;
-
-	/**
-	 * 排序
-	 */
-	@ApiModelProperty(value = "排序")
-	private Integer sort;
-
-	/**
-	 * 菜单类型
-	 */
-	@ApiModelProperty(value = "菜单类型")
-	private Integer category;
-
-	/**
-	 * 操作按钮类型
-	 */
-	@ApiModelProperty(value = "操作按钮类型")
-	private Integer action;
-
-
-	/**
-	 * 是否有外层
-	 */
-	@ApiModelProperty(value = "是否有外层")
-	private Integer isLayout;
-
-
-
-	/**
-	 * 是否打开新页面
-	 */
-	@ApiModelProperty(value = "是否打开新页面")
-	private Integer isOpen;
-
-	/**
-	 * 备注
-	 */
-	@ApiModelProperty(value = "备注")
-	private String remark;
-
-
-	/**
-	 * 是否已删除
-	 */
-	@TableLogic
-	@ApiModelProperty(value = "是否已删除")
-	private Integer isDeleted;
-
-	/**
-	 * 系统id
-	 */
-	@ApiModelProperty(value = "系统id")
-	private Long sysId;
-
-	/**
-	 * 提示语
-	 */
-	@ApiModelProperty(value = "提示语")
-	private String textInfo;
-
-	/**
-	 * 提示视频路径
-	 */
-	@ApiModelProperty(value = "提示视频路径")
-	private String videoUrl;
-
-	/**
-	 * 文档信息
-	 */
-	@ApiModelProperty(value = "文档信息")
-	private String excelUrl;
-
-
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		Menu other = (Menu) obj;
-		if (Func.equals(this.getId(), other.getId())) {
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(id, parentId, code);
-	}
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 菜单父主键
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "菜单父主键")
+    private Long parentId;
+
+    /**
+     * 菜单编号
+     */
+    @ApiModelProperty(value = "菜单编号")
+    private String code;
+
+    /**
+     * 菜单名称
+     */
+    @ApiModelProperty(value = "菜单名称")
+    private String name;
+
+    /**
+     * 菜单别名
+     */
+    @ApiModelProperty(value = "菜单别名")
+    private String alias;
+
+    /**
+     * 请求地址
+     */
+    @ApiModelProperty(value = "请求地址")
+    private String path;
+
+    /**
+     * 菜单资源
+     */
+    @ApiModelProperty(value = "菜单资源")
+    private String source;
+
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    /**
+     * 菜单类型
+     */
+    @ApiModelProperty(value = "菜单类型")
+    private Integer category;
+
+    /**
+     * 操作按钮类型
+     */
+    @ApiModelProperty(value = "操作按钮类型")
+    private Integer action;
+
+
+    /**
+     * 是否有外层
+     */
+    @ApiModelProperty(value = "是否有外层")
+    private Integer isLayout;
+
+
+    /**
+     * 是否打开新页面
+     */
+    @ApiModelProperty(value = "是否打开新页面")
+    private Integer isOpen;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+    /**
+     * 是否已删除
+     */
+    @TableLogic
+    @ApiModelProperty(value = "是否已删除")
+    private Integer isDeleted;
+
+    /**
+     * 系统id
+     */
+    @ApiModelProperty(value = "系统id")
+    private Long sysId;
+
+    /**
+     * 提示语
+     */
+    @ApiModelProperty(value = "提示语")
+    private String textInfo;
+
+    /**
+     * 提示视频路径
+     */
+    @ApiModelProperty(value = "提示视频路径")
+    private String videoUrl;
+
+    /**
+     * 文档信息
+     */
+    @ApiModelProperty(value = "文档信息")
+    private String excelUrl;
+
+    /**
+     * 是否显示按钮
+     */
+    @ApiModelProperty(value = "是否显示按钮 1=显示 0=不显示")
+    private Integer isShowButton;
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        Menu other = (Menu) obj;
+        if (Func.equals(this.getId(), other.getId())) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, parentId, code);
+    }
 
 
 }

+ 14 - 6
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java

@@ -2,6 +2,7 @@ package org.springblade.system.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -10,17 +11,24 @@ import java.util.List;
  * @author liuyc
  */
 @Data
-public class CheckedTreeVO {
+public class CheckedTreeVO implements Serializable {
 
-	private List<String> menu;
+	private static final long serialVersionUID = 1L;
 
-	private List<String> dataScope;
+    //后管
+    private List<String> menu;
 
-	private List<String> apiScope;
+    //客户端
+    private List<String> usermenu;
 
-	private List<String> usermenu;
+    //档案
+    private List<String> archivesMenu;
 
-	private List<String> tableOwners;
+    //表单
+    private List<String> tableOwners;
 
+    private List<String> dataScope;
+
+    private List<String> apiScope;
 
 }

+ 4 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantTreeVO.java

@@ -14,6 +14,7 @@ import java.util.List;
  */
 @Data
 public class GrantTreeVO implements Serializable {
+
 	private static final long serialVersionUID = 1L;
 
 	//后管
@@ -22,6 +23,9 @@ public class GrantTreeVO implements Serializable {
 	//客户端
 	private List<TreeNodeVO> usermenu;
 
+	//档案菜单
+	private List<TreeNodeVO> archivesMenu;
+
 	//数据
 	private List<TreeNodeVO> dataScope;
 

+ 5 - 2
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java

@@ -18,12 +18,15 @@ public class GrantVO implements Serializable {
     @ApiModelProperty(value = "roleIds集合")
     private List<Long> roleIds;
 
-    @ApiModelProperty(value = "menuIds集合")
+    @ApiModelProperty(value = "menuIds集合-后管")
     private List<String> menuIds;
 
-    @ApiModelProperty(value = "menuClientIds集合")
+    @ApiModelProperty(value = "menuClientIds集合-客户端")
     private List<String> menuClientIds;
 
+    @ApiModelProperty(value = "menuArchivesIds集合-档案")
+    private List<String> menuArchivesIds;
+
     @ApiModelProperty(value = "topMenuIds集合")
     private List<Long> topMenuIds;
 

+ 6 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/RoleAndMenusVO.java

@@ -3,8 +3,14 @@ package org.springblade.system.vo;
 import lombok.Data;
 import java.io.Serializable;
 
+/**
+ * RoleAndMenusVO
+ *
+ * @author liuyc
+ */
 @Data
 public class RoleAndMenusVO implements Serializable {
+
     private static final long serialVersionUID = 1L;
 
     private Long id;

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -95,7 +95,7 @@ public class FormulaController {
                  efm.setProjectId(f.getProjectId());
                  this.elementFormulaMappingService.save(efm);
                  /*假如不存在projectId则认为是系统级模版公式,必须同步给所有项目TODO*/
-                 return R.success("新增成功");
+                 return R.data(fa.getId(),"新增成功");
              }else{
                  return R.status(this.service.updateById(fa));
              }

+ 17 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -208,7 +208,24 @@ public class WbsTreeController extends BladeController {
         return R.data(wbsFormElements, "未查询到元素");
     }
 
+    @GetMapping("/get-table-formula-elements")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "根据表单id查询所有元素", notes = "传入表单id")
+    @ApiImplicitParam(name = "id", value = "表单id", required = true)
+    public R<List<WbsFormElementVO>> selectFormElements4Formula(@RequestParam("id") String id,String search) {
+        List<WbsFormElementVO> wbsFormElements = null;
+        if (StringUtils.isNotEmpty(id)) {
+            wbsFormElements = wbsTreeService.selectFormElements4Formula(id);
+            if (wbsFormElements.size() > 0) {
+                if(StringUtils.isNotEmpty(search)){
+                    wbsFormElements=wbsFormElements.stream().filter(e->e.getEName().contains(search)).collect(Collectors.toList());
+                }
+                return R.data(wbsFormElements);
+            }
+        }
 
+        return R.data(wbsFormElements, "未查询到元素");
+    }
     /**
      * 新增表单与元素
      */

+ 2 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -91,6 +91,7 @@
         <result column="tableElementKey" property="tableElementKey"/>
         <result column="initTableName" property="initTableName"/>
         <result column="nodeId" property="nodeId"/>
+        <result column="globalFormula" property="globalFormula"/>
     </resultMap>
 
     <insert id="addFormElement" parameterType="org.springblade.manager.dto.WbsFormElementDTO">
@@ -373,13 +374,7 @@
         where b.id=#{id} and a.is_deleted=0
     </select>
     <select id="selectFormElements4TableId" resultMap="wbsFormElementMap">
-        select f_id,e_key,c.id,e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,CONCAT(b.init_table_name,':',e_key) as tableElementKey,init_table_name as initTableName from m_table_info a INNER JOIN m_wbs_tree b on a.tab_en_name=b.init_table_name INNER JOIN m_wbs_form_element c on c.f_id=b.init_table_id
-        where a.id =#{id} and c.is_deleted=0
-        union   select f_id,e_key,c.id,e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,CONCAT(b.init_table_name,':',e_key) as tableElementKey,init_table_name as initTableName from m_table_info a INNER JOIN (SELECT j.* from m_table_info k INNER JOIN m_wbs_tree_private j on k.tab_en_name=j.init_table_name
-        where k.id=#{id} limit 1) b on a.tab_en_name=b.init_table_name INNER JOIN m_wbs_form_element c on c.f_id=b.init_table_id  where a.id =#{id} and c.is_deleted=0
-    </select>
-    <select id="selectFormElements4Formula" resultMap="wbsFormElementMap">
-        select  * from m_wbs_form_element a
+        select  a.id,a.e_name,IF(b.formula_id>0,1,0)globalFormula from m_wbs_form_element a LEFT JOIN (select element_id ,formula_id from m_element_formula_mapping where scope=1 )b on a.id=b.element_id
         where a.f_id=#{id} and a.is_deleted=0
     </select>
     <select id="selectPrivateFormElements" resultMap="wbsFormElementMap">

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -34,6 +34,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
     boolean removeTableById(String id);
 
     List<WbsFormElementVO> selectFormElements(String id,Long nodeId);
+    List<WbsFormElementVO> selectFormElements4Formula(String id);
     // 项目级
     List<WbsFormElementVO> selectPrivateFormElements(String id);
 

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -352,6 +352,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsFormElements;
     }
 
+    @Override
+    public List<WbsFormElementVO> selectFormElements4Formula(String id) {
+        return this.wbsTreeMapper.selectFormElements4TableId(id);
+    }
 
     @Override
     public List<WbsFormElementVO> selectPrivateFormElements(String id) {

+ 14 - 2
blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java

@@ -225,8 +225,9 @@ public class MenuController extends BladeController {
     @ApiOperation(value = "权限分配树形结构", notes = "权限分配树形结构")
     public R<GrantTreeVO> grantTree(BladeUser user) {
         GrantTreeVO vo = new GrantTreeVO();
-        List<TreeNodeVO> treeUserMenu = new ArrayList<>();
-        List<TreeNodeVO> treeMenu = new ArrayList<>();
+        List<TreeNodeVO> treeMenu = new ArrayList<>(); //后管
+        List<TreeNodeVO> treeUserMenu = new ArrayList<>(); //客户端
+        List<TreeNodeVO> treeMenuArchives = new ArrayList<>(); //档案
         //获取所有菜单
         List<TreeNodeVO> treeNodesAll = menuService.grantTree(user);
         //获取AuthClient
@@ -247,6 +248,12 @@ public class MenuController extends BladeController {
                             treeMenu.add(treeNode);
                         }
                     }
+                    if (("archives").equals(authClient.getClientId())) {
+                        //档案
+                        if (treeNode.getSysId().equals(authClient.getId())) {
+                            treeMenuArchives.add(treeNode);
+                        }
+                    }
                     //TODO 其他菜单权限
                 }
             }
@@ -256,6 +263,8 @@ public class MenuController extends BladeController {
         vo.setMenu(treeMenu);
         //客户端
         vo.setUsermenu(treeUserMenu);
+        //档案
+        vo.setArchivesMenu(treeMenuArchives);
         //数据源
         vo.setDataScope(menuService.grantDataScopeTree(user));
         //接口
@@ -281,6 +290,9 @@ public class MenuController extends BladeController {
         //客户端
         vo.setUsermenu(menuService.roleTreeKeys(roleIds));
 
+        //档案
+        vo.setArchivesMenu(menuService.roleTreeKeys(roleIds));
+
         //数据源
         vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
 

+ 1 - 1
blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java

@@ -187,7 +187,7 @@ public class RoleController extends BladeController {
     public R grant(@RequestBody GrantVO grantVO) {
         CacheUtil.clear(SYS_CACHE);
         CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-        boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getMenuClientIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds(), grantVO.getTableOwners());
+        boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getMenuClientIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds(), grantVO.getTableOwners(),grantVO.getMenuArchivesIds());
         return R.status(temp);
     }
 

+ 1 - 1
blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml

@@ -124,7 +124,7 @@
     </select>
 
     <select id="allMenuBySysType" resultMap="menuResultMap">
-        select a.* from blade_menu a ,blade_client b  where a.is_deleted = 0 and a.category = 1 and a.sys_id=b.id and b.client_id=#{sysType}
+        select a.* from blade_menu a ,blade_client b  where a.is_deleted = 0 and a.category = 1 and a.sys_id=b.id and b.client_id=#{sysType} and a.is_show_button = 1
     </select>
 
     <select id="roleMenu" resultMap="menuResultMap">

+ 1 - 1
blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java

@@ -64,7 +64,7 @@ public interface IRoleService extends IService<Role> {
      * @param apiScopeIds  接口权限id集合
      * @return 是否成功
      */
-    boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners);
+    boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners,List<String> menuArchivesIds);
 
     /**
      * 获取角色ID

+ 18 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
@@ -28,6 +29,7 @@ import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.node.TreeNode;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.user.vo.TreeNodeVO;
 import org.springblade.system.cache.SysCache;
@@ -94,6 +96,22 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
         //根据类型获取对应菜单
         List<Menu> allMenusList = baseMapper.allMenuBySysType(sysType);
 
+        //只显示非隐藏按钮
+        Iterator<Menu> iterator = allMenusList.iterator();
+        while (iterator.hasNext()) {
+            Menu obj = iterator.next();
+            if (obj.getParentId() == 0) {
+                //根节点跳过
+                continue;
+            }
+
+            Menu menu = allMenusList.stream().filter(f -> obj.getParentId().equals(f.getId())).findAny().orElse(null);
+            if (ObjectUtil.isEmpty(menu)) {
+                //没有父级,删除当前子级
+                iterator.remove();
+            }
+        }
+
         //获取该角色与菜单关系信息
         List<RoleAndMenusVO> resultList = baseMapper.allRoleAndMenu(roleId);
 

+ 13 - 3
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

@@ -87,11 +87,11 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners) {
-        return grantRoleMenu(roleIds, menuIds, menuClientIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds) && submitRoleAndTableOwner(roleIds, tableOwners);
+    public boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners, List<String> menuArchivesIds) {
+        return grantRoleMenu(roleIds, menuIds, menuClientIds, menuArchivesIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds) && submitRoleAndTableOwner(roleIds, tableOwners);
     }
 
-    private boolean grantRoleMenu(List<Long> roleIds, List<String> menuIds, List<String> menuClientIds) {
+    private boolean grantRoleMenu(List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<String> menuArchivesIds) {
         // 防止越权配置超管角色
         Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
         if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
@@ -124,12 +124,22 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
             roleMenus.add(roleMenu);
         }));
 
+        // 组装配置-档案
+        roleIds.forEach(roleId -> menuArchivesIds.forEach(menuIdC -> {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(roleId);
+            roleMenu.setMenuId(Long.valueOf(menuIdC.split("---")[0]));
+            roleMenu.setStatus(menuIdC.split("---")[1]);
+            roleMenus.add(roleMenu);
+        }));
+
         // 新增配置
         roleMenuService.saveBatch(roleMenus);
 
         // 递归设置下属角色菜单集合
         recursionRoleMenu(roleIds, menuIds);
         recursionRoleMenu(roleIds, menuClientIds);
+        recursionRoleMenu(roleIds, menuArchivesIds);
 
         return true;
     }