欢迎您来到“名字什么都是浮云”的博客空间!

layUI 详情和列表页参考示例

【注意】本文中的代码可运行,但不一定是可直接运行的,仅供参考使用.

【码云】:https://gitee.com/uanlaibao/Book.NET/tree/master/ExampleFrameWork

【详情页】

 预览图:

【Html部分】

<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 href="/Scripts/layui/css/layui.css" rel="stylesheet" />
    <script src="/Scripts/jquery-3.5.1.min.js"></script>
    <script src="/Scripts/layui/layui.js"></script>
head设置
<form class="layui-form layui-form-pane" action="" lay-filter="UserDetailForm">
        <div class="layui-tab layui-tab-card" lay-filter="UserTab">
            <ul class="layui-tab-title">
                <li class="layui-this" lay-id="1">基本信息</li>
                <li lay-id="2">详细信息</li>
                <li lay-id="3">简介</li>
            </ul>
            <div class="layui-tab-content">
                <div class="layui-tab-item layui-show">
                  </div>
                <div class="layui-tab-item">
                  </div>
                <div class="layui-tab-item">
                  </div>
            </div>
        </div>

        <div class="layui-form-item">
            <div class="layui-input-block">
                <button class="layui-btn" lay-submit="" lay-filter="SaveUser">立即提交</button>
                <button type="reset" class="layui-btn layui-btn-primary">重置</button>
            </div>
        </div>
    </form>
表单与tab
<div class="layui-form-item">
                        <label class="layui-form-label"><span class="layui-badge-dot"></span>&nbsp;头像</label>
                        <div class="layui-input-inline">
                            <input type="text" name="Portrait" lay-verify="required" lay-reqtext="需要上传头像" autocomplete="off" placeholder="" class="layui-input" />

                        </div>
                        <div class="layui-input-inline">
                            <button type="button" class="layui-btn" id="btnUpload" onclick="document.getElementById('fileUpload').click()">
                                <i class="layui-icon">&#xe67c;</i>上传图片
                            </button>
                            <input class="layui-upload-file" type="file" id="fileUpload" accept="" name="fileUpload">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <img src="#" width="100" height="100" id="imgUpload" alt="我的头像" title="我的头像" style="border: 1px solid #CCC;" />
                        </div>
                    </div>
头像图片上传
<div class="layui-form-item">
                        <label class="layui-form-label"><span class="layui-badge-dot"></span>&nbsp;用户账号</label>
                        <div class="layui-input-inline">
                            <input type="text" name="UserID" lay-verify="required|englishStr" autocomplete="off" placeholder="请输入用户账号" class="layui-input">
                        </div>

                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label"><span class="layui-badge-dot"></span>&nbsp;姓名</label>
                        <div class="layui-input-inline">
                            <input type="text" name="UserName" lay-verify="required|chineseStr" autocomplete="off" placeholder="请输入姓名" class="layui-input">
                        </div>
                        <div class="layui-form-mid layui-word-aux">请填写正确的名称</div>
                    </div>
普通文本框
<div class="layui-form-item">
                        <label class="layui-form-label">性别</label>
                        <div class="layui-input-inline">
                            <input type="radio" name="Sex" value="1" title="男">
                            <input type="radio" name="Sex" value="0" title="女" checked>
                        </div>
                    </div>
单选按钮
<div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label"><span class="layui-badge-dot"></span>&nbsp;登录密码</label>
                            <div class="layui-input-block">
                                <input type="password" name="Pwd" required lay-verify="required|pass" placeholder="请输入密码" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                    </div>
密码框
<div class="layui-form-item">
                        <label class="layui-form-label">状态</label>
                        <div class="layui-input-block">
                            <!--复选框如果未设置value值则选择时返回on值-->
                            <input type="checkbox" name="Status" id="Status" lay-filter="Status" lay-skin="switch" lay-text="有效|无效" />
                        </div>
                    </div>
复选框
<div class="layui-form-item">
                        <label class="layui-form-label">所在地区</label>
                        <div class="layui-input-inline">
                            <select name="ProvinceSysNo" lay-filter="ProvinceSysNo">
                                <option value="0">请选择省</option>
                            </select>
                        </div>
                        <div class="layui-input-inline">
                            <select name="CitySysNo" lay-filter="CitySysNo">
                                <option value="0">请选择市</option>
                            </select>
                        </div>

                        <div class="layui-input-inline">
                            <select name="AreaSysNo">
                                <option value="0">请选择县/区</option>
                            </select>
                        </div>
                    </div>
