layui搭建管理后台系统

本文介绍了如何使用layui框架构建后台管理系统,包括下载 Layui、项目结构设置、源码展示以及用户列表的搜索和表格操作。通过实例演示了如何实现导航栏菜单的动态加载和tab页的切换,以及表格数据的筛选和刷新功能。
摘要由CSDN通过智能技术生成

先上最终效果图:

 点击左侧的菜单树可以显示在导航栏中

下面是具体步骤:

①下载layui

https://www.layui.com/

 新地址:开始使用 - Layui 文档

②项目结构介绍

 

 html:存放静态界面

img:存放图片

json:模拟请求数据,展示用

layui:步骤一下载的文件

③源码

index.html 

<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>后台管理系统</title>
		<link rel="stylesheet" href="../layui/css/layui.css" rel="external nofollow">
		<link rel="stylesheet" href="//at.alicdn.com/t/font_2696345_ubdu47c0yba.css">
		<script src="../layui/layui.js"></script>
	</head>
	<body>
		<div class="layui-layout-admin">
			<!--头部-->
			<div class="layui-header">
				<div class="layui-logo">后台管理系统</div>
				<ul class="layui-nav layui-layout-right">
					<li class="layui-nav-item">
						<a href=""><img src="../img/1.jpg" class="layui-nav-img">admin</a>
						<dl class="layui-nav-child">
							<dd><a href="">基本资料</a></dd>
							<dd><a href="">安全设置</a></dd>
						</dl>
					</li>
				</ul>
			</div>

            //统一处理图标和文字之间的距离
			<style>
				.iconset {
					margin-right: 5px;
				}
			</style>
			<!--左侧-->
			<div class="layui-side layui-bg-black">
				<div class="layui-side-scroll">
					<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="demo" style="margin-right: 10px;">
						<li class="layui-nav-item layui-nav-itemed">
							<a href="javascript:;"><i class="layui-icon layui-icon-set iconset"></i>系统管理</a>
							<dl class="layui-nav-child">
								<dd><a href="javascript:;" data-type="toAdd" class="subMenu" data-id="1" data-title="用户管理" data-url="userList.html"><i
										 class="iconfont  icon-yonghu iconset"></i>用户管理</a></dd>
								<dd><a href="javascript:;" data-type="toAdd" class="subMenu" data-id="2" data-title="系统配置管理" data-url=""><i
										 class="iconfont  icon-ziyuan iconset"></i>系统配置管理</a></dd>
							</dl>
						</li>
						<li class="layui-nav-item layui-nav-itemed">
							<a href="javascript:;"><i class="iconfont  icon-choujiang iconset"></i>抽奖管理</a>
							<dl class="layui-nav-child">
								<dd><a href="javascript:;" data-type="toAdd" class="subMenu" data-id="3" data-title="奖品管理" data-url=""><i class="iconfont  icon-jiangpin iconset"></i>奖品管理</a></dd>
								<dd><a href="javascript:;" data-type="toAdd" class="subMenu" data-id="4" data-title="中奖查询" data-url=""><i class="iconfont  icon-jilu iconset"></i>中奖查询</a></dd>
							</dl>
						</li>
					</ul>
				</div>
			</div>

			<image></image>
			<!--中间主体-->
			<div class="layui-body" id="container">
				<div class="layui-tab" lay-filter="tabs" lay-allowClose="true">
					<ul class="layui-tab-title">
					</ul>
					<div class="layui-tab-content">
					</div>
				</div>
			</div>

			<!--底部-->
			<div class="layui-footer">
				<center>XXX版权所有</center>
			</div>
		</div>
		<script>
			layui.use(['element'], function() {
				var element = layui.element;
				// var layer = layui.layer;
				var $ = layui.$;
				// 配置tab实践在下面无法获取到菜单元素
				$('.subMenu').on('click', function() {
					var dataid = $(this);
					//这时会判断右侧.layui-tab-title属性下的有lay-id属性的li的数目,即已经打开的tab项数目
					if ($(".layui-tab-title li[lay-id]").length <= 0) {
						//如果比零小,则直接打开新的tab项
						active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
					} else {
						//否则判断该tab项是否以及存在
						var isData = false; //初始化一个标志,为false说明未打开该tab项 为true则说明已有
						$.each($(".layui-tab-title li[lay-id]"), function() {
							//如果点击左侧菜单栏所传入的id 在右侧tab项中的lay-id属性可以找到,则说明该tab项已经打开
							if ($(this).attr("lay-id") == dataid.attr("data-id")) {
								isData = true;
							}
						})
						if (isData == false) {
							//标志为false 新增一个tab项
							active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
						}
					}
					//最后不管是否新增tab,最后都转到要打开的选项页面上
					active.tabChange(dataid.attr("data-id"));
				});

				var active = {
					//在这里给active绑定几项事件,后面可通过active调用这些事件
					tabAdd: function(url, id, name) {
						//新增一个Tab项 传入三个参数,分别对应其标题,tab页面的地址,还有一个规定的id,是标签中data-id的属性值
						//关于tabAdd的方法所传入的参数可看layui的开发文档中基础方法部分
                        //tabs:中间主体的fiter名
						element.tabAdd('tabs', {
							title: name,
							content: '<iframe data-frameid="' + id + '" scrolling="auto" frameborder="0" src="' + url +
								'" style="width:100%;height:99%;"></iframe>',
							id: id //规定好的id
						})
						FrameWH(); //计算ifram层的大小
					},
					tabChange: function(id) {
						//切换到指定Tab项
						element.tabChange('tabs', id); //根据传入的id传入到指定的tab项
					},
					tabDelete: function(id) {
						element.tabDelete("tabs", id); //删除
					}
				};

				function FrameWH() {
					var h = $(window).height();
					$("iframe").css("height", h + "px");
				}
			});
		</script>
	</body>
