当前位置: 首页 > 工具软件 > BootDo > 使用案例 >

bootdo增加多级菜单

边浩波
2023-12-01

在使用bootdo框架的时候,发现目录菜单只有一级,在此多加几级菜单

<!-- 根目录 -->
<li th:each="menu : ${menus}"><a href="#"> <i
                        class="fa fa fa-bar-chart-o" th:class="${menu.attributes.icon}"></i>
                    <span class="nav-label" th:text="${menu.text}">目录</span> <span
                            class="fa arrow"></span>
                </a>
			<!-- 在此添加子节点    分析 子节点会有目录和菜单两种情况 -->
			<ul class="nav nav-second-level">    
                    <!-- 遍历了每一个子菜单(二级) -->
                        
					<!--  判断是目录还是菜单    hasChildren这个判断更为直观 -->
                              				                       
                             <!-- 二级目录 --> 
                   				<li th:each="cmenu : ${menu.children}">   
                   							<!--有孩子  目录   class="nav-label"   <span class="fa arrow"></span>  -->
                   							<a  th:if=" ${cmenu.hasChildren} ">
                   								<i class="fa fa fa-bar-chart-o" th:class="${cmenu.attributes.icon}"></i>
					                       	<span class="nav-label" href="graph_echarts.html" th:text="${cmenu.text}"
					                             th:href="${cmenu.attributes.url}">系统管理</span>
					                       	<span class="fa arrow"></span>
					                   							
					                   		</a>
					                   							
                   							<!--无孩子  菜单  class="nav-label" -->
                   							<a  th:if=" !${cmenu.hasChildren} ">
                   								<i class="fa fa fa-bar-chart-o" th:class="${cmenu.attributes.icon}"></i>
					                       	<span class="J_menuItem" href="graph_echarts.html" th:text="${cmenu.text}"
					                             th:href="${cmenu.attributes.url}">系统管理</span>      							
					                   		</a>
					             </li>
			  </ul>

</li>

多级菜单css自己调整下,不擅长
这样就完成了菜单 ,三级节点继续添加,遍历cmenu.children
目录和菜单在数据库用不同的标志,由于框架封装的时候未带标志,在此用有没有子节点判断

在此看看封装树的源代码

public static <T> List<Tree<T>> buildList(List<Tree<T>> nodes, String idParam) {
		if (nodes == null) {
			return null;
		}
		List<Tree<T>> topNodes = new ArrayList<Tree<T>>();

		for (Tree<T> children : nodes) {

			String pid = children.getParentId();
			if (pid == null || idParam.equals(pid)) {
				topNodes.add(children);

				continue;
			}

			for (Tree<T> parent : nodes) {
				String id = parent.getId();
				if (id != null && id.equals(pid)) {
					parent.getChildren().add(children);
					children.setHasParent(true);
					parent.setChildren(true);

					continue;
				}
			}

		}
		return topNodes;
	}

将数据库中每条记录封装成list传递进来,参数传递根节点的父亲,一般是0;
外循环将根节点添加到了返回的新的list中,别的节点先记录其父亲编号(目的就是取出非根目录的父节点),然后内循环重新遍历list,找到这个“别的节点的父亲”,将自己添加到他这个父亲中。返回新的list
/-- 稍微有点混乱
简单说,就是先找到一个节点的父亲编号 ,然后根据这个编号去找到他的父亲,然后将自己添加到他这
个父亲里面

thymeleaf 判断表达式:

gt:great than(大于)>
ge:great equal(大于等于)>=
eq:equal(等于)==
lt:less than(小于)<
le:less equal(小于等于)<=
ne:not equal(不等于)!=
<a th:if=" 1 eq 1 "> 哈哈(显示)</a>
<a th:if=" 1 eq 2 "> 哈哈(不显示)</a>

thyneleaf语法就不过多赘述。

 类似资料: