后台管理系统更新

news2024/10/1 15:27:54

菜单列表代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>菜单列表</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
    <link rel="stylesheet" href="../css/public.css" media="all">
</head>

<body>
    <div class="layuimini-container">

        <div class="layuimini-main">
            <script type="text/html" id="toolbarDemo">
        </script>
            <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>

            <script type="text/html" id="currentTableBar">
        </script>
        </div>
    </div>
    <script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
    <script src="../js/commons.js" charset="utf-8"></script>
    <script src="../js/jquery.min.js" charset="utf-8"></script>
    <script>


        layui.use(['form', 'table'], function () {
            var $ = layui.jquery,
                form = layui.form,
                table = layui.table;

            table.render({
                elem: '#currentTableId',
                url: http_txt + '/api/menu',
                method: 'post',
                toolbar: '#toolbarDemo',
                contentType: 'application/json',
                request: {
                    pageName: 'page',
                    limitName: 'limit'
                },
                defaultToolbar: [, {
                    title: '提示',
                    layEvent: 'LAYTABLE_TIPS',
                    icon: 'layui-icon-tips'
                }],
                cols: [[
                    { type: "checkbox", width: 50 },
                    { field: 'id', width: 80, title: 'ID', sort: true },
                    { field: 'name', width: 150, title: '菜单名称' },
                    // { field: 'parent_id', width: 150, title: '上级菜单' },
                    { field: 'parent_name', width: 150, title: '上级菜单' },
                ]],
                limits: [10, 15, 20, 25, 50, 100],
                limit: 15,
                page: true,
                skin: 'line',
                done: function (res, curr, count) {
                    var tableData = res.data;
                    var currentTable = this;
                    for (var i = 0; i < tableData.length; i++) {
                        // 根据条件更改行的样式
                        if (tableData[i].parent_name === null) {
                            var index = i;
                            var tr = $('.layui-table-body table tr[data-index="' + index + '"]');
                            tr.css('background-color', '#C8E6C9');
                        }
                    }
                }
            });

            // 监听搜索操作
            form.on('submit(data-search-btn)', function (data) {
                console.log(data)
                var result = JSON.stringify(data.field);

                // layer.alert(result, {
                //     title: '最终的搜索信息'
                // });

                //执行搜索重载
                table.reload('currentTableId', {
                    page: {
                        curr: 1
                    }
                    , where: {
                        remark: data.field.remark !== "" ? data.field.remark : undefined,
                        name: data.field.name !== "" ? data.field.name : undefined,
                        enable: data.field.enable !== "" ? parseInt(data.field.enable) : undefined,
                    }
                }, 'data');

                return false;
            });

            table.on('toolbar(currentTableFilter)', function (obj) {
                if (obj.event === 'add') {
                    var index = layer.open({
                        title: '添加角色',
                        type: 2,
                        shade: 0.2,
                        maxmin: true,
                        shadeClose: true,
                        area: ['100%', '100%'],
                        content: '../page/table/roleadd.html',
                        end: function () {
                            table.reload('currentTableId');
                        }
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });

                } else if (obj.event === 'delete') {
                    var checkStatus = table.checkStatus('currentTableId')
                        , data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                }
            });

            table.on('tool(currentTableFilter)', function (obj) {
                var data = obj.data

                if (obj.event === 'delete') {

                    layer.confirm('是否删除该角色?', function (index) {
                        $.ajax({
                            url: http_txt + '/api/del_role',
                            type: 'post',
                            headers: {
                                'Content-Type': 'application/json;charset=utf-8'
                            },
                            data: JSON.stringify({
                                id: data.id,
                            }),
                            success: function (response) {
                                if (response.code == 0 && response.msg == "success") {
                                    table.reload('currentTableId');
                                }
                                layer.msg(response.text);
                                layer.close(index)
                            },
                            error: function () {
                                layer.msg("删除失败!");
                                layer.close(index)
                            }
                        });
                    })
                } else if (obj.event === 'edit') {
                    console.log(data)
                    var param = JSON.stringify(data);
                    var index = layer.open({
                        title: '编辑角色信息',
                        type: 2,
                        shade: 0.2,
                        maxmin: true,
                        shadeClose: true,
                        area: ['100%', '100%'],
                        content: '../page/table/roleedit.html?param=' + encodeURIComponent(param),
                        end: function () {
                            table.reload('currentTableId');
                        }
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                    return false;
                } else if (obj.event === 'editrole') {
                    console.log(data)
                    var index = layer.open({
                        title: '分配菜单',
                        type: 2,
                        shade: 0.2,
                        maxmin: true,
                        shadeClose: true,
                        area: ['100%', '100%'],
                        content: '../page/table/rolemenu.html?id=' + data.id,
                        end: function () {
                            table.reload('currentTableId');
                        }
                    });
                    $(window).on("resize", function () {
                        layer.full(index);
                    });
                    return false;
                }
            })
        });


    </script>
</body>

</html>

菜单列表效果图:

分配菜单代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>分配菜单</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../lib/layui-v2.6.3/css/layui.css" media="all">
    <link rel="stylesheet" href="../../css/public.css" media="all">
</head>

<body>

    <div class="layui-btn-container">
        <button type="button" class="layui-btn layui-btn-sm" lay-on="getChecked">保存</button>
        <button type="button" class="layui-btn layui-btn-sm" lay-on="reload">刷新</button>
    </div>


    <div class="layuimini-container">
        <div class="layuimini-main">
            <script type="text/html" id="toolbarDemo">
            <div class="layui-btn-container">
            </div>
        </script>
            <div id="ID-tree-demo"></div>
            <script type="text/html" id="currentTableBar">
        </script>
        </div>
    </div>
    <script src="../../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
    <script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
    <script src="../../js/commons.js" charset="utf-8"></script>
    <script src="../../js/wangeditor.js"></script>
    <script>
        var roleid = window.location.search.split('id=')[1];
        $.ajax({
            url: http_txt + "/api/user_menu",
            type: 'post',
            data: JSON.stringify({
                "id": roleid
            }),
            headers: {
                'Content-Type': 'application/json;charset=utf-8'
            },
            success: function (response) {
                if (response.msg == "success" && response.code == 0) {
                    loading(response.data)
                }
            },
            error: function () {
                layer.msg("获取菜单信息失败!");
            }
        });

        function loading(param) {
            layui.use(function () {

                var tree = layui.tree;
                var layer = layui.layer;
                var util = layui.util;

                tree.render({
                    elem: '#ID-tree-demo',
                    data: param,
                    showCheckbox: true,
                    onlyIconControl: true,
                    id: 'demo-id-1',
                    isJump: true,
                });
                // 按钮事件
                util.event('lay-on', {
                    getChecked: function (othis) {
                        var checkedData = tree.getChecked('demo-id-1');
                        var dataList = [];
                        for (var i = 0; i < checkedData.length; i++) {
                            for (var j = 0; j < checkedData[i].children.length; j++) {
                                dataList.push(checkedData[i].children[j].id)
                            }
                        }

                        $.ajax({
                            url: http_txt + "/api/update_permission",
                            type: 'post',
                            data: JSON.stringify({
                                "role_id": roleid,
                                "menu_id": dataList
                            }),
                            headers: {
                                'Content-Type': 'application/json;charset=utf-8'
                            },
                            success: function (response) {
                                var iframeIndex = parent.layer.getFrameIndex(window.name);
                                parent.layer.close(iframeIndex);
                                layer.msg(response.text);
                            },
                            error: function () {
                                layer.msg("编辑失败!");
                            }
                        });
                    },
                    reload: function () {
                        tree.reload('demo-id-1', {}); // 重载实例
                    }
                });
            });
        }
    </script>
</body>

</html>

效果图:

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

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

相关文章

Python的type()函数

在Python中&#xff0c;type()函数是一个非常有用的工具&#xff0c;它可以查看变量或对象的数据类型。了解如何使用type()函数对于编写高质量的Python代码非常重要&#xff0c;因为它有助于确保程序按预期运行&#xff0c;避免潜在的错误和异常。本文将深入探讨type()函数的用…

【ZYNQ入门】第九篇、双帧缓存的原理

目录 第一部分、基础知识 1、HDMI视频撕裂的原理 2、双帧缓存的原理 第二部分、代码设计原理 1、AXI_HP_WR模块 2、AXI_HP_RD模块 3、Block design设计 第三部分、总结 1、写在最后 2、更多文章 第一部分、基础知识 1、HDMI视频撕裂的原理 在调试摄像头的时候&#xf…

IMS 中的Implicit Registration

IMS Implicit Registration在23.228中有描述,在23.228中搜索关键字“Implicit Registration”直达,简单看下: 当用户具有一个public user ID set,通过该set 中的某个public user ID 进行单个IMS注册来Implicit Registration的public user ID时,它被视为Implicit Registrat…

npm或者pnpm或者yarn安装依赖报错ENOTFOUND解决办法

如果报错说安装依赖报错&#xff0c;大概率是因为npm源没有设置对&#xff0c;比如我这里安装protobufjs的时候报错&#xff1a;ENOTFOUND npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.cnpm…

时隔78天,个人微信小游戏内容审核终于通过了,这到底是经历了什么...

引言 大家好&#xff0c;就在前天&#xff0c;笔者惊讶地发现&#xff0c;去年提交的微信小游戏内容审核居然过审了&#xff01; 我们一起来看一下笔者都经历了什么&#xff1f; 以及了解下微信小游戏备案的具体流程是怎么样的&#xff1f; 回顾一下 先回顾一下&#xff0c…

Tree-Shaking 作用和实现原理

一、什么是Tree-shaking Tree-shaking 它的名字来源于通过摇晃&#xff08;shake&#xff09;JavaScript代码的抽象语法树&#xff08;AST&#xff09;&#xff0c;是一种用于优化JavaScript代码的技术&#xff0c;主要用于移除未被使用的代码&#xff0c;使得最终生成的代码包…

vue element MessageBox.prompt this.$prompt组件禁止显示右上角关闭按钮,取消按钮,及点击遮罩层关闭

vue element MessageBox.prompt this.$prompt组件禁止或取消显示右上角关闭按钮&#xff0c;取消按钮&#xff0c;及点击遮罩层关闭 实现效果&#xff1a; 实现代码 MessageBox.prompt(请先完成手机号绑定, 系统提示, {confirmButtonText: 提 交,showClose: false,closeOnClic…

解决TCP粘包问题

粘包问题已经在上一篇博客中写到具体可以看----------- 以下是利用分包解决粘包问题的步骤&#xff1a; 消息长度前缀&#xff1a; 在每个数据包前加入消息长度信息。 定义协议格式&#xff1a; 明确定义通信协议的格式&#xff0c;包括消息头和消息体。 封包&#xff1a; 将…

Tensorflow2 GPU版本-极简安装方式

Tensorflow2 GPU版本-极简安装方式&#xff1a; 1、配置conda环境加速 https://wtl4it.blog.csdn.net/article/details/135723095https://wtl4it.blog.csdn.net/article/details/135723095 2、tensorflow-gpu安装 conda create -n STZZWANG_TF2 tensorflow-gpu2.0

kali安装LAMP和DVWA

LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 L:指Linux&#xff0c;一类Unix计算机操作…

4G物联网LED智慧路灯杆显示屏产品介绍

4GLED显示屏是一种具有4G网络连接功能的LED显示屏。它可以通过4G网络连接到互联网&#xff0c;实现远程管理和控制&#xff0c;方便进行内容更新和管理。同时&#xff0c;4GLED显示屏具有高亮度、高清晰度和高对比度的特点&#xff0c;可以提供清晰明亮的图像和视频展示效果。它…

jdk17新特性——文本块(即多行的字符串)增强

目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…

基于GPT3.5逆向 和 本地Bert-Vits2-2.3 的语音智能助手

文章目录 一、效果演示二、操作步骤三、架构解析 一、效果演示 各位读者你们好&#xff0c;我最近在研究一个语音助手的项目&#xff0c;是基于GPT3.5网页版的逆向和本地BertVits2-2.3 文字转语音&#xff0c;能实现的事情感觉还挺多&#xff0c;目前实现【无需翻墙&#xff0…

数据结构之线性表(一般的线性表)

前言 接下来就开始正式进入数据结构环节了&#xff0c;我们先从线性表开始。 线性表 线性表&#xff08;linear list&#xff09;也叫线性存储结构&#xff0c;即数据元素的逻辑结构为线性的数据表&#xff0c;它是数据结构中最简单和最常用的一种存储结构&#xff0c;专门存…

springboot快速开始

创建和配置 下面是创建和配置项目, 可以看看, 但是本文重点是怎么开web接口和连接数据库, 所以可以直接从gitee上下载我配好的 gitee 创建项目 java配置 idea里可以下载java maven maven用来帮你管理项目需要的包(库), 不过要下载快需要配镜像, 请查阅网络资料 添加依赖…

缓存高并发问题

Redis 做缓存虽减轻了 DBMS 的压力&#xff0c;减小了 RT&#xff0c;但在高并发情况下也是可能会出现各种问题的。 缓存穿透 当用户访问的数据既不在缓存也不在数据库中时&#xff0c;就会导致每个用户查询都会“穿透”缓存“直抵”数据库。这种情况就称为缓存穿透。当高度发…

处理Eclipse验证读条问题

打开Eclipse后下方一直读条加载验证&#xff0c;强迫症受不了。 依靠互联网自动加载失败&#xff0c;手动放入缺失的文件&#xff0c;我这里是mybatis的一个dtd文件缺失。 打开Eclipse-XML下的catalog&#xff0c;选择缺失的文件&#xff0c;保存。 可能需要重启Eclise

代码随想录刷题题Day41

刷题的第四十一天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day41 任务 ● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇 1 两个字符串的删除操作 583. 两个字符串的删除…

详解线性分组码(linear code)

目录 一. 介绍 二. 线性分组码 三. 生成矩阵 四. 对偶编码 五. 校验矩阵 六. 陪集编码 七. 小结 一. 介绍 Low-density parity-check&#xff0c;简称LDPC码&#xff0c;翻译为低密度奇偶校验码。 我们所熟悉的LDPC码就是一个典型的线性分组码&#xff08;linear bloc…

HarmonyOS(十三)——详解自定义组件的生命周期

前言 自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期&#xff0c;这些回调函数是私有的&#xff0c;在运行时由开发框架在特定的时间进行调用&#xff0c;不能从应用程序中手动调用这些回调函数。 下图展示的是被Entry装饰的组件生命周期&#xff1a; 今…