</html>

userList.html

<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>用户列表</title>
		<link rel="stylesheet" href="../layui/css/layui.css" rel="external nofollow">
		<script src="../layui/layui.js"></script>
	</head>
	<body style="padding-left: 10px;padding-right: 10px;">
		<div class="searchTable">
			用户名:
			<div class="layui-inline">
				<input class="layui-input" name="userName" id="userName" autocomplete="off">
			</div>
			手机号:
			<div class="layui-inline">
				<input class="layui-input" name="phoneNo" id="phoneNo" autocomplete="off">
			</div>
			<button id="searchBtn" class="layui-btn" data-type="reload">搜索</button>
		</div>
		<table class="layui-hide" id="test"></table>

		<script>
			layui.use('table', function() {
				var table = layui.table;

				table.render({
					elem: '#test',
					url: '../json/user.json',
					toolbar: '#toolbarDemo', //开启头部工具栏,并为其绑定左侧模板
					page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
						layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
							//,curr: 5 //设定初始在第 5 页
							,
						groups: 1 //只显示 1 个连续页码
							,
                        limit: 10, //默认的第一个每页记录数
                        limits : [50,100,150], //记录数的选择范围
						first: false //不显示首页
							,
						last: false //不显示尾页

					},
					cols: [
						[{
							type: 'checkbox',
							fixed:'left'
						}, {
							field: 'id',
							align:'center',
							title: 'ID',
							sort: true
						}, {
							field: 'username',
							align:'center',
							title: '用户名'
						}, {
							field:'phone',
							align:'center',
							title:'手机号'
						},{
							field: 'sex',
							align:'center',
							title: '性别',
							sort: true
						}, {
							field: 'city',
							align:'center',
							title: '城市'
						},{
							fixed: 'right',
							title: '操作',
							toolbar: '#barDemo'
						}]
					]

				});


                  var $ = layui.$, active = {
		            reload: function(){
                        //查询条件组装
		            	var queryWhere = {}; 
		            	
                        //搜索框自定义的id
		                var companyName$_ = $('#companyName');
		                if(companyName$_.val()!=''){
		                	 queryWhere['companyName'] = companyName$_.val();
		                }  
		                
		                //执行重载
		                table.reload('test', {
		                    page: {
		                        curr: 1 //重新从第 1 页开始
		                    }
		                    ,where: queryWhere
		                    ,done: function(res, curr, count){
		                    	this.where= queryWhere;
		                    }
		                }, 'data');
		            }
		        };

		        $('.searchTable .layui-btn').on('click', function(){
		            var type = $(this).data('type');
		            active[type] ? active[type].call(this) : '';
		        });
		        
		        //头部工具栏
		        table.on('toolbar(test)', function(obj) {
					// debugger;
					//var checkStatus = table.checkStatus(obj.config.id);
					switch (obj.event) {
						case 'add':
							{
								var addIndex = layer.open({
									type: 2,
									area: ['700px', '450px'],
									fixed: false, //不固定
									maxmin: true,
									content: url, //url自定义
								});
								layer.full(addIndex);
							}
							break;
					};
				});
		        
		      	//监听操作工具条
		        table.on('tool(test)', function(obj){
		          var data = obj.data;
		           if(obj.event === 'edit'){
		            var updateIndex = layer.open({
						type: 2,
						area: ['700px', '450px'],
						fixed: false, //不固定
						maxmin: true,
						content: url, //url自定义
					});
					layer.full(updateIndex);
		          }
		        });
				
			});
		</script>

		<!-- 操作栏的两个内容,id要和toolbar的一样 -->
		<script type="text/html" id="barDemo">
			<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
		       <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
		</script>

		<!-- 头部工具栏按钮 -->
		<script type="text/html" id="toolbarDemo">
			<div class="layui-btn-container">
		        <button class="layui-btn layui-btn-sm" lay-event="add">新增</button>
		        <button class="layui-btn layui-btn-sm" lay-event="del">删除</button>
		    </div>
		</script>
	</body>
