(原)Springboot + thymeleaf 自动添加 权限菜单功能 - Go语言中文社区

(原)Springboot + thymeleaf 自动添加 权限菜单功能


效果图:

         

      管理员权限菜单用户权限菜单


 代码:

 Java的:

List<primarySystemMenu> listMenu = null;
        listJuri = pJurisdictionService.findStoreMenuByStoreId( pAdminUser.getStoreId() );
    	//根据登录用户身份 判断权限菜单及访问路径
        for (int i = 0; i < listJuri.size(); i++) {
			if (   String.valueOf( pAdminUser.getStatus() ).equals(listJuri.get(i).getJurName()) ) {
				String[] JurHave = listJuri.get(i).getJurHave().split(",");
					//权限列表菜单
				listMenu = pSystemMenuService.findMenuByJurHave(pAdminUser.getStoreId(),JurHave);
			}
		}
        modelMap.addAttribute("listMenu", listMenu);

                Java的递归建树:

	@Override
	public List<primarySystemMenu> findMenuByJurHave(String storeId,String[] strJurHave) {
		Specification<primarySystemMenu> spec = JuriUtils.toPredicateValue(strJurHave);
		List<primarySystemMenu> listMenu = pSystemMenuRepository.findAll(spec);
		//Java实现递归 创建树形结构
		List<primarySystemMenu> treesList = primarySystemMenuServiceImpl.buildByRecursive(listMenu);
		return treesList;
	}

	/**
	* 使用递归方法建树
	* @param listMenu
	* @return
	*/
	public static List<primarySystemMenu> buildByRecursive(List<primarySystemMenu> listMenu) {
		List<primarySystemMenu> trees = new ArrayList<primarySystemMenu>();
		for (primarySystemMenu treeNode : listMenu) {
			if ( 0 == treeNode.getPid() ) {
				trees.add(findChildren(treeNode,listMenu));
			}
		}
		return trees;
	}

	/**
	* 递归查找子节点
	* @param listMenu
	* @return
	*/
	public static primarySystemMenu findChildren(primarySystemMenu treeNode,List<primarySystemMenu> listMenu) {
		for (primarySystemMenu it : listMenu) {
			if(treeNode.getId() ==  it.getPid() ) {
				if (treeNode.getList() == null) {
					treeNode.setList(new ArrayList<primarySystemMenu>());
				}
				treeNode.getList().add(findChildren(it,listMenu));
			}
		}
		return treeNode;
	}

                  java springboot底层动态拼接在条件中

public static <T> Specification<T> toPredicateValue(String[] strJurHave) {
		Specification<T> spec = new Specification<T>() {
			private static final long serialVersionUID = 1L;
			@Override
			public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				List<Predicate> predicates = new ArrayList<Predicate>();
				In<Long> in = cb.in(root.get("id"));
			    for (int i = 0; i < strJurHave.length; i++) {
			        in.value( Long.parseLong( strJurHave[i] ) );
			    }
			    predicates.add(in);
				return cb.and(predicates.toArray( new Predicate[predicates.size()] ));				
			}
		};
		return spec;
	}

                  创建实体模型层方法:

        @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id")
        long id;// id
	@Column(name="pid")
	int pid;//父id
	@Column(name="menu_name")
	String menuName;//菜单名字
	@Column(name="checked")
	boolean checked = false;//是否被选中
	@Column(name="menu_href")
	String menuHref;//菜单路径
	@Column(name="menu_icon")
	String menuIcon;//菜单图标
	@Column(name="desciption")
	String desciption;//菜单描述
	@Column(name="menu_flag")
	String menuFlag;//必选菜单:0 可选菜单:1
	
	@Transient
	List<primarySystemMenu> list;//构造树形结构菜单的层级关系

 

HTML:

 <li th:each="list: ${listMenu}">
      <a href="javascript:;" th:if="${list.pid==0}">
              <i class="iconfont">&#xe6b4;</i>
               <cite th:text="${list.menuName}"></cite>
               	<i class="iconfont nav_right">&#xe697;</i>
      </a>
       <ul class="sub-menu" th:each="listMenuTreeNode : ${list.list}">
       			<li th:if="${listMenuTreeNode.pid!=0}">
         			 <a th:href="${listMenuTreeNode.menuHref}"  >
         			          <i class="iconfont">&#xe6a7;</i>
                              <cite th:text="${listMenuTreeNode.menuName}"></cite>
                     </a>
         		</li>
        </ul>
 </li>

 

以上是自己整理的,并测试过,可以直接用

-------------------------------------------------- -------------------------------------------------- ------------

文章中,有问题,可以在评论区评论,一起探讨编程中奥秘!

-------------------------------------------------- -------------------------------------------------- ------------

来都来了,代码看都看了,那就留个言呗,可以互动下!

-------------------------------------------------- -------------------------------------------------- ------------

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_31653405/article/details/84344186
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 23:30:37
  • 阅读 ( 952 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