LayUi之选项卡的详解(附源码讲解)

news2024/11/26 0:34:36

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于LayUi的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.选项卡是什么

二.选项卡在什么时候使用(常见使用场景) 

三.怎么完成点击指定菜单项显示对应的选项卡内容(思路)

效果展示

思路

表结构

dao

jsp界面

js


其中还是有用到自定义mvc框架,不懂的小伙伴可以点击下方链接查看
自定义MVC框架【上篇】http://t.csdn.cn/giVlE

自定义MVC框架【中篇】--框架实现icon-default.png?t=N658http://t.csdn.cn/pzCMx
自定义MVC框架【下篇】--运用框架完成增删改查http://t.csdn.cn/RHgke

一. 什么是树形结构

一.选项卡是什么

  • 选项卡(Tabs)是一种用户界面组件,用于在一个窗口或界面中显示多个相关内容或功能,并允许用户在这些内容或功能之间进行切换。每个选项卡通常代表一个独立的页面或功能模块,并且只有一个选项卡处于活动状态,其内容将显示在界面上
  • 选项卡通常以水平或垂直的方式排列在一个导航栏或标签栏上,在点击不同的选项卡时,界面会切换显示对应选项卡的内容。选项卡的标签通常显示简短的标题或图标,以便用户能够理解不同选项卡的含义。通过选项卡,用户可以轻松地访问和浏览多个相关内容或功能,并以直观的方式对界面进行组织和导航
  • 选项卡通常用于网页浏览器中的标签页,应用程序中的不同视图或功能模块,以及其他各种软件界面中。它们提供了一种方便的方式来组织和管理复杂的界面,使用户能够快速访问所需的内容,提高用户体验和界面的可用性

二.选项卡在什么时候使用(常见使用场景) 

  • 1. 产品详情页
    • 一个电子商务网站的产品详情页常常使用选项卡来组织不同类型的信息,例如商品描述、规格、用户评价、相关推荐等。用户可以通过点击选项卡来切换并查看不同类型的信息,提供更好的信息展示和用户体验
  • 2. 应用程序设置:
    • 许多应用程序拥有复杂的设置选项,为了使界面更加清晰和易于导航,通常会使用选项卡来分类和组织不同的设置。例如,一个音乐播放器的设置界面可以有选项卡包括音质设置、播放列表、界面主题等,用户可以轻松切换选项卡以修改所需的设置
  • 3. 新闻网站:
    • 新闻类网站通常具有多个不同的新闻类别,为了让用户方便地浏览不同类别的新闻,可以使用选项卡来展示每个类别的新闻。用户可以通过点击选项卡快速切换到所需的新闻类别,例如体育、科技、娱乐等
  • 4. 多语言支持:
    • 当一个网站或应用程序需要提供多个语言版本时,可以使用选项卡来切换不同的语言。每个选项卡代表一个语言,用户可以通过选择不同的选项卡来切换到所需的语言界面,便于在不同语言之间进行切换和查看内容
  • 5. 多步骤操作:
    • 某些应用程序或网站可能需要用户完成多个步骤来执行特定任务,例如表单填写、注册流程等。为了引导用户逐步完成操作并减少界面复杂度,可以使用选项卡来显示每个步骤,并引导用户在不同的选项卡之间导航

这些场景和案例说明展示了选项卡在不同应用领域的灵活应用,它们可以提供更好的界面组织、内容展示和用户导航体验。选项卡的使用有助于简化界面结构,提高用户交互效果,并增强用户对内容的可访问性

三.怎么完成点击指定菜单项显示对应的选项卡内容(思路)

效果展示

思路

1.先从官网将对应的组件块复制过来

2.拷贝到自己的项目中,再将其由静态的效果变成动态的效果(数据交互)

