重新又封裝下layui table 做個(gè)記錄

本次封裝實(shí)現(xiàn)了一個(gè)頁(yè)面多次使用表格

直接上代碼

例子代碼


<div class="layui-fluid">

    <div class="layui-card">

        <div class="layui-card-body">

            <table class="layui-table" id="tableAdminlog" lay-filter="tableAdminlog"></table>

        </div>

    </div>

</div>



<script type="text/html" id="tablelinebar">

    <a class="layui-btn layui-btn-xs layui-bg-blue" lay-event="view">查看</a>

    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>

</script>



<script type="text/html" id="tabletoolbar">

    <div class="layui-btn-container">

        <button class="layui-btn layui-btn-sm" lay-event="refresh"><i class="layui-icon layui-icon-refresh"></i></button>

        <button class="layui-btn layui-btn-sm layui-bg-red" lay-event="del">刪除</button>

    </div>

</script>



<script type="text/html" id="modelView">

    <div id="modelViewDiv" class="layui-card-body">

        <table class="layui-table" lay-even lay-skin="nob" style="word-break: break-all;

word-wrap: break-word;

    border-collapse: collapse;">

            <thead>

            <tr>

                <th width="100">標(biāo)題</th>

                <th>內(nèi)容</th>

            </tr>

            </thead>

            <tbody>

            <tr>

                <td>id</td>

                <td>{{ d.id }}</td>

            </tr>

            <tr>

                <td>admin_id</td>

                <td>{{ d.admin_id }}</td>

            </tr>

            <tr>

                <td>用戶名</td>

                <td>{{ d.username }}</td>

            </tr>

            <tr>

                <td>url</td>

                <td>{{ d.url }}</td>

            </tr>

            <tr>

                <td>標(biāo)題</td>

                <td>{{ d.title }}</td>

            </tr>

            <tr>

                <td>內(nèi)容</td>

                <td>{{ d.content }}</td>

            </tr>

            <tr>

                <td>ip</td>

                <td>{{ d.ip }}</td>

            </tr>

            <tr>

                <td>useragent</td>

                <td>{{ d.useragent }}</td>

            </tr>

            <tr>

                <td>createtime</td>

                <td>{{ d.createtime }}</td>

            </tr>

            </tbody>

        </table>

        <div class="layui-form-item text-right">

            <button class="layui-btn layui-btn-primary" type="button" ew-event="closePageDialog">關(guān)閉</button>

        </div>

    </div>

</script>



<script>

    layui.use(['layer','laytpl', 'atable', 'admin'], function () {

        var $ = layui.jquery;

        var layer = layui.layer;

        var atable = layui.atable;

        var laytpl = layui.laytpl;

        //表頭

        var cols= [[

            {type: 'checkbox', fixed: 'left'},

            {field: 'id',  title: 'ID',width:75,align:'center'},

            {field: 'username',  title: '賬號(hào)',width:120},

            {field: 'title',  title: '標(biāo)題'},

            {field: 'url', title: '訪問(wèn)地址'},

            {field: 'ip',  title: 'IP',width:140},

            {field: 'createtime',  title: '時(shí)間',width:175},

            {align: 'center', toolbar: '#tablelinebar', title: '操作', width: 150}

]];

        window.tt=insTb = atable.render(

{

                elem:'#tableAdminlog'

                , id:'tableAdminlog'

                , checkbox : true

                , defaultToolbar: ['filter']

                ,url:'{:url("")}'

                ,toolbar:"#tabletoolbar"

                ,cols:cols

                ,limit: 15

                ,page:true

                ,listen:{

                    //單擊事件

                    click:function (obj) {

},

                    //雙擊事件

                    double:function (obj) {

                        var data = obj.data;

                        showDetailModel(data);

},

                    //單元格工具欄

                    tool:function (obj,event) {

                        var data = obj.data;

                        switch (event) {

                            case 'view':

                                showDetailModel(data);

                                break;

                            case 'del':

                                doDel(data.id);

                                break;

}

},

                    //表格工具欄

                    toolbar:function (obj,event) {

                        switch (event) {

                            case 'del':

                                var id = insTb.getMany();

                                console.log(id);

                                if (id != null) {

                                    doDel(id);

}

                                break;

}

}

}

}

);

        // 刪除

        function doDel(Ids) {

            layer.confirm('確定要?jiǎng)h除嗎荷逞?', {

                skin: 'layui-layer-admin',

                shade: .1

            }, function (i) {

                layer.close(i);

                layer.load(2);

                $.post('{:url("del")}', {

                    ids: Ids

                }, function (res) {

                    layer.closeAll('loading');

                    if (res.code) {

                        layer.msg(res.msg, {icon: 1});

                        insTb.reload();

                    } else {

                        layer.msg(res.msg, {icon: 2});

}

                }, 'json');

});

}

        // 顯示表單彈窗

        function showDetailModel(mData) {

            var shtml='';

            laytpl($('#modelView').html()).render(mData,function (html) {

                shtml=html

            });

            parent.layui.admin.open({

                type: 1,

                title: (mData ? '查看' : '添加') + '日志',

                shadeClose:true,

                content: shtml,

                area: ['700px'],

                success: function (layero, dIndex) {

                    $(layero).children('.layui-layer-content').css('overflow', 'visible');

}

});

}

});

