首页 > 其他分享 >Layui后台管理系统布局模板【菜单展开/收起、全屏、个人信息、更多】

Layui后台管理系统布局模板【菜单展开/收起、全屏、个人信息、更多】

时间:2025-01-09 15:59:45浏览次数:3  
标签:style easy Layui 全屏 querySelector layui document 模板 left

一、前言

适合初学开发者和学生使用,可做静态网页或者后台管理系统,支持基本功能。除引用layui外无任何多余依赖。

layui依赖:https://layui.dev/
如下图直接下载,引入项目中!
在这里插入图片描述

二、源码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>EASY后台</title>
    <link rel="stylesheet" href="./static/layui/css/layui.css">
</head>
<body class="layui-layout-body">
<style>
    /* 顶部样式 */
    .layui-header {
        padding: 0 20px;
    }

    .layui-logo {
        line-height: 60px;
        text-align: center;
    }

    .easy-logo-img {
        width: 30px;
        height: 30px;
        vertical-align: middle;
        border-style: none;
    }

    .easy-logo-title {
        font-size: 20px;
        font-weight: bold;
        font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
        position: relative;
    }

    /* 侧边菜单样式 */
    .layui-side {
        width: 200px;
    }

    .layui-nav-tree .layui-nav-item a {
        overflow: visible;
    }

    /* 主体样式 */
    .layui-tab {
        margin: 0;
    }

    .layui-tab-content {
        padding: 0;
    }

    /* 底部样式 */
	.layui-footer-body {
        position: fixed;
        right: 20px;
    }
</style>
<div class="layui-layout layui-layout-admin">
    <!-- 顶部区域 -->
    <div class="layui-header">
        <div class="layui-logo">
            <img class="easy-logo-img" src="./static/images/logo.png">
            <span class="easy-logo-title">后台管理系统</span>
        </div>
        <ul class="layui-nav layui-layout-left">
            <li class="layui-nav-item layui-show-xs-inline-block" lay-header-event="spreadMenu">
                <i class="layui-icon layui-icon-shrink-right" id="spreadMenu"></i>
            </li>
        </ul>
        <ul class="layui-nav layui-layout-right">
            <li class="layui-nav-item layui-show-xs-inline-block" lay-header-event="fullScreen">
                <i class="layui-icon layui-icon-screen-full" id="fullScreen"></i>
            </li>
            <li class="layui-nav-item layui-hide layui-show-sm-inline-block">
                <a href="javascript:;">
                    <img src="./static/images/logo.png" class="layui-nav-img">张三
                </a>
                <dl class="layui-nav-child">
                    <dd><a href="javascript:;" lay-header-event="updateInfo">个人资料</a></dd>
                    <dd><a href="javascript:;" lay-header-event="updatePwd">修改密码</a></dd>
                    <dd><a href="javascript:;" lay-header-event="logout">退出登录</a></dd>
                </dl>
            </li>
            <li class="layui-nav-item" lay-header-event="rightMore" lay-unselect>
                <a href="javascript:;">
                    <i class="layui-icon layui-icon-more-vertical"></i>
                </a>
            </li>
        </ul>
    </div>

    <!-- 左侧导航区域 -->
    <div class="layui-side layui-tab">
        <ul class="layui-nav layui-nav-tree layui-side layui-nav-side" lay-filter="easy-menu">
            <li class="layui-nav-item easy-menu-item">
                <a href="javascript:;" data-url="welcome.html" data-title="首页">
                    <i class="layui-icon layui-icon-home"></i>
                    <span class="easy-menu-title">首页</span>
                </a>
            </li>
            <li class="layui-nav-item easy-menu-item">
                <a href="javascript:;">
                    <i class="layui-icon layui-icon-username"></i>
                    <span class="easy-menu-title">系统管理</span>
                </a>
                <dl class="layui-nav-child">
                    <dd>
                        <a href="javascript:;" data-url="dept.html" data-title="部门管理">
                            部门管理
                        </a>
                    </dd>
                    <dd>
                        <a href="javascript:;" data-url="user.html" data-title="用户管理">
                            用户管理
                        </a>
                    </dd>
                </dl>
            </li>
        </ul>
    </div>

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

            <div class="layui-tab-content"></div>
        </div>
    </div>

    <!-- 底部区域 -->
    <div class="layui-footer">
        <span class="layui-footer-body">
            © 2025 xxx 版权所有
        </span>
    </div>