3.完成所需要的效果

       将选项卡的名字变成我们自己所点击的实际的名字(点击CSDN,那么便在选项卡的标签名中显示出CSDN)

       重名的选项卡不能够重复展示出多个

       如果点击了一次选项卡,那么在第二次点击它时,不展示新的选项卡,只需选中对应选项卡即可

表结构

 

实体类,工具类,配置文件等在上篇已经全部展示过,在此有不懂的小伙伴,可以点击下方链接查看 

LayUi之树形结构的详解(附有全案例代码)http://t.csdn.cn/6Io5t

dao

(dao层有些许的变化,添加二级菜单中的属性,如果我们还是运用上一篇的方法,那么我们需要在TreeVo工具类中写无数个属性,这样太过于繁杂,那么我们可以将所有的属性都用一个map集合装载起来,那么便可以一次拿到所有的属性👇👇)

package com.wh.dao;

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

import com.wh.entity.Permission;
import com.wh.entity.User;
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);
		}
	
	
	//将原数据转换成有层级关系的数据(借助自定义 工具类TreeVo完成)
	public List<TreeVo<Permission>> menus( Permission permission, PageBean pageBean) throws Exception {
		List<TreeVo<Permission>> menus = new ArrayList<>();
		List<Permission> list = this.list(permission, pageBean);
		for (Permission p : list) {
			TreeVo<Permission> tv = new TreeVo<>();
			tv.setId(p.getId()+"");
			tv.setParentId(p.getPid()+"");
			tv.setText(p.getName());
			Map<String , Object> map = new HashMap<>();
			map.put("self", p);
			tv.setAttributes(map);
			menus.add(tv);
		}
//		return menus;
		return BuildTree.buildList(menus, "-1");//-1是顶级节点的id
	}
		
		
}

jsp界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<%@include file="/common/head.jsp"%>
<script type="text/javascript" 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">光军会议OA系统</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">
					
				</ul>
			</div>
		</div>

		<div class="layui-body">
			<!-- 内容主体区域 -->
			<div class="layui-tab" lay-filter="demo" 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>

js

(为了规范,我们的js代码以及El表达式等是不应该出现在jsp页面中的,所以我们就可以将每个页面所对应的js代码封装起来,然后在引入到页面中)


var element,layer,util,$;
layui.use(['element', 'layer', 'util'], function(){
	  element = layui.element
	  ,layer = layui.layer
	  ,util = layui.util
	  ,$ = layui.$;
	  
	  //左侧树形菜单
	 $.ajax({
		 url:"permission.action?methodName=menus",
 		dataType:'json',
 		method: 'post',
		success: function(data) {
			console.info(data)
			var content=' ';
			$.each(data,function(i,n){
				content+=' <li class="layui-nav-item layui-nav-itemed"> ';
				content+='		<a class="" href="javascript:;">'+n.text+'</a> ';  
				
				if(n.hasChildren){
				var children =n.children;
				content+='<dl class="layui-nav-child"> ';
				$.each(children,function(idx,nodes){
					content+=' <dd><a href="javascript:;" onclick="openTab(\''+nodes.text+'\',\''+nodes.attributes.self.url+'\',\''+nodes.id+'\' )">'+nodes.text+'</a></dd> ';
//					content+=' <dd><a href="javascript:;" onclick="openTab()">'+nodes.text+'</a></dd> ';
				})
				content+='</dl>';
				}
				
				content+=' </li>';
			
			})
			
			$("#menu").html(content);
			 element.render();		
		}
	 })
});
	 
	 
	 
//	 //右侧选项卡
	 function openTab(title,content,id){
		 var $node=$('li[lay-id="'+id+'"]');
		 console.info($node);
				//新增一个Tab项
		 if($node.length==0){
			 element.tabAdd('demo', {
					title : title, //用于演示
					content :"<iframe src='"+content+"' width='100%' height='100%'></iframe>",
					id :id
				})
		 }
				//切换到指定Tab项
				element.tabChange('demo', id); //切换到:用户管理
			}
	 
	 	 
	 //右侧选项卡
