jt
2021-06-10 5d0d028456874576560552f5a5c4e8b801786f11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
layui.config({
    base: 'plugins/layui/modules/'
});
layui.define(['layer', 'laypage', 'icheck'], function(exports) {
    "use strict";
    var $ = layui.jquery,
        layer = parent.layer === undefined ? layui.layer : parent.layer,
        laypage = layui.laypage;
    /**
     * @description begtable元素
     */
    var ELEM = {
        table: 'beg-table',
        hover: 'beg-table-hovered',
        border: 'beg-table-bordered',
        strip: 'beg-table-striped'
    };
    /**
     * @constructor begTable 构造函数
     */
    var begTable = function() {
        this.config = {
            elem: undefined, //存放begtable的窗口,必填
            bordered: false, //是否加边框
            striped: false, //是否显示斑马线
            hovered: false, //鼠标悬停样式
            checked: false, //显示多选按钮
            checkboxClass: 'icheckbox_flat-green', //checkbox样式
            tips: '这是默认Tips',
            columns: undefined, // 数据列
            url: undefined, //远程地址
            data: undefined, //数据
            identity: undefined, // 标识字段
            paged: true, //启用分页功能
            type: 'get', //远程读取数据的方式
            pageSet: {
                jump: undefined, // 
                groups: 5,
            } //分页设置
        };
    };
    /**
     * @description 设置
     * @param {Object} options
     */
    begTable.prototype.set = function(options) {
        var that = this;
        $.extend(true, that.config, options);
        return that;
    };
    /**
     * @description 获取选择的行
     */
    begTable.prototype.getSelectedRows = function() {
        console.log(this.config.tips);
    };
    /**
     * 初始化begtable
     */
    begTable.prototype.init = function() {
        var _that = this;
        var _config = _that.config;
        var elem = _config.elem;
        if(typeof(elem) !== 'string' && typeof(elem) !== 'object') {
            throwError('elem参数未定义或设置出错,具体设置格式请参考文档API.');
        }
        var $container;
        if(typeof(elem) === 'string') {
            $container = $(elem);
        }
        if(typeof(elem) === 'object') {
            $container = elem;
        }
        if($container.length === 0) {
            throwError('找不到elem参数配置的容器,请检查.');
        }
        if(typeof(_config.columns) !== 'object') {
            throwError('请配置columns参数,具体设置格式请参考文档API');
        }
        var tableClass = ELEM.table;
        if(_config.bordered) {
            tableClass += ' ' + ELEM.border;
        }
        if(_config.hovered) {
            tableClass += ' ' + ELEM.hover;
        }
        if(_config.striped) {
            tableClass += ' ' + ELEM.strip;
        }
        var tableTemp = '<table class="' + tableClass + '">';
        var columns = _config.columns;
        var theadTemp = '<thead><tr>';
        //添加全选按钮
        if(_config.checked) {
            theadTemp += '<th style="width:25px;"><input type="checkbox" id="begtable-selected-all"></th>'
        }
        for(var i = 0; i < columns.length; i++) {
            theadTemp += '<th>' + columns[i].title + '</th>'
        }
        theadTemp += '</tr></thead>';
        var tbodyTemp = '<tbody>';
        var data = _config.data;
        if(data !== undefined && typeof(data) === 'object') {
            for(var i = 0; i < data.length; i++) {
                var tr = '<tr>';
                if(_config.checked) {
                    tr += '<td style="text-align: center;"><input type="checkbox" /></td>';
                }
                for(var j = 0; j < columns.length; j++) {
                    tr += '<td>' + data[i][columns[j].field] + '</td>';
                }
                tr += '</tr>';
                tbodyTemp += tr;
            }
        }
        tbodyTemp += '</tbody>';
        tableTemp = tableTemp + theadTemp + tbodyTemp + '</table>';
        //渲染table
        $container.html('<div class="beg-table-box"><div class="beg-table-body">' + tableTemp + '</div></div>');
        //checkbox
        if(_config.checked) {
            //渲染checkbox
            $container.find('input[type=checkbox]').iCheck({
                checkboxClass: _config.checkboxClass
            });
        }
        //分页
        if(_config.paged) {
            var $tableBox = $container.children('.beg-table-box');
            $tableBox.append('<div class="beg-table-paged"></div>');
            loadData($tableBox, 1);
        } else {
            $container.find('.' + ELEM.table).css('margin-bottom', '0px');
        }
 
        //msgErrorTips('请对begtable返回正确的JSON字符');
        return _that;
    };
    begTable.prototype.getConfig = function() {
        return this.config;
    };
    /**
     * 加载数据
     * @param {Object} $tableBox
     * @param {Number} page
     */
    function loadData($tableBox, page) {
        //var that = '';
        /*$.ajax({
            type: that.config.type,
            success: function(result) {
 
            }
        });*/
        laypage({
            cont: $tableBox.find('.beg-table-paged'),
            curr: page,
            pages: 25, //总页数
            groups: 5, //连续显示分页数                    
            jump: function(obj, first) {
                //得到了当前页,用于向服务端请求对应数据
                var curr = obj.curr;
                if(!first) {
                    //layer.msg('第 '+ obj.curr +' 页');
                    that.loadData()
                }
            }
        });
    }
    /**
     * 抛出一个异常错误信息
     * @param {String} msg
     */
    function throwError(msg) {
        throw new Error('betTable error:' + msg);
        return;
    }
    /**
     * 弹出一个错误提示
     * @param {String} msg
     */
    function msgErrorTips(msg) {
        layer.msg(msg, {
            icon: 5
        });
        return;
    }
 
    var begtable = new begTable();
    //begtable.init();
 
    exports('begtable', function(options) {
        return begtable.set(options);
    });
});