省市区三级联动
<div class="layui-form-item" pane="">
                        <label class="layui-form-label">兴趣爱好</label>
                        <div class="layui-input-block">
                            <input type="checkbox" name="HobbyWrite" lay-skin="primary" title="写作"/>
                            <input type="checkbox" name="HobbyRead" lay-skin="primary" title="阅读"/>
                            <input type="checkbox" name="HobbyGame" lay-skin="primary" title="游戏"/>
                            <input type="checkbox" name="HobbyMusic" lay-skin="primary" title="唱歌"/>
                            <input type="checkbox" name="HobbyListenMusic" lay-skin="primary" title="听歌"/>
                            <input type="checkbox" name="HobbyMovie" lay-skin="primary" title="电影"/>
                            <input type="checkbox" name="HobbyShopping" lay-skin="primary" title="购物"/>
                            <input type="checkbox" name="HobbyMotion" lay-skin="primary" title="运动"/>
                            <input type="checkbox" name="HobbyFood" lay-skin="primary" title="美食"/>
                        </div>
                    </div>
多个复选框
<div class="layui-form-item">
                        <label class="layui-form-label">出生日期</label>
                        <div class="layui-input-inline">
                            <input type="text" name="Birthday" id="Birthday" placeholder="yyyy-mm-dd" autocomplete="off" class="layui-input" onclick="layui.laydate({ elem: this });" />
                        </div>

                    </div>
日期框
<div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label">体重范围</label>
                            <div class="layui-input-inline" style="width: 100px;">
                                <input type="text" name="WeightMin" placeholder="?15" autocomplete="off" class="layui-input">
                            </div>
                            <div class="layui-form-mid">-</div>
                            <div class="layui-input-inline" style="width: 100px;">
                                <input type="text" name="WeightMax" placeholder="?200" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                    </div>
起止文本框
<div class="layui-form-item">
                        <label class="layui-form-label">技能特长</label>
                        <div class="layui-input-inline">
                            <select name="Skills" lay-search="">
                                <option value="">直接选择或搜索选择</option>
                            </select>
                        </div>


                    </div>
可模糊搜索的下拉框
<div class="layui-form-item">
                        <label class="layui-form-label">部门</label>
                        <div class="layui-input-block">
                            <input type="text" id="DeptSysNo" name="DeptSysNo" lay-filter="DeptSysNo" class="layui-input">
                        </div>
                    </div>
树控件下拉框
<div class="layui-form-item layui-form-text">
                        <label class="layui-form-label">个人简介</label>
                        <div class="layui-input-block">
                            <textarea placeholder="请输入内容" name="Profile" class="layui-textarea"></textarea>
                        </div>
                    </div>
普通文本域
<div class="layui-form-item  layui-form-text">
                        <label class="layui-form-label">描述</label>
                        <div class="layui-input-block">
                            <textarea class="layui-textarea" name="Note" id="Note">  
                      把编辑器的初始内容放在这textarea即可
                    </textarea>
                        </div>
                    </div>
富文本编辑器

【Script部分】

<script src="../jquery-3.5.1.js"></script>
<script src="../layui/layui.js"></script>
<script src="../layui/treeselect/treeselect.js" ></script>
<script src="/Scripts/layui/common.js"></script>
<!--
common.js内容:

layui.config({
    base: './module/'
}).extend({
    treeSelect: 'treeSelect/treeSelect'
});
    -->
库的引用
//  [config] layui页面处理对象
    var layPage = new Object();
    //  [config] 模块定义
    layPage.module = ['form', 'layedit', 'laydate', 'tree', 'treeSelect', 'upload', 'element', 'select'];
    //  [config] 上传
    layPage.upload = uploadData;
    //  [config] 富文本上传
    layPage.editUpload = editUploadData;
    //  [config] 格式验证
    layPage.verify = verify;
    //  [config] 树下拉控件对象绑定
    layPage.dataTreeSelect = dataTreeSelect;
    //  [config] 树下拉框控件json绑定
    layPage.jsonTreeSelect = jsonTreeSelect;
    //  [config] 开关按钮监听  
    layPage.statusSwitch = statusSwitch;
    //  [config] 提交表单
    layPage.formSubmit = formSubmit;
    //  [config] 绑定表单
    layPage.formBind = formBind;
    //  [config] 获得表单输入值
    layPage.formInput = formInput;
功能定义
var uploadData = {
        elem: '#fileUpload',    //  上传按钮
        accept: 'jpeg|jpg|png|gif', //  上传文件扩展名
        url: '/Views/Basic/Upload.ashx?name=fileUpload&action=UploadImg&type=User', //  上传处理服务器接口
        done: function (res) {
            //  上传完毕响应处理
            if (res.code == 0) {
                $("#imgUpload").attr("src", res.data.src);
                $("input[name='Portrait']").val(res.data.src);
            }
        }
    };
