Layui菜单模块

news2024/10/7 16:15:06

                                 今天继续有我给大家layui菜单在web中的应用          

                                          一.介绍

1.什么是菜单模块?

Layui是一个轻量级的前端框架,提供了丰富的UI组件和便捷的开发方式,而菜单模块是Layui中的一个核心组件之一,用于创建和管理网页导航菜单。

2.layui菜单模块有什么用?

Layui菜单模块是一种用于创建网页导航菜单的前端组件。具体而言,Layui菜单模块的作用包括:

1. 导航网页页面:可以使用Layui菜单模块创建网页的主导航菜单,使用户能够快速浏览和访问不同页面或功能模块。

2. 多级菜单支持:Layui菜单模块支持创建多级菜单,你可以通过嵌套菜单的方式来构建层级结构的菜单,便于组织和管理大量的菜单项。

3. 菜单事件响应:你可以利用Layui的事件监听机制,为菜单添加自定义的点击事件或其他交互行为,比如弹出窗口、执行相关操作等,以实现更丰富的用户交互效果。

4. 动态菜单生成:Layui菜单模块支持通过异步请求或动态数据生成菜单项,这意味着你可以根据需要动态地生成菜单,灵活地控制菜单的内容和显示。

5. 样式自定义:Layui菜单模块提供了多种样式和主题可供选择,你可以根据自己的需求自定义菜单的外观和样式,以适应不同的应用场景和界面设计。

总结而言,Layui菜单模块可以帮助前端开发人员快速构建出具备良好用户体验的网页导航菜单,实现页面间的导航和功能访问,并且提供了灵活的样式和事件配置,让开发者可以根据项目需求定制需求。

3.为什么layui现在仍然有企业在使用?

Layui作为一个简洁、易用且功能丰富的前端框架,仍然被一些企业所使用,主要有以下几个原因:

1. 轻量级和易用性:Layui的核心理念是“模块化”,它以轻量级、简单易用为设计目标,提供了丰富的UI组件和简洁的API,使得开发人员可以快速上手并进行快速开发。

2. 成熟稳定:Layui发布于2016年,已经经过多年的发展与迭代,拥有一定规模的用户群体和活跃的社区支持。由于其稳定性和成熟性,许多企业选择继续使用Layui来维护和改进他们现有的项目。

3. 兼容性强:Layui在设计和开发过程中考虑了兼容性问题,能够良好地运行在各种浏览器上,包括常见的Chrome、Firefox、Safari等主流浏览器,以及IE10+的版本。

4. 性能表现:Layui经过优化,具有良好的性能表现。它提供了按需加载和异步加载等机制,可以提升页面加载速度,避免资源浪费,提升用户体验。

5. 社区支持和插件丰富:Layui拥有活跃的社区和丰富的第三方插件,你可以从社区获取到各种实用的扩展和解决方案,帮助完成更复杂的功能需求。

综上所述,尽管前端技术发展迅速,Layui仍然有企业在使用,主要是因为它具备易用性、稳定性、兼容性和良好的性能表现等诸多优点,并且拥有社区的支持和插件生态系统。对于一些已有的项目或中小型企业来说,Layui提供了一种成熟、实用的解决方案,能够满足项目的需求。


                            二.将layui菜单栏部署在web中

1.思路

通过sql语句获得所有数据,在将原来的数据关系有平级,变成父子关系,最后在将数据放在jsp中!

2.实操

2.1查看数据库数据,编写实体

package com.zking.entity;

