Layui选项卡Tab:完美实现网页内容分类与导航

目录

什么是Layui选项卡?

Layui选项卡的作用

实现步骤

1、编写公共jsp(header.jsp)

2、jsp界面(main.jsp)

3、JS代码(main.js)

4、PermissionDao类的修改

5、最终运行结果


什么是Layui选项卡?

Layui选项卡是一种基于Layui框架的前端组件,用于创建多个选项卡并在其之间进行切换。Layui是一个轻量级、易用、灵活的前端UI框架,旨在简化前端开发过程

使用Layui选项卡,你可以在页面中创建多个选项卡标签,每个标签对应一个内容区域。用户可以点击选项卡标签来切换显示相应的内容区域。这种方式常用于页面的分组显示或切换不同的功能模块。

Layui选项卡提供了丰富的配置选项,包括标签样式、选项卡切换的触发事件、内容区域的布局方式等。它还支持动态添加和删除选项卡,以及自定义选项卡的样式和功能。

总之,Layui选项卡是一种方便、灵活的前端组件,可用于创建多个选项卡,并在其之间切换显示不同的内容区域。

Layui选项卡的作用

  1. 分组显示内容:Layui选项卡可以将相关的内容分组显示在不同的选项卡中。例如,在一个表单页面中,可以使用选项卡将不同部分的表单内容进行分组,使用户能够更方便地切换查看和编辑不同的表单区域。
  2. 页面布局切换:Layui选项卡可以用于页面布局的切换。通过将不同的页面布局放置在不同的选项卡中,用户可以在不同的布局之间进行切换,实现页面结构的变化。这在一些需要展示不同类型或不同风格页面的应用中非常有用。
  3. 多标签页管理:Layui选项卡可以用于创建多标签页的界面,类似于浏览器的标签页功能。每个选项卡可以对应一个页面或功能模块,用户可以通过点击选项卡来快速切换不同的页面或功能,提高用户的操作效率。
  4. 动态控制选项卡:Layui选项卡支持动态添加和删除选项卡,可以根据业务需求来灵活控制选项卡的数量和内容。这对于需要根据用户操作动态生成选项卡的场景非常有用,可以实现动态的页面切换和内容展示。

Layui选项卡主要用于分组显示内容页面布局切换多标签页管理动态控制选项卡等场景,提供了方便的界面交互和操作方式。

实现步骤

我们最终要达到的一个效果

 

看过我前面的博客都知道,我是在前面博客的基础上继续写的一个案例


首先记住我们这次的博客包、类、jsp界面以及我们的资源放置位置

 

1、编写公共jsp(header.jsp)

在这个里面我和前面的进行了一个修改,并且添加了一个<base>标签

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 引入 layui.css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css">
<!-- 引入 layui.js -->
<script src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script>
<base href="${pageContext.request.contextPath }/" />

2、jsp界面(main.jsp)

我们在前面已有的界面上进行一个界面的修改,在主内容区域里面添加我们的Tab标签
 

            <!-- 内容主体区域 --><div class="layui-tab" lay-filter="tab" lay-allowclose="true"><ul class="layui-tab-title"></ul><div class="layui-tab-content"></div></div>

整体的JSP界面代码
 

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>后台首页</title>
<%@include file="/common/header.jsp"%>
<script src="static/js/main.js"></script>
</head>
<body><div class="layui-layout layui-layout-admin"><div class="layui-header"><div class="layui-logo layui-hide-xs layui-bg-black">Layui</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"><iclass="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:;">navgroups</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:;"> <imgsrc="//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"></ul></div></div><div class="layui-body"><!-- 内容主体区域 --><div class="layui-tab" lay-filter="tab" lay-allowclose="true"><ul class="layui-tab-title"></ul><div class="layui-tab-content"></div></div></div><div class="layui-footer"><!-- 底部固定区域 -->底部固定区域</div></div></body>
</html>

我在JSP的界面添加了一个导入js的标签,在后面的代码里面做铺垫

<script src="static/js/main.js"></script>

3、JS代码(main.js)

可以在刚开始的资源放置位置图和JSP界面编写的代码可以看出,我们的js代码进行了一个分开的编写,并没有在JSP界面进行一个编写