功能-文件上传
var editUploadData = {
        uploadImage: {
            url: '/Views/Basic/Upload.ashx?name=fileUpload&action=UploadImg&type=User' //   上传处理服务器接口
            , type: 'get' //   请求方式,默认post
        },
        devmode: true,
        //插入代码设置
        codeConfig: {
            hide: true,  //是否显示编码语言选择框
            default: 'javascript' //hide为true时的默认语言格式
        },
        tool: [
            'html', 'code', 'strong', 'underline', 'del', 'addhr', '|', 'fontFomatt', 'colorpicker', 'face'
            , '|', 'left', 'center', 'right', '|', 'link', 'unlink', 'images', 'image_alt', 'image' //插入图片
            , '|', 'fullScreen', 'help', 'italic', 'paste'
        ],
        height: 500, //设置编辑器高度
    };
功能-富文本上传
var verify = {
        title: function (value) {   //  自定义验证
            if (value.length < 5) {
                return '标题至少得5个字符啊';
            }
        },
        englishStr: [/^[a-z|A-Z]{5,18}$/, '必须是5到18位的英文字母组成'],   //  正则验证和验证失败消息
        chineseStr: [/^[a-zA-Z\u4e00-\u9fa5]{2,15}$/, '只能是2到15位的中文或者英文组成'],
        pass: [/^[\S]{6,12}$/, '密码必须6到12位,且不能出现空格'],
        content: function (value) {
            layui.layedit.sync(editIndex);
        }
    };
功能-验证
var dataTreeSelect = {
        elem: '#DeptSysNo',     // 树下拉文本框
        data: null,     // 数据
        type: 'get',    // 异步加载方式:get/post,默认get
        placeholder: '修改默认提示信息',    // 占位符
        search: true,   // 是否开启搜索功能:true/false,默认false
        click: function (d) {   // 点击回调
            console.log(d);
        },
        success: function (d) { // 加载完成后的回调函数
            console.log(d);
            //                选中节点,根据id筛选
            //                treeSelect.checkNode('tree', 3);

            //                获取zTree对象,可以调用zTree方法
            //                var treeObj = treeSelect.zTree('tree');
            //                console.log(treeObj);

            //                刷新树结构
            //                treeSelect.refresh();
        }
    };

    var jsonTreeSelect = {
        elem: '#tree',  // 选择器
        data: "/Scripts/layui/data/data3.json", // 数据
        type: 'get',    // 异步加载方式:get/post,默认get
        placeholder: '修改默认提示信息',    // 占位符
        search: true,   // 是否开启搜索功能:true/false,默认false
        click: function (d) { // 点击回调
            console.log(d);
        },
        success: function (d) { // 加载完成后的回调函数
            console.log(d);
            //                选中节点,根据id筛选
            //                treeSelect.checkNode('tree', 3);

            //                获取zTree对象,可以调用zTree方法
            //                var treeObj = treeSelect.zTree('tree');
            //                console.log(treeObj);

            //                刷新树结构
            //                treeSelect.refresh();
        }
    };
功能-树下拉框2种绑定
var statusSwitch= function (data) {
        //layer.msg('开关checked:' + (this.checked ? 'true' : 'false'), {
        //    offset: '6px'
        //});
        //layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
    }
功能-开关事件
var formSubmit = function (data) {
        //  验证日期
        if ($("input[name='Birthday']").val() == "") {
            layer.alert("出生日期不能为空!");
            //  设置当前tab项,也可通过触发tab项的单击事件
            layui.element.tabChange('UserTab', 2);
            return false;
        }

        //  获得富文本编辑器内容,并进行htmlEncode加码,显示的时候需要解码
        data.field.Note = editEncodeContent.htmlEncode(layui.layedit.getContent(editIndex));

        //  获得树控件下拉框选项值
        if (layui.treeSelect.zTree("DeptSysNo").getSelectedNodes().length > 0)
            data.field.DeptSysNo = layui.treeSelect.zTree("DeptSysNo").getSelectedNodes()[0].id;
        else
            data.field.DeptSysNo = 0;

        //  表单提交确认提示
        layer.confirm("你确定要提交吗?", {
            btn: ['确定', '取消']
        }, function () {
            $.ajax({
                type: "Post",   //  要用post方式    
                data: data.field,   //  提交表单的输入值
                url: "/Views/Admin/SysUser_Detail.aspx?action=SaveUser",    //  提交给服务器处理的地址 
                dataType: "json",
                success: function (res) {
                    var resObj = JSON.parse(res.d);     //  返回的数据用data.d获取内容,此处使用返回值的d属性,因为请求的是WebSerivce接口      
                    if (resObj.Code == 0) {
                        layer.alert(resObj.message)
                    }

                }
            });
        })

        return false;
    };