public class Permission {
/*
*lz
**
/
 private  long id;
 private   String  name;
 private    String   description;
 private    String   url;
 private  long pid;
 private    int ismenu;
 private   long   displayno;
public Permission(long id, String name, String description, String url, long pid, int ismenu, long displayno) {
	super();
	this.id = id;
	this.name = name;
	this.description = description;
	this.url = url;
	this.pid = pid;
	this.ismenu = ismenu;
	this.displayno = displayno;
}
/**
 * @return the id
 */
public long getId() {
	return id;
}
/* (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
	return "Permission [id=" + id + ", name=" + name + ", description=" + description + ", url=" + url + ", pid=" + pid
			+ ", ismenu=" + ismenu + ", displayno=" + displayno + "]";
}
public Permission() {
	super();
}
/**
 * @param id the id to set
 */
public void setId(long id) {
	this.id = id;
}
/**
 * @return the name
 */
public String getName() {
	return name;
}
/**
 * @param name the name to set
 */
public void setName(String name) {
	this.name = name;
}
/**
 * @return the description
 */
public String getDescription() {
	return description;
}
/**
 * @param description the description to set
 */
public void setDescription(String description) {
	this.description = description;
}
/**
 * @return the url
 */
public String getUrl() {
	return url;
}
/**
 * @param url the url to set
 */
public void setUrl(String url) {
	this.url = url;
}
/**
 * @return the pid
 */
public long getPid() {
	return pid;
}
/**
 * @param pid the pid to set
 */
public void setPid(long pid) {
	this.pid = pid;
}
/**
 * @return the ismenu
 */
public int getIsmenu() {
	return ismenu;
}
/**
 * @param ismenu the ismenu to set
 */
public void setIsmenu(int ismenu) {
	this.ismenu = ismenu;
}
/**
 * @return the displayno
 */
public long getdisplayno() {
	return displayno;
}
/**
 * @param displayno the displayno to set
 */
public void setdisplayno(long displayno) {
	this.displayno = displayno;
}
 
 
}

 2.2编写dao方法

package com.zking.dao;

import java.util.ArrayList;
import java.util.List;

import com.sun.org.apache.bcel.internal.generic.RETURN;
import com.zking.entity.Permission;
import com.zking.util.BaseDao;
import com.zking.util.BuildTree;
import com.zking.util.PageBean;
import com.zking.util.TreeVo;

public class PermissionDao extends BaseDao<Permission> {

	public List<Permission> list(Permission permission, PageBean pageBean) throws Exception {
		String sql = "select *from  t_oa_permission  ";
		return super.executeQuery(sql, Permission.class, pageBean);
	}

	/**
	 * 将平级转换成父子关系
	 * 
	 * @throws Exception
	 * 
	 */
	public List<TreeVo<Permission>> menus(Permission permission, PageBean pageBean) throws Exception {
		List<TreeVo<Permission>>lst=new ArrayList<TreeVo<Permission>>();
		List<Permission> list = this.list(permission, pageBean);
        for (Permission p : list) {
        	TreeVo<Permission>vo=new TreeVo<>();
        	vo.setId(p.getId()+"");
        	vo.setText(p.getName());
        	vo.setParentId(p.getPid()+"");
        	lst.add(vo);
		}
		return   BuildTree.buildList(lst, "-1");
	}


}

2.3TreeVo构建父子关系

通过这个类,可以将同级关系,转化成为父子关系

package com.zking.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class TreeVo<T> {
	/**
	 * 节点ID
	 */
	private String id;
	/**
	 * 显示节点文本
	 */
	private String text;
	/**
	 * 节点状态,open closed
	 */
	private Map<String, Object> state;
	/**
	 * 节点是否被选中 true false
	 */
	private boolean checked = false;
	/**
	 * 节点属性
	 */
	private Map<String, Object> attributes;

	/**
	 * 节点的子节点
	 */
	private List<TreeVo<T>> children = new ArrayList<TreeVo<T>>();

	/**
	 * 父ID
	 */
	private String parentId;
	/**
	 * 是否有父节点
	 */
	private boolean hasParent = false;
	/**
	 * 是否有子节点
	 */
	private boolean hasChildren = false;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public Map<String, Object> getState() {
		return state;
	}

	public void setState(Map<String, Object> state) {
		this.state = state;
	}

	public boolean isChecked() {
		return checked;
	}

	public void setChecked(boolean checked) {
		this.checked = checked;
	}

	public Map<String, Object> getAttributes() {
		return attributes;
	}

	public void setAttributes(Map<String, Object> attributes) {
		this.attributes = attributes;
	}

	public List<TreeVo<T>> getChildren() {
		return children;
	}

	public void setChildren(List<TreeVo<T>> children) {
		this.children = children;
	}

	public boolean isHasParent() {
		return hasParent;
	}

	public void setHasParent(boolean isParent) {
		this.hasParent = isParent;
	}

	public boolean isHasChildren() {
		return hasChildren;
	}

	public void setChildren(boolean isChildren) {
		this.hasChildren = isChildren;
	}

	public String getParentId() {
		return parentId;
	}

	public void setParentId(String parentId) {
		this.parentId = parentId;
	}

	public TreeVo(String id, String text, Map<String, Object> state, boolean checked, Map<String, Object> attributes,
                  List<TreeVo<T>> children, boolean isParent, boolean isChildren, String parentID) {
		super();
		this.id = id;
		this.text = text;
		this.state = state;
		this.checked = checked;
		this.attributes = attributes;
		this.children = children;
		this.hasParent = isParent;
		this.hasChildren = isChildren;
		this.parentId = parentID;
	}

	public TreeVo() {
		super();
	}

}