</div>

<script src="./static/layui/layui.js"></script>
<script>
    layui.use(['element', 'layer', 'util'], function () {
        var $ = layui.jquery;
        var layer = layui.layer;
        var element = layui.element;
        var util = layui.util;

        // 监听菜单点击
        element.on('nav(easy-menu)', function (elem) {
            // 1.菜单样式展开逻辑
            var spreadBtn = document.querySelector('#spreadMenu');
            if (spreadBtn.classList.contains('layui-icon-spread-left')) {
                // 图标变化
                spreadBtn.classList.remove('layui-icon-spread-left');
                spreadBtn.classList.add('layui-icon-shrink-right');

                // 宽度变化
                document.querySelector('.layui-logo').style.width = '200px';
                document.querySelector('.layui-side').style.width = '200px';
                document.querySelector('.layui-nav.layui-nav-tree').style.width = '200px';
                document.querySelector('.layui-body').style.left = '200px';
                document.querySelector('.layui-footer').style.left = '200px';
                document.querySelector('.layui-layout-left').style.left = '200px';

                // 菜单文字显示
                document.querySelector('.easy-logo-title').style.display = '';
                document.querySelectorAll('.easy-menu-title').forEach(e => e.style.display = '');
                document.querySelectorAll('.easy-menu-item a .layui-icon-down').forEach(e => e.style.display = '');
            }

            // 2.页面打开逻辑
            var url = elem.attr('data-url');
            var title = elem.attr('data-title');
            if (!url) {
                return;
            }

            // 判断Tab是否已添加
            if ($(".layui-tab-title li[lay-id='" + url + "']").length <= 0) {
                tabEvent.add(url, title);
            }

            // 切换页面
            tabEvent.change(url);
        });

        // tab事件
        var tabEvent = {
            // 新打开Tab
            add: function (url, name) {
                element.tabAdd('easy-body', {
                    title: name,
                    content: '<iframe src="' + url + '" scrolling="auto" frameborder="0"  style="width:100%;height:100%;"></iframe>',
                    id: url
                })
                FrameWH();
            },
            // 切换Tab页
            change: function (url) {
                element.tabChange('easy-body', url);
            },
            // 删除指定Tab
            delete: function (url) {
                element.tabDelete("easy-body", url);
            },
            // 删除所有Tab
            deleteAll: function (urls) {
                $.each(url, function (i, item) {
                    element.tabDelete("easy-body", item);
                })
            }
        };

        // 打开首页
        tabEvent.add('welcome.html', '首页');
        tabEvent.change('welcome.html');

        // 重置iframe窗口大小
        $(window).resize(function () {
            FrameWH();
        })

        // 计算frame高度
        function FrameWH() {
            var h = $(window).height() - 60 - 40 - 44;
            $("iframe").css("height", h + "px");
        }

        // 头部事件
        util.event('lay-header-event', {
            // 菜单展开收起
            spreadMenu: function () {
                var spreadBtn = document.querySelector('#spreadMenu');
                // 是否收起状态?是->展开,否->收起
                if (spreadBtn.classList.contains('layui-icon-spread-left')) {
                    // 图标变化
                    spreadBtn.classList.remove('layui-icon-spread-left');
                    spreadBtn.classList.add('layui-icon-shrink-right');

                    // 宽度变化
                    document.querySelector('.layui-logo').style.width = '200px';
                    document.querySelector('.layui-side').style.width = '200px';
                    document.querySelector('.layui-nav.layui-nav-tree').style.width = '200px';
                    document.querySelector('.layui-body').style.left = '200px';
                    document.querySelector('.layui-footer').style.left = '200px';
                    document.querySelector('.layui-layout-left').style.left = '200px';

                    // 菜单文字图标显示
                    document.querySelector('.easy-logo-title').style.display = '';
                    document.querySelectorAll('.easy-menu-title').forEach(e => e.style.display = '');
                    document.querySelectorAll('.easy-menu-item a .layui-icon-down').forEach(e => e.style.display = '');
                } else {
                    // 图标变化
                    spreadBtn.classList.remove('layui-icon-shrink-right');
                    spreadBtn.classList.add('layui-icon-spread-left');

                    // 宽度变化
                    document.querySelector('.layui-logo').style.width = '50px';
                    document.querySelector('.layui-side').style.width = '50px';
                    document.querySelector('.layui-nav.layui-nav-tree').style.width = '50px';
                    document.querySelector('.layui-body').style.left = '50px';
                    document.querySelector('.layui-footer').style.left = '50px';
                    document.querySelector('.layui-layout-left').style.left = '50px';

                    // 菜单文字图标隐藏
                    document.querySelector('.easy-logo-title').style.display = 'none';
                    document.querySelectorAll('.easy-menu-title').forEach(e => e.style.display = 'none');
                    document.querySelectorAll('.easy-menu-item a .layui-icon-down').forEach(e => e.style.display = 'none');
                    document.querySelectorAll('.easy-menu-item.layui-nav-itemed').forEach(e => e.classList.remove('layui-nav-itemed'));
                }
            },
            // 全屏
            fullScreen: function () {
                var docE = document.documentElement;
                if (!document.fullscreenElement) {
                    if (docE.requestFullscreen) {
                        docE.requestFullscreen();
                    } else if (docE.mozRequestFullScreen) {
                        docE.mozRequestFullScreen();
                    } else if (docE.webkitRequestFullScreen) {
                        docE.webkitRequestFullscreen();
                    }

                    var fullScreenBtn = document.querySelector('#fullScreen');
                    fullScreenBtn.classList.remove('layui-icon-screen-full');
                    fullScreenBtn.classList.add('layui-icon-screen-restore');
                } else {
                    if (document.exitFullscreen) {
                        document.exitFullscreen();
                    } else if (document.mozCancelFullScreen) {
                        document.mozCancelFullScreen();
                    } else if (document.webkitCancelFullScreen) {
                        document.webkitCancelFullScreen();
                    }

                    var fullScreenBtn = document.querySelector('#fullScreen');
                    fullScreenBtn.classList.remove('layui-icon-screen-restore');
                    fullScreenBtn.classList.add('layui-icon-screen-full');
                }
            },
            // 右侧菜单事件
            rightMore: function () {
                layer.open({
                    type: 1,
                    title: '更多',
                    content: '<div style="padding: 15px;">处理右侧面板的操作</div>',
                    area: ['260px', '100%'],
                    offset: 'rt', // 右上角
                    anim: 'slideLeft', // 从右侧抽屉滑出
                    shadeClose: true,
                    scrollbar: false
                });
            },
            // 修改个人信息
            updateInfo: function () {
                // todo
                console.log("修改个人信息");
            },
            // 修改密码
            updatePwd: function () {
                // todo
                console.log("修改密码");
            },
            // 退出登录
            logout: function () {
                // todo
                console.log("退出登录");
            }
        });
    });