功能-表单提交
var formBind = function () {
        layui.form.val('UserDetailForm', {
            "username": "贤心"    // "name": "value"
            , "password": "123456"
            , "interest": 1
            , "like[write]": true   //  复选框选中状态
            , "close": true     //  开关状态
            , "sex": "女"
            , "desc": "我爱 layui"
        })
    };
功能-数据绑定
var formInput = function () {
        var data = layui.form.val('example');
        return JSON.stringify(data);
    };
功能-获取表单所有输入项
//  扩展的自定义模块 use中模块select来自此处定义,使用时需要在use中定义select模块,并使用select.renderProvince调用
    layui.define(function (exports) {
        var obj = {
            renderArea: function (selector, data) {

                $.ajax({
                    type: "Post",
                    url: "/Views/Admin/SysUser_Detail.aspx/GetArea",
                    contentType: "application/json; charset=utf-8",
                    data: data,
                    dataType: "json",
                    success: function (data) {
                        var res = JSON.parse(data.d);//返回的webservice数据用data.d获取内容      
                        if (res.Code == 0) {
                            var options = "";
                            $(selector).find('option:first').nextAll().remove();
                            for (var i = 0; i < res.Entities.length; i++) {
                                options += "<option value='" + res.Entities[i].Key + "'>" + res.Entities[i].Value + "</option>";
                            }
                            $(selector).append($(options));
                            layui.form.render();
                        }
                    },
                    error: function (err) {

                    }
                });

            },
            renderSkills: function (selector) {
                $.ajax({
                    //要用post方式      
                    type: "Post",
                    //方法所在页面和方法名      
                    url: "/Views/Admin/SysUser_Detail.aspx/GetSkills",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        //返回的数据用data.d获取内容      
                        var res = JSON.parse(data.d);
                        if (res.Code == 0) {
                            var options = "";
                            $(selector).find('option:first').nextAll().remove();
                            for (var i = 0; i < res.Entities.length; i++) {
                                options += "<option value='" + res.Entities[i].Key + "'>" + res.Entities[i].Value + "</option>";
                            }
                            $(selector).append($(options));
                            layui.form.render();
                        }
                    },
                    error: function (err) {

                    }
                });
            },
            //  重写layui中select的on监听事件
            on: function (layuiId, fn) {
                var jqueryId = layuiId.replace('(', "[lay-filter='").replace(')', "']");
                $(jqueryId).bind("change", fn);
            }
        };

        //  输出select接口并且将该模块附加到layui中如使用layui.select即可访问。使用layui.select.on和layui.select.renderArea即可访问上面定义的方法
        exports('select', obj);
    });
自定义控件渲染和事件监听
var editEncodeContent = {
        htmlEncode: function (value) {
            return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
        },


        htmlDecode: function (value) {
            return !value ? value : String(value).replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&");
        }
    };
富文本编辑器内容的加码和解码
//  以下代码为layui模块中调用配置的代码
    layui.use(layPage.module, function () {
        var form = layui.form;
        var layer = layui.layer;
        var layedit = layui.layedit;
        var laydate = layui.laydate;
        var treeSelect = layui.treeSelect;
        var upload = layui.upload;
        var select = layui.select;

        //  **1) 渲染绑定部分    render++
        upload.render(layPage.upload);  //  上传控件渲染
        laydate.render({ elem: '#Birthday' });  //  日期控件渲染
        select.renderArea("select[name='ProvinceSysNo']", "{'ProvinceSysNo': 0,'CitySysNo': 0 }");  //  下拉框渲染和联动渲染
        select.renderSkills("select[name='Skills']");

        //json文件加载渲染 treeSelect.render(Q.DeptJsonOptions);

        //json对象加载渲染,deptData必须在$(function(){  })页面最初始化时加载,加载时使用ajax请求数据时需要设置为同步的否则这里可能取不到数据  
        layPage.DeptDataOptions.data = deptData;
        treeSelect.renderData(layPage.DeptDataOptions);

        //  富文本编辑器
        layedit.set(layPage.editUpload);
        //注意:layedit.set 一定要放在 build 前面,否则配置全局接口将无效
        editIndex = layedit.build('Note');

        //  **2) 验证 verify++
        form.verify(layPage.verify);    //  自定义验证规则

        //  **3) 事件监听   on++
        form.on("select(ProvinceSysNo)", function (data) { select.renderArea("select[name='CitySysNo']", "{'ProvinceSysNo':" + data.value + ",'CitySysNo': 0 }"); });
        form.on("select(CitySysNo)", function (data) { select.renderArea("select[name='AreaSysNo']", "{'ProvinceSysNo':0,'CitySysNo': " + data.value + " }"); });
        form.on('switch(Status)', layPage.statusSwitch);    //  监听指定开关事件
        form.on('submit(SaveUser)', layPage.formSubmit);    //  监听提交事件
        
        //layPage.BindForm();   //  表单赋值
        //layPage.GetForm();    //  表单取值
    });