2.3构建servelt ,配置xml文件

package com.zking.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.dao.PermissionDao;
import com.zking.entity.Permission;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.ResponseUtil;
import com.zking.util.TreeVo;

public class PermissionAction extends ActionSupport implements ModelDriver<Permission> {
	private Permission permission = new Permission();
	private PermissionDao pd = new PermissionDao();

	  
	public void menus(HttpServletRequest req, HttpServletResponse resp) {
	try {
		List<TreeVo<Permission>> menus = pd.menus( null, null);
	ResponseUtil.writeJson(resp, menus);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	}
	
	@Override
	public Permission getModel() {
		// TODO Auto-generated method stub
		return permission;
	}

}

在其中的ResponseUtil.writeJson(resp, menus);是我们封装的一个方法,

package com.zking.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.dao.PermissionDao;
import com.zking.entity.Permission;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.ResponseUtil;
import com.zking.util.TreeVo;

public class PermissionAction extends ActionSupport implements ModelDriver<Permission> {
	private Permission permission = new Permission();
	private PermissionDao pd = new PermissionDao();

	  
	public void menus(HttpServletRequest req, HttpServletResponse resp) {
	try {
		List<TreeVo<Permission>> menus = pd.menus( null, null);
	ResponseUtil.writeJson(resp, menus);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	}
	
	@Override
	public Permission getModel() {
		// TODO Auto-generated method stub
		return permission;
	}

}

配置xml文件 

	
	<action path="/permission" type="com.zking.web.PermissionAction">
	</action>

2.4在web实现效果

1.静态界面效果

 2.动态界面效果

 3.代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ include file="common/header.jsp"%>
<!DOCTYPE html PUBLIC >
<html>
<head>
<head>
<meta name="viewport"
	content="width=device-width,initial-scale=1.33,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<title>主程序</title>
<meta http-equiv="Content-Language" content="zh-CN">

</head>
<body>
	<div class="layui-layout layui-layout-admin">
		<div class="layui-header">
			<div class="layui-logo layui-hide-xs layui-bg-black">layout
				demo</div>
			<!-- 头部区域(可配合layui 已有的水平导航) -->
<ul class="layui-nav layui-layout-left">
	<!-- 移动端显示 -->
<li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm"
	lay-header-event="menuLeft"><i
	class="layui-icon layui-icon-spread-left"></i></li>
<!-- Top导航栏 -->
	<li class="layui-nav-item layui-hide-xs"><a href="">nav 1</a></li>
	<li class="layui-nav-item layui-hide-xs"><a href="">nav 2</a></li>
	<li class="layui-nav-item layui-hide-xs"><a href="">nav 3</a></li>
	<li class="layui-nav-item"><a href="javascript:;">nav
			groups</a>
		<dl class="layui-nav-child">
			<dd>
				<a href="">menu 11</a>
			</dd>
			<dd>
				<a href="">menu 22</a>
			</dd>
			<dd>
				<a href="">menu 33</a>
			</dd>
		</dl></li>
</ul>
<!-- 个人头像及账号操作 -->
	<ul class="layui-nav layui-layout-right">
		<li class="layui-nav-item layui-hide layui-show-md-inline-block">
			<a href="javascript:;"> <img
				src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg"
				class="layui-nav-img"> tester
		</a>
			<dl class="layui-nav-child">
				<dd>
					<a href="">Your Profile</a>
				</dd>
				<dd>
					<a href="">Settings</a>
				</dd>
				<dd>
					<a href="login.jsp">Sign out</a>
				</dd>
			</dl>
		</li>
		<li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
			<a href="javascript:;"> <i
				class="layui-icon layui-icon-more-vertical"></i>
		</a>
		</li>
	</ul>
</div>

<div class="layui-side layui-bg-black">
	<div class="layui-side-scroll">
		<!-- 左侧导航区域(可配合layui已有的垂直导航) -->
		<ul id="menu" class="layui-nav layui-nav-tree" lay-filter="menu">
			<li class="layui-nav-item layui-nav-itemed"><a class=""
				href="javascript:;">menu group 1</a>
				<dl class="layui-nav-child">
					<dd>
						<a href="javascript:;">menu 1</a>
					</dd>
					<dd>
						<a href="javascript:;">menu 2</a>
					</dd>
					<dd>
						<a href="javascript:;">menu 3</a>
					</dd>
					<dd>
						<a href="">the links</a>
					</dd>
				</dl></li>
			<li class="layui-nav-item"><a href="javascript:;">menu
					group 2</a>
				<dl class="layui-nav-child">
					<dd>
						<a href="javascript:;">list 1</a>
					</dd>
					<dd>
						<a href="javascript:;">list 2</a>
					</dd>
					<dd>
						<a href="">超链接</a>
					</dd>
				</dl></li>
			<li class="layui-nav-item"><a href="javascript:;">click
					menu item</a></li>
			<li class="layui-nav-item"><a href="">the links</a></li>