//	 function openTab(title,content,id){
//				//新增一个Tab项
//		 element.tabAdd('demo', {
//		        title: '新选项'+ (Math.random()*1000|0) //用于演示
//		        ,content: '内容'+ (Math.random()*1000|0)
//		        ,id: new Date().getTime() //实际使用一般是规定好的id,这里以时间戳模拟下
//		      })
//		    }

      好啦,今天的分享就到这了,希望能够帮到你呢!😊😊         

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

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

相关文章

最新软件工程毕业设计选题推荐100例

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

IDEA debug 断点调试技巧

1、首先看下IDEA中Debug模式下的界面&#xff1a; ① 以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ② 断点&#xff1a;在左边行号栏单击左键&#xff0c;或者快捷键Ctrl…

Git教程-廖雪峰-个人归纳更新总结

文章目录 前言Git简介&#xff1a;Git的诞生&#xff1a;集中式和分布式 安装Git&#xff1a;创建版本库时光穿梭机(*)版本回退撤销修改删除文件 远程仓库&#xff1a;添加远程仓库&#xff1a;删除远程库与本地库的链接&#xff1a; 从远程库克隆(*) 使用GitHub 前言 日常需要…

微服务系列文章之 Redisson实现分布式锁

一、高效分布式锁 当我们在设计分布式锁的时候&#xff0c;我们应该考虑分布式锁至少要满足的一些条件&#xff0c;同时考虑如何高效的设计分布式锁&#xff0c;这里我认为以下几点是必须要考虑的。 1、互斥 在分布式高并发的条件下&#xff0c;我们最需要保证&#xff0c;同…

浅谈Python+requests+pytest接口自动化测试框架的搭建

框架的设计思路 首先要明确进行接口自动化需要的步骤&#xff0c;如下图所示&#xff1a; ​然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&#xff1a;了解接口要实现的功能 2&#xff09;数据准备&#xff1a;根据开发文档确定接口的基本情况&#x…

SuperMap iClient3D for Cesium最短路径分析

作者&#xff1a;Mei 目录 前言实现思路实现步骤1、构建二维网络数据集1.1拓扑检查1.2线拓扑数据集处理1.3构建二维网络数据集 2、发布网络分析服务3、实现代码 前言 在交通、消防业务场景中&#xff0c;如果某地发生火灾或者交通事故&#xff0c;需要快速规划出最短抢救路线&a…

河南元宇宙创造者大赛成果展示空间“元豫宙”斩获TopDigital创新营销奖金奖

6月29日&#xff0c;在上海举行的TopDigital营销盛典上&#xff0c;河南文旅元宇宙空间“元豫宙”&#xff0c;凭借其匠心独具的创新性场景设计、美轮美奂的超写实场景呈现、新潮炫酷的沉浸式虚拟体验&#xff0c;斩获TopDigital创新营销奖虚拟场景设计组金奖。元豫宙&#xff…

2023年31个最适合博主的WordPress主题

自从我最初开始写博客以来&#xff0c;在近十年的经验中&#xff0c;我已经出于各种目的在多个博客中测试和使用了数十种不同的 WordPress 主题。 以下是我挑选的绝对最佳WordPress主题&#xff0c;专门针对不想编写一行代码的博主。 无论您是想创建个人理财博客、撰写时尚、…

项目范围管理中8个常见错误,千万别大意!

管理项目范围就像驾驶汽车&#xff0c;如果不注视前方&#xff0c;汽车就会偏离道路。同样&#xff0c;如果不控制项目范围&#xff0c;项目就会偏离正轨。管理者在尝试管理项目范围时可能会遇到很多问题&#xff0c;下面来了解一下范围管理的常见错误&#xff0c;看看如何通过…

服务器数据库中了360后缀勒索病毒怎么办,如何预防勒索病毒攻击?