layui use模块设置

 

【列表页】

预览图:

 【Html部分】

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <link rel="stylesheet" href="../skin/layuiadmin/layui/css/layui.css" media="all" />
    <script type="text/javascript" src="/scripts/jquery/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="../skin/layuiadmin/layui/layui.js"></script>
    <script type="text/javascript" src="../js/common.js"></script>
    <link href="../include/style.css" rel="stylesheet" />
列表页head
<div class="layui-fluid">
        <div class="layui-card">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto"> 
             </div>
        </div>
    </div>
列表页容器
<div class="layui-inline">
                        <label class="layui-form-label">一级类别</label>
                        <div class="layui-input-inline" style="width: 120px;">
                            <select id="CId1" name="CId1" lay-filter="CId1">
                                <option value="99">请选择</option>
                               ...你需要追加的内容
                            </select>
                        </div>
                        <label class="layui-form-label">二级类别</label>
                        <div class="layui-input-inline" style="width: 120px;">
                            <select id="CId2" name="CId2" lay-filter="CId2">
                                <option value="99">请选择</option>
                            </select>
                        </div>

                    </div>

<div class="layui-inline">
                        <label class="layui-form-label">是否热点</label>
                        <div class="layui-input-inline" style="width: 120px;">
                            <select id="Is_hot" name="Is_hot" lay-filter="Is_hot" autocomplete="off">
                                <option value="99">请选择</option>
                                <option value="1"></option>
                                <option value="0"></option>
                            </select>
                        </div>
                        <label class="layui-form-label">是否置顶</label>
                        <div class="layui-input-inline" style="width: 120px;">
                            <select id="Is_top" name="Is_top" lay-filter="Is_top" autocomplete="off">
                                <option value="99">请选择</option>
                                <option value="1"></option>
                                <option value="0"></option>
                            </select>
                        </div>
                        <label class="layui-form-label">状态</label>
                        <div class="layui-input-inline" style="width: 120px;">
                            <div class="layui-inline" style="width: 120px;">
                                <select id="Status" name="Status" lay-filter="Status" autocomplete="off">
                                    <option value="99">请选择</option>
                                    <option value="0">待审核</option>
                                    <option value="1">审核通过</option>
                                    <option value="2">审核不通过</option>
                                </select>
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">关键字</label>
                            <div class="layui-input-block">
                                <input type="text" name="keyword" placeholder="关键字" class="layui-input" style="width: 200px" />
                            </div>
                        </div>
                        <div class="layui-inline">
                            <div class="layui-inline">
                                <button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="search_go">
                                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                                </button>
                            </div>
                        </div>
                    </div>
列表页搜索内容
<!--数据表格-->
                <table class="layui-hide" id="new_table" lay-filter="tablelist"></table>

                <!--工具栏模板容器-->
                <div style="display: none">
                    <!--数据表格工具栏-->
                    <script type="text/html" id="ToolBar">
                        <div class="layui-btn-container" <%-- style="padding:6px 9px"--%>>
                            <button class="layui-btn layui-btn-sm" lay-event="add">添加</button>
                            <button class="layui-btn layui-btn-sm" lay-event="del">删除</button>
                            <button type="button" class="layui-btn layui-btn-sm" onclick="pass()" data-type="pass">审核通过</button>
                            <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" onclick="fail()">审核不通过</button>
                        </div>
                    </script>

                    <!--数据表格行工具栏-->
                    <script type="text/html" id="Bar">
                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
                        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
                    </script>
                    <script type="text/html" id="Bar2">
                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Up"><i class="layui-icon layui-icon-up"></i>向上</a>
                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Down"><i class="layui-icon layui-icon-down"></i>向下</a>
                    </script>
                </div>
数据表格与工具栏
var $$post, newtable, checkedArr = []; 
//  模块定义
    layui.use(['layer', 'table', 'form'], function (layer, table, form) {

 });
模块定义
//  layer弹窗回调使用,从当前页面打开的视图页面用top.gridView.reload("Id")可以刷新列表
        top.gridView = table;
模块中指定刷新数据列表对象
//  定义通用的post设置方法
        $$post = function (action, data, msg, fun) {
            var url = "?action=" + action;
            var loadIndex = layer.load(2, { time: 3 * 1000 });
            $.post(url, data, function (D) {
                layer.close(loadIndex);
                switch (D.code) {
                    case 0:
                        if (!!fun) fun(D);
                        else layer.msg(msg, { icon: 1, shade: 0.3 });
                        break;
                    case 2: layer.msg(D.msg, { icon: 5 }); break;
                    default: layer.msg("操作失败,请重试", { icon: 5 });
                }
            }, "json");
        };
