基于bootstrap-dialog封装下拉列表弹出层插件

  • 引入js文件

   jquery版本1.11.3,bootstrap3.x,第三个文件为本文封装的js

<script src="/js/jquery-1.11.3.min.js"></script>
<script src="/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<script src="/bootstrap-table/js/bootstrap-table.min.js"></script>
<script src="/bootstrap-table/js/bootstrap-table-zh-CN.min.js"></script>
<script src="/bootstrap-3.3.7/js/bootstrap-dialog.min.js"></script>
<script src="/js/bootsrapDialog.dropdownList.js"></script><!--此为自己封装-->
  • 实现目标

boostrap-dialog相关的的用法就不赘述了,网上有很多文章。

本文主要是实现 

1.弹出框中的表格自定义,根据不同的业务场景

2.选中记录,点击确定,实现下拉框一样的功能

  • 实现步骤

  1. 参考官网例子
BootstrapDialog.show({  
            message: 'Hello world!',  
            onshow: function(dialogRef){  
                alert('Dialog is popping up, its message is ' + dialogRef.getMessage()); 
            },  
            onshown: function(dialogRef){  
                alert('Dialog is popped up.');  
            },  
            onhide: function(dialogRef){  
                alert('Dialog is popping down, its message is ' + dialogRef.getMessage()); 
            },  
            onhidden: function(dialogRef){  
                alert('Dialog is popped down.');  
            }  
        });

使用message属性和onshown事件实现。

在message属性中定义htmt元素table相关的信息

message: $('<div><table id="choose_table" class="table-list table-condensed"></table></div>'),

onshown事件中对table进行初始化,使用boostraptable.js对choose_table进行初始化

buttons热键设置 定义确定和关闭按钮相关事件

  • 源代码

bootsrapDialog.dropdownList.js 文件

/**
 * 基于BootstrapDialog的下拉列表插件
 */
(function($) {
    $.extend({
        showChooseSubwindow: function (conf){
            BootstrapDialog.show({
                title:conf['title']||"请选择",
                cssClass: 'workflow-dialog',
                message: $('<div><table id="choose_table" class="table-list table-condensed"></table></div>'),
                onshow:function(){//打开的事件
                    if (typeof conf['onshow'] == 'function') {
                        conf['onshow']();
                    }
                },
                onshown:function(){ //打开后呈现给用户的事件
                    var url = conf['url'];
                    var columnArr = conf['columnArr'];
                    var queryParams = conf['queryParams'];
                    var pagination = conf['pagination']||false;
                    var configure = {
                        id: 'choose_table',
                        url: url,
                        columns:columnArr
                    }
                    var options = {
                        pagination: pagination,
                    }
                    BsTool.initTable(configure, queryParams, options);

                },
                onhide:function(){  //关闭的时候点击事件
                    if (typeof conf['onhide'] == 'function') {
                        conf['onhide']();
                    }
                },
                onhidden:function(){ //关闭之后点击事件
                    if (typeof conf['onhidden'] == 'function') {
                        conf['onhidden']();
                    }
                },
                buttons: [{
                    label: '确 定',
                    cssClass: 'btn-primary btn-sm',
                    action: function (dlg) {
                        var rows = $('#choose_table').bootstrapTable('getSelections');
                        if(rows.length == 0){
                            toastr.warning("请选择一条方案数据!")
                            return false;
                        }
                        conf['confirmFunc'](rows[0]);
                        dlg.close();
                    }
                }, {
                    label: '关 闭',
                    cssClass: 'btn-link btn-sm',
                    action: function (dlg) {
                        dlg.close();
                    }
                }]
            })
        },
        planChooseSubwindow :function (conf) {
            var setting ={
                title :'选择方案',
                url :'/plan/selectleafLevelPlanData',
                confirmFunc:conf['confirmFunc'],
                columnArr : [
                    {
                        radio: true
                    }, {
                        title: '序号',
                        align: 'center',
                        width: 50,
                        formatter: function (value, row, index) {
                            return index + 1;
                        }
                    }, {
                        field: 'id',
                        title: '方案主键id',
                        visible: false
                    }, {
                        field: 'planName',
                        title: '方案名称',
                        align: 'center'
                    },{
                        field: 'evalType',
                        title: '考评类型',
                        align: 'center',
                        formatter: function (value, row, index) {
                            if(value == 1){
                                return '领导人员';
                            } else if(value == 2){
                                return '领导班子';
                            }else if(value == 3){
                                return '中层人员';
                            } else {
                                return "无";
                            }
                        }
                    }
                ],
                queryParams : function (params) {
                    return {
                        evalType:conf['evalType']||1
                    }
                }
            }
            $.showChooseSubwindow(setting);
        },
        questionnarieChooseSubwindow :function (conf) {
            var setting ={
                title:'选择题库',
                pagination:true,
                url :'/questionnaire/listQuestionnaireInfo',
                confirmFunc:conf['confirmFunc'],
                columnArr : [
                    {
                        radio: true
                    }, {
                        field: 'orderno',
                        title: '序号',
                        align: 'center',
                        width: 50
                    }, {
                        field: 'title',
                        title: '标题',
                        align: 'center'
                    },{
                        field: 'number',
                        title: '题目数量',
                        align: 'center'
                    }
                ],
                queryParams : function (params) {
                    return {
                        pageSize: params.pageSize,
                        pageNumber: params.pageNumber
                    }
                }
            }
            $.showChooseSubwindow(setting);
        },
    });
})(jQuery);