</script>
</body>
</html>

三、界面

3.1 基本布局

在这里插入图片描述

3.2 菜单收起

在这里插入图片描述

3.3 全屏

在这里插入图片描述

3.4 更多

在这里插入图片描述

标签:style,easy,Layui,全屏,querySelector,layui,document,模板,left
From: https://blog.csdn.net/weixin_39311781/article/details/145035823

相关文章

  • 深度学习基础框架通用模板 (Pytorch Template) - cifar10 图片分类为例,深度学习模板
    文章目录项目简介运行结果展示文件和目录结构说明功能模块详解1.数据相关2.模型相关3.工具函数4.可视化5.训练和日志6.主程序使用方法1.克隆项目2.创建并激活Python3.9虚拟环境3.安装依赖4.安装Jupyter及相关依赖2.数据准备3.开始训练4.可视化结果快......
  • 代码精简之路-模板模式
    1.前言程序员怕重复CRUD,总是做一些简单繁琐的事情。“不要重复造轮子”,“把基础功能提炼出来封装成工具类”我喜欢把这些话挂在嘴边,写起来常不知从何下手。下面拆解一个项目中的功能。记录从复制粘贴到对业务抽象、实现功能分层的详细过程。如何着手提升代码重构优化能力,拿到......
  • 玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
    系列文章目录01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南文章目录系列文章目录前言一、LangChain环境搭建与初始配置1.1安装依赖1.2环境变量加载1.2.1具体步骤1.2.2注意事项1.3初始化模型客户端二、基础示例:与模型交互2.1直接调用模型2.1.1......
  • Zabbix安装,配置模板监控主机(在线安装和离线安装)
    安装环境组件版本LinuxRockyLinux8ZabbixZabbix6.0MySql8.0.30(根据Zabbix6搭建时的经验,MySql版本太低的话会不兼容Zabbix,但当时的报错找不到了,所以未能在此展示)IP监控192.168.88.1&&被监控192.168.88.2安装步骤#离线安装https://repo.zabbix.com/zabbix/7.0/rocky/......
  • 使用LangChain模板在Amazon Bedrock上配置Anthropic‘s Claude作为聊天机器人
    文章目录概要整体架构流程技术名词解释技术细节小结概要提示:这里可以添加技术概要例如:openAI的GPT大模型的发展历程。整体架构流程提示:这里可以添加技术整体架构例如:在语言模型中,编码器和解码器都是由一个个的Transformer组件拼接在一起形成的。技术......
  • ThinkPHP5框架下解决路径配置错误导致模板无法找到的问题
    问题描述:在使用ThinkPHP5开发Web应用程序时,有时会遇到因为路径设置不当而导致试图加载的视图文件不存在的情况。面对这样的报错提示,我们应该怎样排查并修复呢?解决方案:确认项目目录结构:检查项目的物理文件夹组织方式是否与预期一致,特别是application目录下的控制器、模型、视图......
  • 如何修改网站模板框架
    网站模板框架决定了网站的整体外观和布局。当需要更改网站的设计风格或布局时,如何修改模板框架呢?解决方案:备份网站文件:在进行任何修改之前,务必备份网站的所有文件和数据库,以防出现意外情况。选择合适的模板:根据网站的需求选择一个合适的模板。可以使用现有的模板,也可以自定义......
  • 【Vue.js 2.x源码解析】第22章 从解析到 AST:Vue 模板编译的实现
    第22章从解析到AST:Vue模板编译的实现parse的神秘面纱解析的整体流程正则驱动的HTML解析栈结构管理DOM层级小结Vue编译原理|AST解析|前端基础你会不会在用Vue2写一个组件时,忽然想到,模板字符串是怎么变成DOM的?深入研究一番你会发现,发现背......
  • 【静态网页模板源码】000061 响应式深绿灰白企业模板组件网站-响应式(附源码)
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 2025新年祝福和照片环绕HTML离线模板可以自己更改音乐照片等等
    给大家介绍两款好看浪漫的祝福代码UC网盘百度网盘2025新年快乐<!DOCTYPEhtml><html> <head> <metahttp-equiv="content-type"content="text/html;charset=UTF-8"> <metacharset="UTF-8"><metahttp-equiv="X-UA-C......