定义通用的post
// 下拉框监听后加载的另一个下拉框内容
        form.on('select(CId1)', function (data) {
            $.post('/admin/article/news_list.aspx?action=GetCId2&CId=' + data.value, function (result) {
                $("#CId2").find("option:not(:first)").remove();
                var da = result.data;
                for (var i in da) {
                    var temp = da[i];
                    $("#CId2").append(new Option(temp.ClassName, temp.Id));
                }

                form.render();
            }, 'json')
        });
下拉框监听后加载的另一个下拉框内容
//  执行搜索
        form.on("submit(search_go)", function (data) {
            var formField = data.field;
            formField.action = "View";
            formField.Is_hot = $("#Is_hot").val();
            formField.Is_top = $("#Is_top").val();
            formField.Status = $("#Status").val();
            newtable.reload({
                page: { curr: 1 },
                where: formField
            });
            return false;
        });
执行搜索
//  执行排序
        table.on('sort(tablelist)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
            //尽管我们的 table 自带排序功能,但并没有请求服务端。
            //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
            table.reload('Id', {
                initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。 layui 2.1.1 新增参数
                , where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
                    field: obj.field //排序字段
                    , order: obj.type //排序方式
                }
            });
        });
执行排序
//  监听行工具事件
        table.on('tool(tablelist)', function (obj) {//注:tool是工具条事件名,tablelist是table原始容器的属性 lay-filter="对应的值"
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值
            var tr = obj.tr; //获得当前行 tr 的DOM对象
            var $this = $(this); if ($(this).parents('table').length > 1) return;
            switch (obj.event) {
                case 'del'://删除
                    layer.confirm('您确定要删除该条记录嘛?', function (index) {//向服务端发送删除指令
                        del(data.Id, layer, obj);
                        layer.close(index);
                    });
                    break;
                case 'edit'://编辑
                    edit(data.Id, obj);
                    break;
                case 'comment'://查看留言
                    comment(data.Id, obj);
                    break;
                case 'Is_hot'://热点
                    var box = $this.find("input[name=" + layEvent + "]").prop("checked");
                    $$post(layEvent, { Id: obj.data.Id, val: box ? 1 : 0 }, "【编号:" + data.Id + "】" + (box ? "热点成功" : "取消热点"));
                    break;
                case 'Is_top'://置顶
                    var box = $this.find("input[name=" + layEvent + "]").prop("checked");
                    $$post(layEvent, { Id: obj.data.Id, val: box ? 1 : 0 }, "【编号:" + data.Id + "】" + (box ? "置顶成功" : "取消置顶"));
                    break;
                case 'Status'://启用
                    var box = $this.find("input[name=" + layEvent + "]").prop("checked");
                    $$post(layEvent, { Id: obj.data.Id, val: box ? 0 : 1 }, "【编号:" + data.Id + "】" + (box ? "启用成功" : "取消启用"));
                    break;
                case 'Up'://向上
                    var box = $this.find("input[name=" + layEvent + "]").prop("checked");
                    $$post(layEvent, { Id: obj.data.Id, val: box ? 0 : 1 }, "【编号:" + data.Id + "】" + "向上排序成功");
                    top.gridView.reload("Id");
                    break;
                case 'Down'://向下
                    var box = $this.find("input[name=" + layEvent + "]").prop("checked");
                    $$post(layEvent, { Id: obj.data.Id, val: box ? 0 : 1 }, "【编号:" + data.Id + "】" + "向下排序成功");
                    top.gridView.reload("Id");
                    break;
            }
        });
监听行工具事件
 //  监听行编辑事件
        table.on('edit(tablelist)', function (obj) { //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
            if ($(this).parents('table').length > 1) return;
            var value = obj.value //得到修改后的值
                , data = obj.data //得到所在行所有键值
                , field = obj.field; //得到字段

            var olddata = {};
            var inputElem = $(this);
            var tdElem = inputElem.closest('td');
            var valueOld = inputElem.prev().text();
            olddata[field] = valueOld;

            var arr = { BookingFee: "预订费用", Sort: '排序', Rank: '排名' };
            var msg = "";
            if (obj.field == "BookingFee" && !/^\d{1,10}(\.\d{1,2})?$/.test(value)) msg = "请输入正确的数值,且最多两位小数";
            if ((obj.field == "OrderId" || obj.field == "Sort" || obj.field == "Rank") && !/^[+]{0,1}(\d+)$/.test(value)) msg = "只能输入正整数";
            if (!!msg) {
                layer.msg(msg, { icon: 5, time: 1000, anim: 6, shade: 0.01 }, function () {
                    inputElem.blur();
                    obj.update(olddata);
                    tdElem.click();
                });
                return false
            }
            $$post(obj.field, { Id: obj.data.Id, val: value }, "【编号:" + data.Id + "】" + arr[obj.field] + ' 更改为:' + value);
            //$$post(obj.field, { Id: obj.data.Id, val: value }, '【编号:' + data.Id + '】' + arr[obj.field] + ' 更改为:' + value);
        });