本文对业务场景1:方案选择 2:题库选择  两个功能进行了进一步封装,分别为planChooseSubwindow函数和questionnarieChooseSubwindow 函数

shown:对bootstraptable,table组件的初始化也进行了封装,使用官网原生的也可以,在这里不是重点。

url:后台接口访问地址

confirmFunc:确定 事件

  • 业务调用代码

$('#btn_questionniare_choose').click(function () {
        var conf = {
            confirmFunc: function (data) {
                //此部分为 确定之后调用的业务代码
                var rows = $('#middleTable').bootstrapTable("getAllSelections");
                if (rows.length > 0) {
                    updateMiddlePlan(rows, data.id);
                } else {
                    toastr.warning('请选择需要操作的人员');
                }
            }
        }
        $.questionnarieChooseSubwindow(conf);
    });
  • 效果图

题库选择

方案选择

  • 其它相关js文件

bootstraptable.js封装,table部分代码

var BsTool = BsTool || {};
BsTool.prototype = (function () {
initTable: function (conf, qp, opt, fn) {
            if (!(typeof conf == 'object' && 'id' in conf && 'columns' in conf)) {
                console.warn('初始化表格失败');
                return;
            }
            var url = '';
            var defaultOption = {
                height: '',
                width: '',
                showFooter: false,
                pagination: true,
                pageSize: 10,
                pageList: [10, 20],
                clickToSelect: true,
                detailView: false,
                striped: true,
                singleSelect: false,
            }
            if (typeof opt == 'object') {
                for (var op in opt) {
                    defaultOption[op] = opt[op];
                }
            }
            if(conf['url']){
                url = prefix + conf['url'];
            }
            return $('#' + conf['id']).bootstrapTable({
                url: url,
                method: conf['method']||'post',
                contentType: conf['contentType']|| "application/x-www-form-urlencoded; charset=UTF-8",
                toolbar: '#' + conf['toolbar'],
                columns: conf['columns'],
                cache: false,
                showFooter: conf['showFooter'],
                checkboxHeader: true,
                clickToSelect: defaultOption['clickToSelect'],
                queryParamsType: '',
                height: defaultOption['height'],
                width: defaultOption['width'],
                sidePagination: 'server',
                queryParams: qp,
                pagination: defaultOption['pagination'],
                paginationPreText: '上一页',
                paginationNextText: '下一页',
                pageSize: defaultOption['pageSize'],
                pageList: defaultOption['pageList'],
                detailView: defaultOption['detailView'],
                striped: defaultOption['striped'],
                singleSelect: defaultOption['singleSelect'],
                showJumpto: true,
                showExport: conf['showExport'],
                rowStyle: conf['rowStyle'],
                exportDataType: conf['exportDataType'],
                ajaxOptions:{crossDomain: true,xhrFields: {withCredentials: true}},
                onLoadSuccess: function (data) {
                    if (typeof fn == 'function') {
                        fn(data);
                    }
                }
            });
        },
})();
BsTool = BsTool.prototype;

猜你喜欢

转载自blog.csdn.net/xiewenfeng520/article/details/85132414