</html>

user.json

{
	"code": 0,
	"msg": "success",
	"count": 14,
	"data": [{
		"id": 1,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 2,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 3,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 4,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 5,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 6,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 7,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 8,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 9,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 19,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 11,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 12,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	},{
		"id": 13,
		"username": "zs",
		"phone":"182****3110",
		"sex": "男",
		"city": "台州"
	},
	{
		"id": 14,
		"username": "ls",
		"phone":"182****3110",
		"sex": "女",
		"city": "台州"
	}]
}

更多使用技巧(radio的选择、下拉框回写、自定义数据展示模板等)查看:

layui积累_� 大狗子的博客-CSDN博客

④图标获取

通过这个地址:iconfont-阿里巴巴矢量图标库

使用方法参考:前端引入icon的方法(iconfont,fontawesome) - 简书

以下是使用最新版layui搭建后台模板的步骤: 1. 准备工作 首先,你需要在电脑上安装好编辑器,比如VS Code、Sublime等。还需要安装Node.js和npm。 2. 初始化项目 在命令行中进入你想要创建项目的目录,执行以下命令: ``` npm init -y ``` 它会在当前目录下创建一个package.json文件,其中包含了你的项目信息。接下来,执行以下命令安装layui: ``` npm install layui ``` 3. 创建html页面 在你的项目目录下创建一个index.html文件,并在文件中添加以下代码: ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>后台管理系统</title> <link rel="stylesheet" href="./node_modules/layui-src/dist/css/layui.css"> </head> <body> <script src="./node_modules/layui-src/dist/layui.js"></script> </body> </html> ``` 以上代码引入了layui的CSS和JS文件。 4. 创建JS文件 在项目目录下创建一个main.js文件,并在文件中添加以下代码: ``` layui.use(['element', 'layer'], function(){ var element = layui.element; var layer = layui.layer; layer.msg('Hello World'); }); ``` 以上代码使用了layui的element和layer模块,其中element模块用于创建菜单,layer模块用于弹出层。layer.msg()是layer模块中的一个方法,用于创建一个信息框弹窗。 5. 运行项目 在命令行中执行以下命令启动项目: ``` node main.js ``` 在浏览器中打开index.html文件,你应该能看到一个简单的后台模板。 至此,你已经成功使用最新版layui搭建了一个后台模板。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值