</script>

atable.js 代碼


/**

@ Name:表格冗余列可展開(kāi)顯示

@ Author:hbm

@ License:MIT

*/

layui.define(['form', 'table'], function (exports) {

    var $ = layui.$

        , table = layui.table

        ,hint = layui.hint()

        , form = layui.form

        , VERSION = 3.0, MOD_NAME = 'atable', ELEM = '.layui-atable', ON = 'on', OFF = 'off';

    //日期格式化

    Date.prototype.format = function (format) {

        var args = {

            "M+": this.getMonth() + 1,

            "d+": this.getDate(),

            "h+": this.getHours(),

            "m+": this.getMinutes(),

            "s+": this.getSeconds(),

            "q+": Math.floor((this.getMonth() + 3) / 3), //quarter

            "S": this.getMilliseconds()

};

        if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

        for (var i in args) {

            var n = args[i];

            if (new RegExp("(" + i + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? n : ("00" + n).substr(("" + n).length));

}

        return format;

};

    //獲取字面量數(shù)組的第一個(gè)id項(xiàng)

    var  paraGetOneId = function (para) {

                if(para.length==0){

                    return null;

                }else{

                    var temp=para[0];

                    return temp.id;

}

}

        ,paraGetId = function (para) {

            var ids=[];

            if(para.length==0){

                return null;

}

            for(var i=0;i<para.length;i++){

                ids.push(para[i].id)

}

            return ids;

}

        //外部接口

        , atable = {

            config: table.config,

            index: layui.table.index,

            cache: layui.table.cache

            //設(shè)置全局項(xiàng)

            , set: layui.table.set

            //事件監(jiān)聽(tīng)

            , on: layui.table.on

            , reload: layui.table.reload

            , init: layui.table.init

            , checkStatus: layui.table.checkStatus

        }

        //操作當(dāng)前實(shí)例

        , thisIns = function () {

            var that = this

                , options = that.config

                , id = options.id || options.index;

            if(id){

                thisIns.that[id] = that; //記錄當(dāng)前實(shí)例對(duì)象

                thisIns.config[id] = options; //記錄當(dāng)前實(shí)例配置項(xiàng)

            }

            return {

                config: options

                ,reload: function(options){

                    console.log(options);

                    that.reload.call(that, options);

}

                ,setColsWidth: function(){

                    that.setColsWidth.call(that);

}

                ,resize: function(){ //重置表格尺寸/結(jié)構(gòu)

                    that.resize.call(that);

}

                ,getData: function () {

                    //獲取數(shù)據(jù)

                    return table.checkStatus(that.config.id).data;

}

                ,getStatus: function () {

                    var checkStatus = table.checkStatus(that.config.id);

                    return checkStatus;

}

                ,getOne: function () {

                    var table_data = this.getData();

                    if (table_data == null) {

                        layer.msg("無(wú)法獲取選中數(shù)據(jù)", {icon: 2});

                        return null;

}

                    if (table_data.length != 1) {

                        if (table_data.length == 0) {

                            layer.msg("至少要選中一條數(shù)據(jù)", {icon: 2});

                        } else {

                            layer.msg("只能選擇一條數(shù)據(jù)", {icon: 2});

}

                        return null;

}

                    var one_id = paraGetOneId(table_data);

                    if (one_id == null) {

                        layer.msg("無(wú)法獲取選中行id", {icon: 2});

                        return null;

}

                    return one_id;

}

                ,getMany: function (type = false) {

                    var table_data = this.getData();

                    if (table_data == null) {

                        layer.msg("無(wú)法獲取選中數(shù)據(jù)", {icon: 2});

                        return null;

}

                    if (table_data.length < 1) {

                        layer.msg("至少要選中一條數(shù)據(jù)", {icon: 2});

                        return null;

}

                    var many_id = paraGetId(table_data);

                    if (many_id == null) {

                        layer.msg("無(wú)法獲取選中行id", {icon: 2});

                        return null;

}

                    if (type) return many_id;

                    return many_id.join(',');

}

                ,search: function (search_param=[],page=1) {

                    var search_param = {

                        where: search_param,

                        page: {

                            curr: page

                        }

};

                    this.reload.call(that, search_param);

}

}

}

        //獲取當(dāng)前實(shí)例配置項(xiàng)

        ,getThisTableConfig = function(id){

            var config = thisIns.config[id];

            if(!config) hint.error('The ID option was not found in the table instance');

            return config || null;

}

        //構(gòu)造器

        , Class = function (options) {

            var that = this;

            that.index = ++atable.index;

            that.config = $.extend({}, that.config, atable.config, options);

            that.render();

            return this;

};

    //默認(rèn)配置

    Class.prototype.config = {

        checkbox:false  //單擊勾選

        ,request: {

            //頁(yè)碼的參數(shù)名稱,默認(rèn):page

                  pageName: 'page'

                //每頁(yè)數(shù)據(jù)量的參數(shù)名,默認(rèn):limit

                , limitName: 'limit'

        }

        //對(duì)分頁(yè)返回?cái)?shù)據(jù)進(jìn)行轉(zhuǎn)換

        , parseData: function (res) {

            return {

                //解析接口狀態(tài)

                "code": res.code,

                //解析提示文本

                "msg": res.msg,

                //解析數(shù)據(jù)長(zhǎng)度

                "count": res.total,

                //解析數(shù)據(jù)列表

                "data": res.data

            };

}

        //接口http請(qǐng)求類型

        , method: 'get'

        , limit: 5

        , limits:[15,30,50,100]

};

    //渲染視圖

    Class.prototype.render = function () {

        var that = this

            , options = that.config

            , instable = null;

        //  2、表格Render

        instable = table.render(options);

        //  當(dāng)前表格 lay-filter ID

        var elem = $(options.elem).attr("lay-filter");

        //  5曲横、監(jiān)聽(tīng)表格排序

        table.on('sort(' + elem + ')', function (obj) {

            if (options.listen && options.listen.sort) {

                options.listen.sort(obj)

}

});

        //  監(jiān)聽(tīng)單元格  單擊事件

        table.on('row('+ elem +')', function(obj){

            var checkCell=obj.tr.find(".layui-form-checkbox");

            if(options.checkbox == true){

                if(obj.tr.hasClass('layui-table-click')){

                    obj.tr.removeClass('layui-table-click');

                    checkCell.removeClass('layui-form-checked');

                    table.cache[elem][obj.tr[0].rowIndex]['LAY_CHECKED'] = false;

                }else {

                    obj.tr.addClass('layui-table-click');

                    checkCell.addClass('layui-form-checked');

                    table.cache[elem][obj.tr[0].rowIndex]['LAY_CHECKED'] = true;

}

}

            if (options.listen && options.listen.click) {

                options.listen.click(obj)

}

});

        //  監(jiān)聽(tīng)單元格  雙擊事件

        table.on('rowDouble('+ elem +')', function(obj){

            if (options.listen && options.listen.double) {

                options.listen.double(obj)

}

});

        //  監(jiān)聽(tīng)單元格  編輯事件

        table.on('edit(' + elem + ')', function (obj) {

            if (options.listen && options.listen.edit) {

                options.listen.edit(obj)

}

});

        // 監(jiān)聽(tīng)復(fù)選框事件

        table.on('checkbox(' + elem + ')', function(obj){

            if (options.listen && options.listen.checkbox) {

                options.listen.checkbox(obj)

}

});

        //  監(jiān)聽(tīng)行工具欄 事件

        table.on('tool('+ elem +')', function (obj) {

            if (options.listen && options.listen.tool) {

                var event = obj.event ? obj.event : null;

                options.listen.tool(obj,event);

}

});

        // 監(jiān)聽(tīng)表格頭部工具欄事件

        table.on('toolbar('+elem+')', function(obj){

            switch(obj.event){

                case 'refresh':

                    instable.reload({page:{curr: 1}});

                    break;

}

            if (options.listen && options.listen.toolbar) {

                var event = obj.event ? obj.event : null;

                options.listen.toolbar(obj,event);

}

});

};

    //表格重載

    Class.prototype.reload = function(options){

        var that = this;

        options = options || {};

        delete that.haveInit;

        if(options.data && options.data.constructor === Array) delete that.config.data;

        that.config = $.extend(true, {}, that.config, options);

        that.render();

};

    //記錄所有實(shí)例

    thisIns.that = {}; //記錄所有實(shí)例對(duì)象

    thisIns.config = {}; //記錄所有實(shí)例配置項(xiàng)

//核心入口

    atable.render = function (options) {

        var ins = new Class(options);

        return thisIns.call(ins);

};

    //在表頭,以指定格式進(jìn)行時(shí)間轉(zhuǎn)換

    atable.date_format=function (date, format) {

        if(format==null){

            format="yyyy-MM-dd hh:mm:ss";

}

        if (date != null) {

            return new Date(date).format(format)

}

        return "";

};

    //設(shè)置狀態(tài)

    atable.status = function(obj,status='status'){

        var strs = [

            '<span class="text-danger">停用</span>',

            '正常'

        ];

        return strs[obj.status];

};

    //表格重載

    atable.reload = function(id, options){

        var config = getThisTableConfig(id); //獲取當(dāng)前實(shí)例配置項(xiàng)

        if(!config) return;

        var that = thisIns.that[id];

        that.reload(options);

        return thisIns.call(that);

};

    exports('atable', atable);

});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睦刃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子檬输,更是在濱河造成了極大的恐慌照瘾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧慈,死亡現(xiàn)場(chǎng)離奇詭異析命,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逃默,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)鹃愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人完域,你說(shuō)我怎么就攤上這事软吐。” “怎么了吟税?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵凹耙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肠仪,道長(zhǎng)肖抱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任藤韵,我火速辦了婚禮虐沥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己欲险,他們只是感情好镐依,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著天试,像睡著了一般槐壳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喜每,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天务唐,我揣著相機(jī)與錄音,去河邊找鬼带兜。 笑死枫笛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刚照。 我是一名探鬼主播刑巧,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼无畔!你這毒婦竟也來(lái)了啊楚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浑彰,失蹤者是張志新(化名)和其女友劉穎恭理,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體郭变,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颜价,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诉濒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拍嵌。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖循诉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撇他,我是刑警寧澤茄猫,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站困肩,受9級(jí)特大地震影響划纽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锌畸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一勇劣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦比默、人聲如沸幻捏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)篡九。三九已至,卻和暖如春醋奠,著一層夾襖步出監(jiān)牢的瞬間榛臼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工窜司, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛善,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓塞祈,卻偏偏與公主長(zhǎng)得像金刁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子织咧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354