		</ul>
	</div>
</div>

<div class="layui-body">
	<!-- 内容主体区域 -->
<div style="padding: 15px;">内容主体区域。记得修改 layui.css 和 js 的路径</div>
</div>

<div class="layui-footer">
	<!-- 底部固定区域 -->
		底部固定区域
	</div>
</div>
<script>
//JS 
layui
		.use(
				[ 'element', 'layer', 'util' ],
				function() {
					var element = layui.element, layer = layui.layer, util = layui.util, $ = layui.$;
					$
							.ajax({
								url : "${pageContext.request.contextPath }/permission.action?methodName=menus",
								dataType : 'json',
								success : function(data) {
									console.log(data);
									var htmlar = '';
									$
											.each(
													data,
													function(i, n) {
														htmlar += '<li class="layui-nav-item layui-nav-itemed">';
														htmlar += '<a class=""  href="javascript:;">'
																+ n.text
																+ '</a>';
														if (n.hasChildren) {
															var Children = n.Children;
															htmlar += '<dl class="layui-nav-child">';
															$
																	.each(
																			data,
																			function(
																					idx,
																					node) {
																				htmlar += '<dd><a href="">'
																						+ node.text
																						+ '</a></dd>';
																			})
															htmlar += '</dl>';
														}
														htmlar += '</li>';
													})
									$("#menu").html(htmlar);
									element.render('menu');
								}
							});
				});
</script>
</body>
</html>
















本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊云科技,迈向十年新进阶

编辑&#xff1a;阿冒 设计&#xff1a;沐由 自2013年进入国内至今&#xff0c;亚马逊云科技见证了中国数字经济开启量质齐升的十年。在这十年里&#xff0c;亚马逊云科技持续不断地帮助广大中国企业实现上云重塑和云上创新。 从一间公司的时间节点而言&#xff0c;无论是中文的…

C. Removing Smallest Multiples - 贪心+思维

分析&#xff1a; 首先对于k&#xff0c;可以一直删除k的倍数&#xff0c;直到遇到1&#xff0c; 可以贪心从小到大枚举每一个数&#xff0c;统计删去所有0所在位置时的总代价。 代码&#xff1a; #include <bits/stdc.h>using namespace std;typedef long long ll; ty…

服务器数据库中了360后缀勒索病毒怎么办,怎么解决与防范?

随着网络攻击的不断增加&#xff0c;服务器中受到360后缀勒索病毒的威胁也日益严重。360后缀勒索病毒是beijingcrypt勒索家族中的病毒&#xff0c;该病毒采用了复杂的加密程序&#xff0c;一旦被该病毒攻击&#xff0c;它会将会对服务器上的所有文件进行加密&#xff0c;并要求…

Android系统启动流程分析

当按下Android系统的开机电源按键时候&#xff0c;硬件会触发引导芯片&#xff0c;执行预定义的代码&#xff0c;然后加载引导程序(BootLoader)到RAM&#xff0c;Bootloader是Android系统起来前第一个程序&#xff0c;主要用来拉起Android系统程序&#xff0c;Android系统被拉起…

设计模式——装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰者模式相比生成子类更灵活 优缺点和应用场景 优点 拓展某个类的功能&#xff0c;附加功能动态地给一个对象增加功能&#xff0c;这些功能可以动态地撤销需要给一批兄弟类进行改装或加…

Databend 开源周报第 101 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 教程 | 使用 AW…

【技能实训】DMS数据挖掘项目-Day05

文章目录 任务6【任务6.1】创建数据分析接口【任务6.2】创建数据过滤抽象类【任务6.3】编写日志数据分析类【任务6.4】创建日志数据分析测试类&#xff0c;测试任务6.1-6.3中的程序&#xff0c;演示日志信息的采集、分析及打印输出 任务6 【任务6.1】创建数据分析接口 在com.…

单片机如何开启TFTP服务器

一、开发测试环境 野火stm32开发板&#xff0c;w5500模块&#xff0c;Tftpd64软件&#xff0c;rt-thread操作系统和netutils软件包&#xff08;网络小工具集&#xff09;。&#xff08;RT-Thread 目前支持 TFTP 服务器和 TFTP 客户端&#xff09;。 二、tftp介绍-简单文件传输的…

matlab学习指南(1):matlab初步入门详细介绍

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

Linux C程序开发,多线程编程、网络编程

目录 多线程编程 网络编程 Linux C程序开发是指在Linux操作系统下使用C语言进行开发的过程。Linux是一种开源的操作系统&#xff0c;具有稳定性、安全性和灵活性等优点&#xff0c;因此在很多领域都得到了广泛的应用。 多线程编程 多线程编程是指在一个程序中同时运行多个线…

二、OAuth2 client对接Spring Authorization Server

这里用的是授权码模式 搭建&#xff1a;Spring Authorization Server 代码结构如下&#xff1a; 代码实现 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> …

Failed to connect to github.com port 443: Connection refused问题解决

文章目录 一、问题描述&#xff1a;Failed to connect to github.com port 443: Connection refused问题解决二、解决方法一&#xff1a;排查代理问题1、尝试重置代理或者取消代理的方式2、添加全局代理 三、解决方法二&#xff1a;排查DNS解析问题1、第一步&#xff1a;查找gi…

软考高级之系统架构师系列之软件开发模型

概述 如标题所述。本文面向于软考高级&#xff0c;具体来说是系统架构师。 本来几乎是纯粹的理论知识汇总&#xff0c;用于应付软考&#xff0c;在理解基础上注意抠字眼。 软件开发方法 分类描述结构化法强调用户至上&#xff0c;严格区分工作阶段&#xff0c;每阶段都有任…

老电脑如何用U盘重装系统?老电脑用U盘重装系统教程

老电脑如何用U盘重装系统&#xff1f;用户利用U盘来给老电脑重装系统&#xff0c;能够帮助解决老电脑运行缓慢、系统出现故障或感染病毒等问题&#xff0c;通过重装系统&#xff0c;可以清除旧的系统文件和应用程序&#xff0c;重新安装一个干净且高效的操作系统&#xff0c;那…

Java8实战-总结1

Java8实战-总结1 基础知识流处理用行为参数化把代码传递给方法并行与共享的可变数据Java需要演变 Java 中的函数 基础知识 流处理 流是一系列数据项&#xff0c;一次只生成一项。程序可以从输入流中一个一个读取数据项&#xff0c;然后以同样的方式将数据项写入输出流。一个程…

TypeScript 学习笔记(二):接口与类型别名、字面量类型

一、接口的定义 在面向对象的编程中&#xff0c;接口是一种规范的定义&#xff0c;它定义了行为和动作的规范&#xff0c;在程序设计里面&#xff0c;接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范&#xff0c;接口不关心这些类的内部状态数据&#xff0…

qt 聊天室

服务器端 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器对象server new QTcpServer(this);}Widget::~Widget() {delete ui; }…

ELK插件介绍

ELK插件介绍 一、Grok 正则捕获插件1、概述2、内置正则表达式调用3、自定义表达式调用 二、multiline 多行合并插件1、概念2、安装3、使用 multiline 插件 三、date 时间处理插件1、概念2、操作3、时间戳详解 四、mutate 数据修改插件1、概念2、案例 一、Grok 正则捕获插件 1、…

上海亚商投顾:沪指震荡反弹 新能源车产业链再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡反弹&#xff0c;创业板指午后涨近1%。新能源车产业链再度爆发&#xff0c;整车、零部件、智能驾驶等…

python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

简介 前边几篇&#xff0c;已经教小伙伴们掌握了如何生成HTML的测试报告&#xff0c;那么生成测试报告&#xff0c;我们也不能放在那里不管了&#xff0c;这样即使你报告在漂亮&#xff0c;领导也看不到。因此如果想向领导汇报工作&#xff0c;不仅需要提供更直观的测试报告。而…