监听行编辑事件
//  监听复选框选择事件
        table.on('checkbox(tablelist)', function (obj) {
            if (obj.type == 'all') return;
            if (obj.checked) checkedArr[obj.data.Id] = obj.tr.attr("data-index"); //obj.data.LAY_TABLE_INDEX;
            else delete checkedArr[obj.data.Id];
        });
监听复选框选择事件
function delcheck(obj, layer, checkStatus) {
        if (checkStatus.data.length <= 0) {
            layer.msg('您还没有选择任何行!', { icon: 5 });
            return;
        }
        var idArray = [];
        for (var i = 0; i < checkStatus.data.length; i++) {
            idArray.push(checkStatus.data[i].Id);
        }
        layer.confirm('您确定要删除该条记录嘛?', function (index) {//向服务端发送删除指令
            del(idArray.join(','), layer, obj, checkStatus);
            layer.close(index);
        });
    }

    function del(id, layer, obj, checkStatus) {
        $.ajax({
            cache: false,
            type: "POST",
            url: "?action=Del&id=" + id,
            async: false,
            error: function (request) {
                layer.msg("系统开小差了,请重试!", { icon: 5 });
            },
            success: function (data) {
                dataJson = JSON.parse(data);
                if (dataJson.code == 0) {
                    layer.msg(dataJson.msg, { icon: 1, shade: 0.3 });
                    if (checkStatus) {
                        if (checkStatus.isAll == true) {
                            $("tr[data-index]").remove();
                        } else {
                            for (var a = 0; a < checkStatus.data.length; a++) {
                                $("tr[data-index=" + checkedArr[checkStatus.data[a].Id] + "]").remove();
                            }
                        }
                    }
                    else obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                } else {
                    layer.msg(dataJson.msg, { icon: 5 });
                }
            }
        });
    }
多选删除和单选删除
//添加
    function add() {
        //  openDetail  是封装的方法,你可以参考官网layer编写一个适合你的openDetail弹窗
        openDetail('/XXX/XXX/XXX_edit.aspx?action=add', '添加XX', null, null);
    }
    //修改
    function edit(id, obj) {
        openDetail('/XXX/XXX/XXX_edit.aspx?action=edit&id=' + id, '修改XX', null, null);
    }
添加和修改弹窗
//  多行审核
    function Audit() {
        var checkStatus = layui.table.checkStatus('Id');
        if (checkStatus.data.length <= 0) {
            layer.msg('您还没有选择任何行!', { icon: 5 });
            return;
        }
        var idArray = [];
        for (var i = 0; i < checkStatus.data.length; i++) {
            idArray.push(checkStatus.data[i].Id);
        }
        var loadIndex = layer.load(2, { time: 10 * 1000 });
        layer.confirm('您确定选中的项都通过审核吗?', function (index) {
            $.ajax({
                cache: false,
                type: "POST",
                url: "?action=XX&id=" + idArray.join(','),
                async: false,
                error: function (request) {
                    layer.msg("系统开小差了,请重试!", { icon: 5 });
                },
                success: function (data) {
                    dataJson = JSON.parse(data);
                    if (dataJson.code == 0) {
                        layer.msg(dataJson.msg, { icon: 1 }, function () { top.gridView.reload("Id"); layer.close(index); });
                    } else {
                        layer.msg(dataJson.msg, { icon: 5 });
                    }
                }
            });
        });
        layer.close(loadIndex);
        top.gridView.reload("Id");
    }

    //  多行驳回
    function Reject() {
        var checkStatus = layui.table.checkStatus('Id');
        if (checkStatus.data.length <= 0) {
            layer.msg('您还没有选择任何行!', { icon: 5 });
            return;
        }
        var idArray = [];
        for (var i = 0; i < checkStatus.data.length; i++) {
            idArray.push(checkStatus.data[i].Id);
        }
        var loadIndex = layer.load(2, { time: 10 * 1000 });
        var str = "<div class='layui-card-body layui-form-text'>" +
            "<h5>驳回原因</h5>" +
            "<textarea name='AuditReason' placeholder='请输入' class='layui-textarea'></textarea>" +
            "</div>";
        layer.confirm(str, { btn: ['确定', '取消'], title: "您确定选中的项都驳回吗?", type: 1 }, function (index) {
            var AuditReason = $("textarea[name=AuditReason]").val();
            if (!AuditReason) {
                $("textarea[name=AuditReason]").focus();
                layer.msg("请输入驳回原因", { icon: 5 });
                return false;
            }
            var url = "?action=XX&id=" + idArray.join(',');
            $.ajax({
                cache: false, async: false,
                url: url, type: "POST",//dataType: "json",
                data: { AuditReason: AuditReason },
                error: function (request) {
                    layer.msg("系统开小差了,请重试!", { icon: 5 });
                },
                success: function (data) {
                    dataJson = JSON.parse(data);
                    if (dataJson.code == 0) {
                        layer.msg(dataJson.msg, { icon: 1 }, function () { top.gridView.reload("Id"); layer.close(index); });
                    } else {
                        layer.msg(dataJson.msg, { icon: 5 });
                    }
                }
            });
        });
        layer.close(loadIndex); top.gridView.reload("Id");
    }
