zyd.table.js 13.1 KB
Newer Older
Y
yadong.zhang 已提交
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
/**
 * MIT License
 *
 * Copyright (c) 2018 yadong.zhang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * bootstrap-table工具类
 *
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @website https://www.zhyd.me
 * @version 1.0
 * @date 2018-04-22
 * @since 1.0
 */
(function ($) {
    $.extend({
        tableUtil: {
            _option: {},
            init: function (options) {
                $.tableUtil._option = options;
智布道's avatar
智布道 已提交
38 39
                var $tablelist = $('#tablelist');
                $tablelist.bootstrapTable('destroy').bootstrapTable({
Y
yadong.zhang 已提交
40 41 42 43
                    url: options.url,
                    method: 'post',                      //请求方式(*)
                    toolbar: '#toolbar',                //工具按钮用哪个容器
                    striped: true,                      //是否显示行间隔色
智布道's avatar
智布道 已提交
44
                    cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
Y
yadong.zhang 已提交
45 46 47 48 49 50 51 52 53
                    contentType: "application/x-www-form-urlencoded", // 发送到服务器的数据编码类型, application/x-www-form-urlencoded为了实现post方式提交
                    sortable: false,                     //是否启用排序
                    sortOrder: "asc",                   //排序方式
                    sortStable: true,                   // 设置为 true 将获得稳定的排序
                    queryParams: $.tableUtil.queryParams,//传递参数(*)
                    queryParamsType: '',
                    pagination: true,                   //是否显示分页(*)
                    sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
                    pageNumber: 1,                       //初始化加载第一页,默认第一页
54 55
                    pageSize: 20,                       //每页的记录行数(*)
                    pageList: [20, 40, 50, 100, 150],        //可供选择的每页的行数(*)
Y
yadong.zhang 已提交
56 57 58 59
                    search: true,                       //是否启用搜索框 根据sidePagination选择从前后台搜索
                    strictSearch: true,                 //设置为 true启用 全匹配搜索,否则为模糊搜索
                    searchOnEnterKey: true,            // 设置为 true时,按回车触发搜索方法,否则自动触发搜索方法
                    minimumCountColumns: 1,             //最少允许的列数
60
                    // showColumns: true,                  //是否显示 内容列下拉框
Y
yadong.zhang 已提交
61
                    showRefresh: true,                  //是否显示刷新按钮
62 63 64 65 66 67 68 69 70 71 72
                    // showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
                    iconsPrefix: 'fa', // glyphicon of fa (font awesome)
                    icons: {
                        // paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down',
                        // paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up',
                        refresh: 'fa-refresh icon-refresh',
                        toggle: 'fa-list-alt icon-list-alt',
                        columns: 'fa-th icon-th',
                        detailOpen: 'fa-plus icon-plus',
                        detailClose: 'fa-minus icon-minus'
                    },
Y
yadong.zhang 已提交
73 74 75 76 77
                    // detailView: true,                   //是否显示父子表
                    // showExport: true,                   //是否显示导出
                    // exportDataType: "basic",              //basic', 'all', 'selected'.
                    // clickToSelect: true,                //是否启用点击选中行
                    // singleSelect: true,
78
                    height: 440,                        //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
Y
yadong.zhang 已提交
79 80 81 82 83 84 85 86
                    onEditableSave: function (field, row, oldValue, $el) {
                        if (options.updateUrl) {
                            $.ajax({
                                type: "post",
                                url: options.updateUrl,
                                data: {strJson: JSON.stringify(row)},
                                success: function (json) {
                                    if (json.status == 200) {
Y
yadong.zhang 已提交
87
                                        $.alert.info(json.message);
Y
yadong.zhang 已提交
88
                                    } else {
Y
yadong.zhang 已提交
89
                                        $.alert.error(json.message);
Y
yadong.zhang 已提交
90 91 92
                                    }
                                },
                                error: function () {
Y
yadong.zhang 已提交
93
                                    $.alert.error("网络超时!");
Y
yadong.zhang 已提交
94 95 96
                                }
                            });
                        } else {
Y
yadong.zhang 已提交
97 98
                            $.alert.error("无效的请求地址!");
                            return false;
Y
yadong.zhang 已提交
99 100
                        }
                    },
智布道's avatar
智布道 已提交
101
                    onExpandRow: options.onExpandRow,
102 103 104
                    rowStyle: options.rowStyle || function (row, index) {
                        return {};
                    },
Y
yadong.zhang 已提交
105 106
                    columns: options.columns
                });
107
                $tablelist.on('load-success.bs.table', function (data) {
智布道's avatar
智布道 已提交
108 109
                    zhyd.initSwitchery();
                });
Y
yadong.zhang 已提交
110 111 112
            },
            queryParams: function (params) {
                params = $.extend({}, params);
113
                params.keywords = params.searchText;
Y
yadong.zhang 已提交
114 115 116 117 118 119 120 121 122 123 124
                return params;
            },
            refresh: function () {
                $("#tablelist").bootstrapTable('refresh', {url: $.tableUtil._option.url});
            }
        },
        buttonUtil: {
            init: function (options) {
                /* 添加 */
                $("#btn_add").click(function () {
                    resetForm();
125 126 127
                    var $addOrUpdateModal = $("#addOrUpdateModal");
                    $addOrUpdateModal.modal('show');
                    $addOrUpdateModal.find(".modal-dialog .modal-content .modal-header h4.modal-title").html("添加" + options.modalName);
Y
yadong.zhang 已提交
128

129 130 131
                    var $password = $("#password");
                    if ($password && $password[0]) {
                        $password.attr("required", "required");
Y
yadong.zhang 已提交
132
                    }
133 134 135
                    var $username = $("#username");
                    if ($username && $username[0]) {
                        $username.removeAttr("readonly");
Y
yadong.zhang 已提交
136 137 138 139 140 141 142 143 144 145 146 147 148 149
                    }
                    bindSaveInfoEvent(options.createUrl);
                });

                /* 修改 */
                $('#tablelist').on('click', '.btn-update', function () {
                    var $this = $(this);
                    var userId = $this.attr("data-id");
                    $.ajax({
                        type: "post",
                        url: options.getInfoUrl.replace("{id}", userId),
                        success: function (json) {
                            var info = json.data;
                            resetForm(info);
150 151 152 153 154 155
                            var $addOrUpdateModal = $("#addOrUpdateModal");
                            $addOrUpdateModal.modal('show');
                            $addOrUpdateModal.find(".modal-dialog .modal-content .modal-header h4.modal-title").html("修改" + options.modalName);
                            var $password = $("#password");
                            if ($password && $password[0]) {
                                $password.removeAttr("required");
Y
yadong.zhang 已提交
156
                            }
157 158 159
                            var $username = $("#username");
                            if ($username && $username[0]) {
                                $username.attr("readonly", "readonly");
Y
yadong.zhang 已提交
160 161 162 163 164
                            }

                            bindSaveInfoEvent(options.updateUrl);

                        },
Y
yadong.zhang 已提交
165
                        error: $.alert.ajaxError
Y
yadong.zhang 已提交
166 167 168 169 170
                    });
                });

                /* 删除 */
                function remove(ids) {
Y
yadong.zhang 已提交
171
                    $.alert.confirm("确定删除该" + options.modalName + "信息?", function () {
Y
yadong.zhang 已提交
172 173 174 175 176 177
                        $.ajax({
                            type: "post",
                            url: options.removeUrl,
                            traditional: true,
                            data: {'ids': ids},
                            success: function (json) {
Y
yadong.zhang 已提交
178
                                $.alert.ajaxSuccess(json);
Y
yadong.zhang 已提交
179 180
                                $.tableUtil.refresh();
                            },
181 182 183
                            error: function (error) {
                                console.error(error);
                            }
Y
yadong.zhang 已提交
184 185 186 187 188 189 190 191 192 193
                        });
                    }, function () {

                    }, 5000);
                }

                /* 批量删除用户 */
                $("#btn_delete_ids").click(function () {
                    var selectedId = getSelectedId();
                    if (!selectedId || selectedId == '[]' || selectedId.length == 0) {
Y
yadong.zhang 已提交
194
                        $.alert.error("请至少选择一条记录");
Y
yadong.zhang 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
                        return;
                    }
                    remove(selectedId);
                });

                /* 删除 */
                $('#tablelist').on('click', '.btn-remove', function () {
                    var $this = $(this);
                    var userId = $this.attr("data-id");
                    remove(userId);
                });
            }
        }
    });
})(jQuery);

