美文网首页
layui封装后台管理系统页面

layui封装后台管理系统页面

作者: Raral | 来源:发表于2022-07-11 13:31 被阅读0次

    后台在不分离的情况下,搭建页面前端框架使用layui页面风格比较良好

    js代码

    (function($,window,layui,layer) {
        $.extend({
            _layui: layui,
    
            modal:  {
                //弹出层指定宽度
                open: function (title,url,w,h,cb) {
    
                    if ($.common.isEmpty(cb)) {
                        cb = function(index, layero) {
                            var iframeWin = layero.find('iframe')[0];
                            iframeWin.contentWindow.submitHandler(index, layero);
                        }
                    }
                    let area = ["100%", "100"];
                    if(w && h) {
                        area =  [w + 'px', h + 'px']
                    }
    
                    let index = layer.open({
                        type: 2,
                        // area: [w + 'px', h + 'px'],
                        area: area,
                        fix: false,
                        //不固定
                        maxmin: true,
                        shade: 0.3,
                        title: title,
                        content: url,
                        btn: ['确定', '关闭'],
                        // 弹层外区域关闭
                        shadeClose: true,
                        yes: cb,
                        cancel: function(index) {
                            return true;
                        }
                    });
                    if(!(w && h)) {
                        layer.full(index);
                    }
    
                }
            },
    
            //操作封装处理
            operate: {
    
                // 提交数据
                submit: function(url, type, data, callback) {
                    var config = {
                        url: url,
                        type: "post",
                        contentType: 'application/json;charset=utf-8;',
                        dataType: "json",
                        data: data,
                        beforeSend: function () {
                            // $.modal.loading("正在处理中,请稍后...");
                        },
                        success: function(result) {
                            if(result.code == "000") {
                                if (typeof callback == "function") {
                                    callback(result);
                                }
    
                            }else {
                                layer.alert("接口异常或服务器问题")
    
                            }
        
                            // $.operate.ajaxSuccess(result);
                        }
                    };
                    $.ajax(config)
                },
                // post请求传输
                post: function(url, data,method, callback) {
                    let params = $.operate.handleParams(data,method);
                    $.operate.submit(url, "post", params, callback);
                },
             
                //处理请求参数封装(加签)
                handleParams: function(data,method,page,size) {
                    let params = {
                        method:method,
                        biz_params: JSON.stringify(data), 
                    }
                    if(page && size) {
                        params.pager = page,
                        params.pager_len = size
                    }
                    let json = window.getParams(params);
                    return JSON.stringify(json);
                },
    
                //重新生成请求数据,分页变化
                handleParamsPage: function(page, size) {
                    let o = JSON.parse($.table._options.data);
                    let temp = {};
                    temp.biz_params = o.biz_params;
                    temp.method = o.method;
                    temp.pager = page;
                    temp.pager_len = size;
                    let json = window.getParams(temp);
                    return JSON.stringify(json);                // let json = getParamsDoc(pageNum, numPerPage);
                },
                //打开新增页面
                addPage: function(title,url) {   
                    $.modal.open(title,url,null,null,function(index) {
                        layer.close(index);
                    })
                },
                //打开编辑页面
                edtiorPage: function(title,url,id) {
                    $.modal.open(title,url,null,null,function(index) {
                        layer.close(index);
                    })
                }
    
    
            },
    
            table: {
                _options:{},
                //表格初始化
                init: function(options) {
                    let defaults = {
                        pageElem: "layui-table-page" //分页的节点,不需要带#
                        ,pageNum: 1  //默认 1
                        ,pageSize: 10// 默认 10条
                        // ,data:{} //请求 对象数据,
                        ,getParams: null //获取参数数据
                        ,delUrl:""
                        ,delParams: null
    
    
                        ,elem: "#layui-table"//表格dom:lay-filter="layui-table"
                        ,url: ""//列表请求方式
                        ,method: "POST" 
                        ,contentType:"application/json"
                        ,parseData: function(res){
                            res.data = JSON.parse(res.biz_params).list;
                            return {
                                "code": res.code, //解析接口状态
                                "msg": res.msg, //解析提示文本
                                "count": res.pager_max, //解析数据长度
                                "data":  res.data//解析数据列表
                            };
                        },
                        where: {}
                        ,request: {
                            pageName: 'pager' //页码的参数名称,默认:page
                            ,limitName: 'pager_len' //每页数据量的参数名,默认:limit
                        }
                        ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
                        ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义,去除该参数即可
                            title: '提示'
                            ,layEvent: 'LAYTABLE_TIPS'
                            ,icon: 'layui-icon-tips'
                          }]////自定义头部工具栏右侧图标。如无需自定义,去除该参数即可
                        ,title: "表格名称"
                        ,cols: []
                        // ,page: true
                        ,id: "layui-table" //id="layui-table"
                    }
                    
                    let opt = $.extend(defaults, options);
                    console.log(opt);
                    $.table._options = opt;
                   
                    //页面第一次请求,默认 1页 10条
                    $.table.getListByPage(opt,1,10,true);
                      //初始化监听事件
                    ;
                    $.table.initEvent();
    
                },
    
                //请求数据
                getListByPage: function(opt,page,size,isPage) {
                    let data = $.table._options.getParams(page, size);
                
                    $.operate.submit(opt.url, "post", data, function(res) {
                       
                           console.log(res);
                           list = JSON.parse(res.biz_params).list;
                           let pageRO = {
                            totalCount: null,
                            numPerPage: null
                          }
                          pageRO.totalCount = res.pager_max;
                          pageRO.numPerPage = 10;
                            $.table.renderTable(list, opt);
                            if(isPage) {
                                $.table.renderPage(pageRO, opt);
                            }
    
                    });
    
                },
    
                //渲染表格
                renderTable: function(list, opt) {
                    layui.table.render({
                        elem: opt.elem
                        , title: '用户数据表'
                        , cols: opt.cols
                        // , page: true
                        , data: list
                        ,toolbar: opt.toolbar
                
                        , done: function (res, curr, count) {
                            // consoled.log(res, curr, count)
                
                        }
                      });
                    
                },
                //渲染分页
                renderPage: function(data, opt) {
                    layui.laypage.render({
                        elem: opt.pageElem, //注意,这里的 page 是 ID,不用加 # 号
                        count: data.totalCount, //数据总数,从服务端得到
                        limit: data.numPerPage, // 每页条数
                        limits: [10, 20, 30, 40, 50],
                        layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],
                        jump: function (obj, first) {
                          //console.log(obj)
                          //obj包含了当前分页的所有参数,比如:
                          //console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
                          //console.log(obj.limit); //得到每页显示的条数
                  
                          //首次不执行
                          if (!first) {
                            //do something
                            $.table.numpage(obj.curr, obj.limit) // 分页点击传参 
                          }
                        }
                      });
                },
                //分页变化
                numpage: function(page, size) {
                    //解析初始化 请求
                    $.table.getListByPage($.table._options,page,size,false);
                },
    
                initEvent: function() {
                    ;
                    $.table.bindEvent();
                    $.table.bindToolbar();
                    $.table.bindToolbarHead();
                },
    
                //自定义事件
                bindEvent: function() {
                     active = {
                        //表格搜索
                        search: function() {
                           $.table.getListByPage($.table._options,1,10,true);
                        },
                        //新增操作
                        add: function() {
                            $.modal.open("新增"+$.table._options.title,"./edtior_add.html",600,800,function(index) {
                                layer.close(index);
                            })
    
                        }
                      };
                      $('.layui-btn-g').on('click', function () {
                        ;
                        var type = $(this).attr('lay-event');
                        active[type] ? active[type].call(this) : '';
                      });
                },
                //表格【行】工具栏事件
                bindToolbar: function() {
                    //查询行工具 dom
                    let dom = $.table._options.elem.substring(1)
                    layui.table.on(`tool(${dom})`, function(obj) {
                        console.log(obj);
                        if(obj.event === 'del'){
                            layer.confirm('真的删除行么', function(index){
                                // $.table._options.delParams();
                                $.operate.submit( $.table._options.delUrl, "post", data, function(res){
    
                                });
    
                            });
    
                        }else if(obj.event === 'edit'){
                            $.modal.open("编辑"+$.table._options.title,"./edtior_add.html",600,800,function(index) {
                                layer.close(index);
                            })
                        } 
                    })
                },
                //表格【头】工具栏事件
                bindToolbarHead: function() {
                    ;
                    let dom = $.table._options.elem.substring(1)
                    layui.table.on(`toolbar(${dom})`, function(obj){
                        var checkStatus = layui.table.checkStatus(obj.config.id);
                        switch(obj.event){
                          case 'getCheckData':
                            var data = checkStatus.data;
                            layer.alert(JSON.stringify(data));
                          break;
                          case 'getCheckLength':
                            var data = checkStatus.data;
                            layer.msg('选中了:'+ data.length + ' 个');
                          break;
                          case 'isAll':
                            layer.msg(checkStatus.isAll ? '全选': '未全选');
                          break;
                          
                          //自定义头工具栏右侧图标 - 提示
                          case 'LAYTABLE_TIPS':
                            layer.alert('这是工具栏右侧自定义的一个图标按钮');
                          break;
                        };
                      });
                }
    
    
            },
    
    
    
            form: {
                _options:{},
                //表单初始化
                init: function(options) {
                    let defaults = {
                         id:"layui-form",
                         submitBtn: "save_btn",
                         data: null, //表单对应的数据name:value,不是页面数据包含
                         verify: undefined,//对输入框值校验
                         verifyCheckBox:{//对复选框校验并且友好提示
                             "name": 1  // 属性:限制个数
                         },
                         addUrl: {
                            method: "",
                            url:"",
                            data:""
                         },
                         editorUrl:{
                            method: "",
                            url:""
    
                         },
                         descUrl:{
                            method: "",
                            url:""
    
                         },
                         requestMethod:"",
                         contentType:"application/x-www-form-urlencoded",
                         isDate: true,//是否有时间控件   
                         width: undefined,//表单宽度
                         height: undefined,//表单高度
                    }
                    let opt = $.extend(defaults, options);
                    $.form._options = opt;
                    //初始化监听事件
                    // $.form.initEvent();
                    //初始化数据
                    layui.form.val(opt.id, opt.data);
                    //初始化校验
                    layui.form.verify(opt.verify);
                    //提交
                     //初始化事件提交
                     layui.form.on(`submit(${opt.submitBtn})`, function(data) {
                        ;
                        console.log(data.field);
                        let res_params = $.extend(data.field,opt.data);
                        console.log(res_params);
                        if(res_params.id) {
                            $.operate.post(opt.editorUrl.url, data.field, opt.editorUrl.method, function(res) {
                                console.log(res);
                                if("000" == res.code) {
                                    layer.msg("修改成功")
                                }else {
                                    layer.msg("修改失败")
                                }
                            })
    
                        }else {
                            $.operate.post(opt.addUrl.url, data.field, opt.addUrl.method, function(res) {
                                console.log(res);
                                if("000" == res.code) {
                                    layer.msg("保存成功")
                                }else {
                                    layer.msg("保存失败")
                                }
                            })
                        }
                       
                        return false;
                    })
                }
    
            },
    
    
            // 通用方法封装处理
            common: {
                // 判断字符串是否为空
                isEmpty: function (value) {
                    if (value == null || this.trim(value) == "") {
                        return true;
                    }
                    return false;
                },
                // 判断一个字符串是否为非空串
                isNotEmpty: function (value) {
                    return !$.common.isEmpty(value);
                },
                // 空对象转字符串
                nullToStr: function(value) {
                    if ($.common.isEmpty(value)) {
                        return "-";
                    }
                    return value;
                },
                // 是否显示数据 为空默认为显示
                visible: function (value) {
                    if ($.common.isEmpty(value) || value == true) {
                        return true;
                    }
                    return false;
                },
                // 空格截取
                trim: function (value) {
                    if (value == null) {
                        return "";
                    }
                    return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
                },
                // 比较两个字符串(大小写敏感)
                equals: function (str, that) {
                    return str == that;
                },
                // 比较两个字符串(大小写不敏感)
                equalsIgnoreCase: function (str, that) {
                    return String(str).toUpperCase() === String(that).toUpperCase();
                },
                // 将字符串按指定字符分割
                split: function (str, sep, maxLen) {
                    if ($.common.isEmpty(str)) {
                        return null;
                    }
                    var value = String(str).split(sep);
                    return maxLen ? value.slice(0, maxLen - 1) : value;
                },
                // 字符串格式化(%s )
                sprintf: function (str) {
                    var args = arguments, flag = true, i = 1;
                    str = str.replace(/%s/g, function () {
                        var arg = args[i++];
                        if (typeof arg === 'undefined') {
                            flag = false;
                            return '';
                        }
                        return arg;
                    });
                    return flag ? str : '';
                },
                // 指定随机数返回
                random: function (min, max) {
                    return Math.floor((Math.random() * max) + min);
                },
                // 判断字符串是否是以start开头
                startWith: function(value, start) {
                    var reg = new RegExp("^" + start);
                    return reg.test(value)
                },
                // 判断字符串是否是以end结尾
                endWith: function(value, end) {
                    var reg = new RegExp(end + "$");
                    return reg.test(value)
                },
                // 数组去重
                uniqueFn: function(array) {
                    var result = [];
                    var hashObj = {};
                    for (var i = 0; i < array.length; i++) {
                        if (!hashObj[array[i]]) {
                            hashObj[array[i]] = true;
                            result.push(array[i]);
                        }
                    }
                    return result;
                },
                // 数组中的所有元素放入一个字符串
                join: function(array, separator) {
                    if ($.common.isEmpty(array)) {
                        return null;
                    }
                    return array.join(separator);
                },
                // 获取form下所有的字段并转换为json对象
                formToJSON: function(formId) {
                     var json = {};
                     $.each($("#" + formId).serializeArray(), function(i, field) {
                         json[field.name] = field.value;
                     });
                    return json;
                }
            }
    
        })
    
    
    
    
    })(jQuery,window,layui,layer)
    
    
    

    html

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>表格——分页独立封装</title>
      <meta name="renderer" content="webkit">
      <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="./layui-v2.6.0//dist/css/layui.css"
      tppabs="https://www.layui.site/layui/dist/css/layui.css" media="all">
      
    <script src="./layui-v2.6.0/dist/layui.js" charset="utf-8"></script>
    </head>
    <body>
    
        <div class="demoTable" id="">
            搜索ID:
            <div class="layui-inline">
              <input class="layui-input" name="atv" id="ct_name" autocomplete="off">
            </div>
            <!-- <button class="layui-btn" data-type="reload">搜索</button> -->
            <button class="layui-btn layui-btn-g" lay-event="search" id="search">搜索2</button>
            <button class="layui-btn layui-btn-g" lay-event="add" id="add">新增</button>
          </div>   
     
    <table class="layui-hide" id="test" lay-filter="test"></table>
    <div id="page"></div>
     
    <script type="text/html" id="toolbarDemo">
      <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
      </div>
    </script>
     
    <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 src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js" integrity="sha512-E8QSvWZ0eCLGk4km3hxSsNmGWbLtSCSUcewDQPQWZF6pEU8GlT8a5fF32wOl1i8ftdMhssTrF/OhyGWwonTcXA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <script src="./js/core.js"></script>
    <script src="./js/crypto.js"></script>
    <script src="./gzsz_ui_2.js"></script>
         
    <script>
      
        function getParamsDoc(num, size) {
        console.log("getParamsDoc",this);
        let atv_name = document.getElementById("ct_name").value;
          //  console.dir(atv_name)
            let temp = {
              ct_name: atv_name,
            }  
        let query = {
            method:"copyTempPO.getPaperTempList",
            pager: num,
            pager_len: size,
            biz_params: JSON.stringify(temp)
        }
        return  JSON.stringify(getParams(query)) ;
      }
      function delParamsDoc() {
        console.log("delParamsDoc",this);
     
            let temp = {
              id: "",
              state: 1
            }  
        let query = {
            method:"copyTempPO.getPaperTempList",
            pager: num,
            pager_len: size,
            biz_params: JSON.stringify(temp)
        }
        return  JSON.stringify(getParams(query)) ;
      }  
      
    
      $.table.init({
        pageElem: "page",
        elem: "#test",
        url: "xxx",
        // data:json,
        getParams: getParamsDoc,
        delUrl:"yyy",
        delParams: delParamsDoc,
        toolbar: "#toolbarDemo",
        title:"文案管理",
        cols: [[
              {type: 'checkbox', fixed: 'left'}
              ,{ field: 'id', title: 'ID', width: 100 }
              , { field: 'ct_code', title: '名称', width: 300, }
              , { field: 'ct_name', title: '名称12', width: 400, }
              , { title: '操作', toolbar: '#barDemo', width: 200 }
    
        ]]
      })
    
    
      // // function(data,method,page,size)
      // let temp = {
      //    ct_name: $("#ct_name").val()
      // }
      // handleParams: function(data,method,page,size)
      // let json = $.operate.handleParams(temp, "copyTempPO.getPaperTempList", 1, 10);
    
    </script>
    
    
    
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:layui封装后台管理系统页面

          本文链接:https://www.haomeiwen.com/subject/gernbrtx.html