var element,layer,util,$;
layui.use(['element', 'layer', 'util'], function(){element = layui.element,layer = layui.layer,util = layui.util,$ = layui.$;$.ajax({url : 'tree.action?methodName=menus',method : 'post',dataType : 'json',success : function(data) {console.log(data);var htmlTree="";$.each(data,function(index,node){htmlTree+='<li class="layui-nav-item layui-nav-itemed">';htmlTree+='<a href="javascript:;">'+node.text+'</a>';if (node.hasChildren) {var children=node.children;htmlTree+='<dl class="layui-nav-child">';$.each(children,function(i,n){htmlTree+='<dd><a href="javascript:;" onclick="OpenTabAdd(\''+n.text+'\',\''+n.attributes.self.url+'\',\''+n.id+'\')">'+n.text+'</a></dd>';});htmlTree+='</dl>';}htmlTree+='</li>';});$("#menu").html(htmlTree);/* 进行渲染 */element.render('menu');} });});function OpenTabAdd(title,content,id){var $node = $('li[lay-id="' + id + '"]');// 如果点击的树形菜单在Tab里面有选项卡了就不添加,没有就添加if ($node.length == 0) {// 新增一个Tab项element.tabAdd('tab', {title: title,content: "<iframe frameborder='0' src='"+content+"' scrolling='auto' style='width:100%;height:100%;'></iframe>",id: id});}element.tabChange('tab', id); // 切换}
var $node = $('li[lay-id="' + id + '"]');

这一行代码用来获取你点击的树形菜单

element.tabChange('tab', id); // 切换

这一行代码用来获取点击的tab进行一个跳转
 

4、PermissionDao类的修改

我们在js的代码里面看到过这行代码
 

htmlTree+='<dd><a href="javascript:;" onclick="OpenTabAdd(\''+n.text+'\',\''+n.attributes.self.url+'\',\''+n.id+'\')">'+n.text+'</a></dd>';

我们在编写PermissionDao里面的方法的时候没有添加我们的url,所以我们获取不到url,

我们要更改PermissionDao里面的menus方法

/*** 将数据库的平级数据,转换为父子关系数据* * @param permission* @param pageBean* @return* @throws Exception*/public List<TreeVo<Permission>> menus(Permission permission, PageBean pageBean) throws Exception {List<TreeVo<Permission>> listtp = new ArrayList<>();List<Permission> list = this.listPermission(permission, pageBean);for (Permission p : list) {// 把我们的平级对象转换为父级关系TreeVo<Permission> tv = new TreeVo<>();tv.setId(p.getId() + "");tv.setText(p.getName());tv.setParentId(p.getPid() + "");// 添加tab--urlMap<String, Object> maps = new HashMap<>();maps.put("self", p);// 我们不可能在TreeVo里面建Permission所有的属性,可以用map集合保存起来并存储在TreeVo里面tv.setAttributes(maps);listtp.add(tv);}// 这是我们还没有构建父子关系// return listtp;// 我们要做一个外层循环和一个内层循环return BuildTree.buildList(listtp, "-1");}

我们用Map集合添加了Permission里面的所有属性

我们可以用jsp界面打印一下


这下我们就有了url,我们就可以拿到url了。
就可以用n.attributes.self.url传到我们的方法里面去

 

完整的PermissionDao类方法

package com.zking.dao;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;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;/*** dao方法* * @author tgq**/
public class PermissionDao extends BaseDao<Permission> {/*** 查询导所有的* * @param permission* @param pageBean* @return* @throws Exception*/public List<Permission> listPermission(Permission permission, PageBean pageBean) throws Exception {String sql = "select * from t_oa_Permission";return super.executeQuery(sql, Permission.class, pageBean);}/*** 将数据库的平级数据,转换为父子关系数据* * @param permission* @param pageBean* @return* @throws Exception*/public List<TreeVo<Permission>> menus(Permission permission, PageBean pageBean) throws Exception {List<TreeVo<Permission>> listtp = new ArrayList<>();List<Permission> list = this.listPermission(permission, pageBean);for (Permission p : list) {// 把我们的平级对象转换为父级关系TreeVo<Permission> tv = new TreeVo<>();tv.setId(p.getId() + "");tv.setText(p.getName());tv.setParentId(p.getPid() + "");// 添加tab--urlMap<String, Object> maps = new HashMap<>();maps.put("self", p);// 我们不可能在TreeVo里面建Permission所有的属性,可以用map集合保存起来并存储在TreeVo里面tv.setAttributes(maps);listtp.add(tv);}// 这是我们还没有构建父子关系// return listtp;// 我们要做一个外层循环和一个内层循环return BuildTree.buildList(listtp, "-1");}}

5、最终运行结果

 

希望对你们有帮助!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选择适合外贸公司的企业邮箱?推荐哪些优质企业邮箱服务?

为外贸公司选择合适的企业邮箱是企业成功经营的关键。强大、安全、直观的企业邮箱能够满足不同平台上不同用户的需求&#xff0c;这是确保数据和消息与客户和合作伙伴准确沟通的关键。以下是外贸公司在选择企业邮箱时应考虑的一些规范: 1、安全 在考虑企业邮箱时&#xff0c;安…

java项目之二手车交易网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的二手车交易网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

视频孪生赋能智慧交通综合管理系统的数智化升级

交通是重大民生工程,涉及公共安全和人民群众切身利益,必须树牢安全发展理念,强化企业主体责任落实。根据国家标准《城市轨道交通公共安全防范系统工程技术规范》中要求&#xff1a; 未来的智慧交通系统要建立在安防集成平台的应用上&#xff0c;对各类重要部位进行视频图像与三…

完美解决win10系统cmd命令无法使用ssh

最近我在远程访问服务器的时候&#xff0c;在winR运行cmd的时候&#xff0c;输入ssh来获得本地和服务器映射&#xff0c;无法实现。提示&#xff1a;’SSH’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 下面的方法可以完美解决这个问题&#xff1a; 目…

48. 旋转图像

题目链接&#xff1a;力扣 解题思路&#xff1a;找规律&#xff0c;matrix[x][y] 旋转90度后的位置为 matrix[y][n-x-1] 解法一&#xff1a;使用额外的矩阵result保存旋转后的图像&#xff0c;则新矩阵中的元素与原矩阵的对应关系为result[y][n-x-1] matrix[x][y]&#xff0c;…

IDEA+springboot + ssm +shiro+ easyui +mysql实现的进销存系统

IDEAspringboot ssm shiro easyui mysql实现的进销存系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.首页3.修改密码4.系统日志5. 用户管理6. 角色管理7. 进货入库8.退货出库9.进货单据查询10.退货单据查询11.当前库存查询12.销售出库13.客户退货14. 销售单据查询15…

hydra详解(仅供学习参考)

一、概述。 Hydra是一款非常强大的渗透工具&#xff0c;由著名的黑客组织THC开发的一款开源工具。 二、使用方法。 hybra基础语法&#xff1a; hydra 参数 IP 服务 参数&#xff1a; -l login 小写&#xff0c;指定用户名进行破解 -L file 大写&#xff0c;指定用户的用户名…

小程序主包超1.5MB分包处理流程优化方案

"subPackages": [// 分包1 {"root": "src, // 根目录"pages": [{"path": "views/business/index", // 页面路径"name": "business_index","aliasPath": "/business/index",&…

性能测试的定义和基本概念

1.性能测试的定义: 测试人员借助性能测试工具&#xff0c;模拟系统在不同的场景下&#xff0c;对应的性能指标是否达到预期 2.性能测试和功能测试的区别: 功能测试:依靠人工执行 性能测试:依靠工具完成 功能测试:不管在什么场景下&#xff0c;只要能够正常就可以 性能测…

群晖NAS:docker查询注册表失败解决方案 docker安装网心云、mysql等

群晖NAS&#xff1a;docker查询注册表失败解决方案 差不多2023年4月底开始的&#xff0c;docker内不能直接搜索注册表。据说是有人在库里放了一些有意思的东西&#xff0c;被和谐掉了&#xff0c;所以也别指望什么时候能解封。 网上很多案例&#xff0c;都不能用。还有奇葩的…

开发工具篇第25讲:阿里云MFA绑定Chrome浏览器Authenticator插件

开发工具篇第25讲&#xff1a;阿里云MFA绑定Chrome浏览器Authenticator插件 本文是开发工具篇第25讲&#xff0c;登录阿里云旗下产品时&#xff0c;需要使用mfa登录&#xff0c;每次如果要用手机看mfa码很麻烦&#xff0c; Chrome浏览器提供了一个快捷的登录方法&#xff0c;可…

汽车应用级MS35774/MS35774A低噪声 256 细分微步进电机驱动

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率MOSFET &#xff0c;长时间工作的平均电 流可以达到 1.4A &#xff0c;峰值电流 2A 。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2 相步进…