随着网络技术的不断发展&#xff0c;企业的计算机服务器也受到了网络安全威胁&#xff0c;近日&#xff0c;很多企业的服务器被360后缀勒索病毒攻击&#xff0c;导致企业的数据库中的许多重要数据被加密&#xff0c;无法正常读取打开。360后缀勒索病毒数据BeijingCrypt勒索病毒…

JVM 中的垃圾回收策略

文章目录 JVM 中的垃圾回收策略死亡对象的判断算法引用计数可达性分析 垃圾回收算法标记-清除算法复制算法标记-整理算法分代算法 JVM 中的垃圾回收策略 C 语言中&#xff0c;malloc 的内存必须 手动 free&#xff0c;否则容易出现内存泄漏&#xff08;光申请内存&#xff0c;…

Prometheus监控Tongweb容器

&#x1f3c5;概述 JMX Exporter主要是利用Java的JMX机制来读取JVM运行时的一些数据&#xff0c;然后转化为Prometheus可读取的metrics格式的数据。 JMX Exporter有两种用法&#xff1a; 启动独立进程。通过RMI读取JVM数据&#xff0c;但是单独进程监控也存在问题。JVM进程内启…

WSL 更新NVIDIA 驱动 安装CUDA

WSL 一定要使用WSL2&#xff0c;我选择的linux系统是ubuntu22.04&#xff0c;在微软应用商店安装的。 安装完成之后可以通过 wsl -l -v查看 NVIDIA 驱动 WSL 中不要直接安装linux版的显卡驱动&#xff0c;而是需要在windows中安装驱动。可以参考这篇文章NVIDIA官网文章 得保…

Spring Cache (基础知识+瑞吉外卖项目)

Spring Cache 基本介绍 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓…

机器学习实践(2.1)LightGBM分类任务

前言 LightGBM也属于Boosting集成学习模型(还有前面文章的XGBoost)&#xff0c;LightGBM和XGBoost同为机器学习的集大成者。相比越来越流行的深度神经网络&#xff0c;LightGBM和XGBoost能更好的处理表格数据&#xff0c;并具有更强的可解释性&#xff0c;还具有易于调参、输入…

Java 多线程编程在 JMeter 中应用

目录 前言&#xff1a; 首先新建一个简单的线程组和一个简单的请求&#xff1a; 添加 JSR223 预处理程序&#xff08;后置处理程序需要下一次次请求&#xff09; 可以通过复制私有变量来控制所有线程获取公共变量时的线程安全问题。 日志输出&#xff1a; 前言&#xff1a…

Excel VLOOKUP使用详解

VLOOKUP语法格式&#xff1a; VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) VLOOKUP&#xff08;要查找的值&#xff0c;查找区域&#xff0c;要返回的结果在查找区域的第几列&#xff0c;精确匹配或近似匹配&#xff09; 一、精确查找 根据姓名查找对应…

Jmeter之数据参数化方法汇总

一、什么是参数化 Jmeter参数化是指将脚本中的某些需要输入数据使用参数来代替&#xff0c;在脚本运行时指定参数的取值范围和规则。脚本在运行时就可以根据需要选取不同的参数值作为输入。 常用的Jmeter的参数化请求&#xff0c;包括以下几种方式&#xff1a; 用户参数用户…

Seata分布式事务失效场景

场景&#xff1a; Feign熔断降级&#xff1b;被调用服务全局异常捕获了&#xff1b; 解决方案&#xff1a; 将需要分布式事务的调用链异常一直往上抛出去&#xff1b; 参考&#xff1a;https://blog.csdn.net/qq_16468489/article/details/121798016手动开启全局事务并进行回…

观察者(Observer)模式

目录 使用场景参与者协作效果实现类图 观察者(Observer)又被称为 发布-订阅模式&#xff0c;是一种对象行为模式&#xff0c;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时所有依赖于它的对象都得到通知并自动更新。通知的发布者&#xff08;目标&a…