function bindSaveInfoEvent(url) {
212
    $(".addOrUpdateBtn").unbind('click').click(function () {
Y
yadong.zhang 已提交
213 214 215 216 217 218
        if (validator.checkAll($("#addOrUpdateForm"))) {
            $.ajax({
                type: "post",
                url: url,
                data: $("#addOrUpdateForm").serialize(),
                success: function (json) {
Y
yadong.zhang 已提交
219
                    $.alert.ajaxSuccess(json);
Y
yadong.zhang 已提交
220 221 222
                    $("#addOrUpdateModal").modal('hide');
                    $.tableUtil.refresh();
                },
Y
yadong.zhang 已提交
223
                error: $.alert.ajaxError
Y
yadong.zhang 已提交
224 225 226 227 228 229
            });
        }
    })
}

function resetForm(info) {
230 231 232 233
    var $combox = $("#addOrUpdateModal form select[target=combox]");
    if($combox && $combox[0]) {
        zhyd.combox.init();
    }
Y
yadong.zhang 已提交
234 235 236 237 238 239
    $("#addOrUpdateModal form input,#addOrUpdateModal form select,#addOrUpdateModal form textarea").each(function () {
        var $this = $(this);
        clearText($this, this.type, info);
    });
}

240
function clearText($this, type, info) {
Y
yadong.zhang 已提交
241
    var $div = $this.parents(".item");
Y
yadong.zhang 已提交
242 243
    if ($div && $div.hasClass("bad")) {
        $div.removeClass("bad");
Y
yadong.zhang 已提交
244 245 246 247 248 249
        $div.find("div.alert").remove();
    }
    if (info) {
        var thisName = $this.attr("name");
        var thisValue = info[thisName];
        if (type == 'radio') {
250 251 252 253 254 255 256
            var _typeof = (typeof thisValue);
            if (_typeof == "boolean") {
                $this.iCheck(((thisValue && 1 == $this.val()) || (!thisValue && 0 == $this.val())) ? 'check' : 'uncheck')
            } else if (_typeof == "string") {
                $this.iCheck(((thisValue == '1' && 1 == $this.val()) || (thisValue != '1' && 0 == $this.val())) ? 'check' : 'uncheck')
            }

Y
yadong.zhang 已提交
257
        } else if (type.startsWith('select')) {
258
            if (thisValue == 'true' || thisValue == true) {
Y
yadong.zhang 已提交
259
                thisValue = 1;
260
            } else if (thisValue == 'false' || thisValue == false) {
Y
yadong.zhang 已提交
261
                thisValue = 0;
Y
yadong.zhang 已提交
262
            }
Y
yadong.zhang 已提交
263 264
            $this.val(thisValue);
        } else {
265
            if (type != 'password') {
266 267 268 269
                $this.val(thisValue);
            } else {
                $this.val('');
            }
Y
yadong.zhang 已提交
270 271
        }
    } else {
Y
yadong.zhang 已提交
272
        if (type === 'radio' || type === 'checkbox') {
Y
yadong.zhang 已提交
273
            $this.iCheck('uncheck');
274
        } else {
Y
yadong.zhang 已提交
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
            $this.val('');
        }
    }
}

/**
 * 获取选中的记录ID
 * @returns {Array}
 */
function getSelectedId() {
    var selectedJson = $("#tablelist").bootstrapTable('getAllSelections');
    var ids = [];
    $.each(selectedJson, function (i) {
        ids.push(selectedJson[i].id);
    });
    return ids;
}

/**
 * 获取选中的记录
 * @returns {*|jQuery}
 */
function getSelectedObj() {
Y
yadong.zhang 已提交
298
    return $("#tablelist").bootstrapTable('getAllSelections');
Y
yadong.zhang 已提交
299
}