多行审核和驳回
newtable = table.render({
                elem: '#new_table'  //  指定原始表格元素选择器(推荐id选择器)
                , toolbar: '#ToolBar'   //  指定数据表格工具栏
                , defaultToolbar: [/*'filter', 'exports', 'print'*/]    // 列过滤,导出,打印
                , height: 'full-60'     //  容器可运行差异高度的范围
                , page: true    //  是否开启分页
                , limits: [20, 50, 100, 200, 500, 1000] // 分页范围树
                , limit: 11  //  每页显示行
                , cols: [[  
                    { checkbox: true }  // 是否开启复选框选择
                    , { /*fixed: 'right',*/ title: '操作', width: 130, align: 'left', toolbar: '#Bar' }   //  指定行工具栏fixed指定是否处于右边
                    , {
                        field: 'Status', title: '是否启用', width: 170, align: 'center', templet: function (d) {  // 可定义内容的列
                            return '<div>' +
                                '<span lay-event="Is_hot"><input type="checkbox" name="Is_hot" ' + (d.Is_hot == 1 ? "checked" : "") + ' title="热点" class="Label"/></span> ' +
                                '<span lay-event="Is_top"><input type="checkbox" name="Is_top" ' + (d.Is_top == 1 ? "checked" : "") + ' title="置顶" class="Label"/></span>' +
                                '</div>'
                        }
                    }
                    , { field: 'Id', title: '编号', align: 'center', width: 80 }  // 一般列
                    , {
                        field: 'PicPath', title: '主图', width: 69, align: 'center', templet: function (d) {  // 显示图片的列
                            return '<div><img src="' + d.PicPath + '" style="height:36px;cursor:pointer;" onclick="window.open(this.src)" class="layui-table-img"/></div>'
                        }
                    }
                    , { field: 'Sort', title: '序号', width: 80, align: 'center', edit: 'text', sort: true }  // 可排序的列
                ]]
                //, even: true                        //    开启隔行背景
                , id: 'Id'                     //   设定容器唯一ID,是表格容器的索引
                , url: '?'                      //  接口地址
                , where: { action: 'View' }         //  接口的其它参数
                , method: 'get'
            });

模块中数据表格设置
数据表格渲染设置
function IndexExport() {
            layer.confirm("确定要导出会员,是否继续?", {}, function (index) {
                layer.close(index);
                var form = $("<form>");
                form.attr('style', 'display:none');
                form.attr('target', '');
                form.attr('method', 'post');

                form.attr('action', '/StarUser/Export?keywords=' + $('#keywords').val());

                var input1 = $('<input>');
                input1.attr('type', 'hidden');
                input1.attr('name', 'item');
                input1.attr('value', 'test');

                $('body').append(form);
                form.append(input1);

                form.submit();
                form.remove();

            });
        }
导出

 

<!--layui自定义非空验证-->
    <script>
        layui.wxverify = function (form) {
            var isverifySuccess = true;
            $(form).find("[wxverify='required']").each(function () {
                var verfyValue = $(this).val();
                if (verfyValue == undefined || verfyValue == null) {
                    verfyValue = "";
                }

                if (verfyValue == "" ) {
                    var msg = "必填项不能为空!";
                    if ($(this).attr("wxverifymessage") != undefined && $(this).attr("wxverifymessage") != "") {
                        msg = $(this).attr("wxverifymessage");
                    }
                    layer.msg(msg, { icon: 5, time: 1000 });
                    isverifySuccess = false;
                    return false;
                }

            });
            return isverifySuccess;
        }
    </script>
<!-- layui自定义非空验证使用示例 -->
 <select name="GradeId" lay-filter="GradeId" wxverifymessage="会内职务不能为空" wxverify="required">

 

posted @ 2020-07-26 17:26  名字什么都是浮云  阅读(1956)  评论(0编辑  收藏  举报