版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31653405/article/details/84344186
效果图:
管理员权限菜单用户权限菜单
代码:
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"></i>
<cite th:text="${list.menuName}"></cite>
<i class="iconfont nav_right"></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"></i>
<cite th:text="${listMenuTreeNode.menuName}"></cite>
</a>
</li>
</ul>
</li>
以上是自己整理的,并测试过,可以直接用
-------------------------------------------------- -------------------------------------------------- ------------
文章中,有问题,可以在评论区评论,一起探讨编程中奥秘!
-------------------------------------------------- -------------------------------------------------- ------------
来都来了,代码看都看了,那就留个言呗,可以互动下!
-------------------------------------------------- -------------------------------------------------- ------------