bootstrap-table+pagination动态加载视图表

一个老项目需要添加一个新的需求:动态查询数据库里存在的表和视图。

实现效果

直接上代码

html

<link rel="stylesheet" type="text/css" href="../Styles/table/bootstrap-table.min.css" media="screen" />
    <script src="../Scripts/table/bootstrap-table.min.js"></script>
    <script src="../Scripts/table/bootstrap-table-zh-CN.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../Styles/pager/normalize.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="../Styles/pager/pagination.css" media="screen" />
    <%--<link rel="stylesheet" type="text/css" href="../Styles/pager/common.css" media="screen" />--%>

    <div class="content">
        <div class="Box BoxHead detail-block">
            <div class="form-inline" style="margin: 3px; padding: 3px;">
                <div class="form-group">
                    <label id="Label1" runat="server">选择视图:</label>
                    <select id="SView" class="form-control" onchange="selectOnchang(this)">
                    </select>
                </div>
            </div>
            <div id="condition">
                <%--生成查询条件--%>
            </div>
            <div class="form-group" id="qbt" style="display: none; width: 100%; text-align: center;">
                <button type="button" class="btn btn-default" style="margin: 0 auto;" onclick="querytable()">查询</button>
            </div>
        </div>
        <div class="panel panel-info">
            <div style="overflow: auto" id="layoutRows">

                <%--这里生成表格--%>
                <table class="table" id="table1">
                </table>
                <div class="M-box" style="padding:5px;"></div>
            </div>
        </div>
    </div>

js

<script src="../Scripts/pager/jquery.pagination.js"></script>
    <script type="text/javascript">
        var json;
        var orderby;
        var pagesize;
        $(document).ready(function () {
            $.ajax({
                url: "../QueryViewConfig/QueryViewConfig.json?id=12",
                type: "GET",
                dataType: "json",
                success: function (data) {
                    json = data;
                    //alert(json.name)
                    $("#SView").append("<option value='999'>请选择视图</option>");//绑定视图下拉框
                    $.each(data.view, function (index, item) {
                        $("#SView").append("<option value=" + item.view + ">" + item.name + "</option>");//绑定视图下拉框
                    });
                }
            })

        })

        function selectOnchang(obj) {
            //获取被选中的option标签选项 
            var value = obj.options[obj.selectedIndex].value;
            if (value != "" && value != "999") {
                $.each(json.view, function (index, item) {
                    if (item.view == value) {
                        orderby = item.orderby;
                        pagesize = item.pagesize
                        $("#condition").html("");
                        var i = 1;
                        var html = "";
                        $.each(item.condition, function (index, childitem) {
                            //alert(childitem.name)
                            //动态绑定查询条件ZS_V_采购订单
                            if (i % 3 == 1) {
                                html = html + "<div class='form-inline' style='margin: 3px; padding: 3px'>";
                            }
                            html = html + "<div class='form-group'>"
                            html = html + " <label>" + childitem.name + ":</label>"
                            if (childitem.type == "datetime") {//日期
                                html = html + " <input type='text' class='form-control Wdate'  onclick='WdatePicker()' data='" + childitem.value + "' type='datetime' mode='" + childitem.mode + "' />"
                            } else if (childitem.type == "textbox") {//文本
                                html = html + "<input type='text' class='form-control' data='" + childitem.value + "' mode='" + childitem.mode + "' type='datetime' />"
                            } else if (childitem.type == "select") {//下拉
                                html = html + "<select   class='form-control' data='" + childitem.value + "' type='" + childitem.type + "' >"
                                html = html + "<option value='999' >全部</option>"
                                $.each(childitem.option, function (index, optionitem) {
                                    html = html + "<option value='" + optionitem.value + "' >" + optionitem.name + "</option>"
                                });
                                html = html + "</select>"
                            }
                            html = html + "</div>"
                            if (i % 3 == 0) {
                                html = html + "</div>";
                            }
                            i++;
                        });

                        $("#condition").append(html)
                        $("#qbt").show()
                        $("#tabl1").html("")
                    }
                    autoheight()
                });
            }
        }

        function createtable(pageindex) {
            var jsonstr = "[]";
            var jsonarray = eval('(' + jsonstr + ')');
            $("#condition .form-control").each(function () {
                //组合条件
                // alert($(this).val() + "    " + $(this).attr("data"))
                //调用接口返回绑定数据 这里带分页
                //生成条件参数集合
                var item = {
                    "name": $(this).attr("data"),
                    "value": $(this).val(),
                    "mode": $(this).attr("mode"),
                    "type": $(this).attr("type")
                };
                jsonarray.push(item);
            })
            var formdata = {
                "viewname": $("#SView").val(),
                "condition": jsonarray,
                "orderby": orderby,
                "pagesize": pagesize,
                "pageindex": pageindex
            };
            // 加载动态表格
            $.ajax({
                url: "ViewTable.ashx",
                data: JSON.stringify(formdata),
                type: 'post',
                dataType: "text",
                success: function (data) {
                    //alert(data)
                    var dataJson = eval('(' + data + ')');//总数据集
                    var columnstr = "[]";
                    var columnarray = eval('(' + jsonstr + ')');//表头数据集
                    // 未查询到相应的列,展示默认列
                    if (dataJson.success != "ok") {
                        //没查到列的时候把之前的列再给它
                        alert("没有查询到数据");
                    } else {
                        // 异步获取要动态生成的列
                        var rows = dataJson.rows;
                        //获得第一个数据
                        var line = rows[0];
                        for (var item in line) {
                            if (item.indexOf("date") > 0 || item.indexOf("时间") > 0) {
                                columnarray.push({
                                    "field": item,
                                    "title": item,
                                    "align": 'center',
                                    "valign": 'middle',
                                    formatter: function (value, row, index) {
                                       return  value.replace("T", " ")
                                    }
                                });
                            } else {
                                columnarray.push({
                                    "field": item,
                                    "title": item,
                                    "align": 'center',
                                    "valign": 'middle'
                                });
                            } 
                        }
                        //初始化table
                        $('#table1').bootstrapTable('destroy').bootstrapTable({
                            data: dataJson.rows,
                            columns: columnarray
                        })
                    }
                }
            });
        }

        function querytable() {
            var jsonstr = "[]";
            var jsonarray = eval('(' + jsonstr + ')');
            $("#condition .form-control").each(function () {
                //组合条件
                // alert($(this).val() + "    " + $(this).attr("data"))
                //调用接口返回绑定数据 这里带分页
                //生成条件参数集合
                var item = {
                    "name": $(this).attr("data"),
                    "value": $(this).val(),
                    "mode": $(this).attr("mode"),
                    "type": $(this).attr("type")
                };
                jsonarray.push(item);
            })
            var formdata = {
                "viewname": $("#SView").val(),
                "condition": jsonarray,
                "orderby": orderby,
                "pagesize": pagesize
            };
            $.ajax({
                url: "GetPageTotal.ashx",
                data: JSON.stringify(formdata),
                type: 'post',
                dataType: "text",
                success: function (data) {
                    //alert(data)
                    var dataJson = eval('(' + data + ')');//总数据集
                    var columnstr = "[]";
                    var columnarray = eval('(' + jsonstr + ')');//表头数据集
                    // 未查询到相应的列,展示默认列
                    if (dataJson.success != "ok") {
                        //没查到列的时候把之前的列再给它
                        alert("没有查询到数据");
                    } else {
                        var pi = parseInt(dataJson.total / pagesize)
                        //alert(pi)
                        $('.M-box').pagination({
                            pageCount: pi,
                            callback: function (api) {
                                // alert(api.getCurrent())
                                createtable(api);
                                autoheight()
                            }
                        }, function (api) {
                            // alert(api.getCurrent())
                            createtable(api);
                            autoheight()
                        });
                    }
                }
            });
        }

        function autoheight() {
            if ($("#layoutRows").offset() == null || typeof ($("#layoutRows").offset()) == undefined) {
                return;
            }
            var rowsHeight = document.body.clientHeight - $("#layoutRows").offset().top - 10;
            if (parseInt(rowsHeight) <= 0) {
                rowsHeight = 600;
            }
            $('#layoutRows').css({ 'height': rowsHeight + 'px' });
        }

配置的JSON文件

{
    "view": [
        {
            "name": "采购订单",                            //中文名
            "view": "ZS_V_采购订单",			   //要查询的视图名字
            "pagesize": 10,			           //查询分页每页记录数
            "orderby": "docdate desc",			   //按字段排序
            "condition": [                                 //自定义查询条件
                {
                    "name": "开始日期",                    //中文名
                    "value": "docdate",		           //对应字段名
                    "type": "datetime",			   //查询控件类型(datetime,textbox,select)
                    "mode": "begintime"			   //时间查询开始日期
                },
                {
                    "name": "结束时间",
                    "value": "docdate",
                    "type": "datetime",
                    "mode": "endtime"		           //时间查询开始日期
                },
                {
                    "name": "供应商名称",
                    "value": "cardname",
                    "type": "textbox",			   //文本查询
                    "mode": "like"                         //模糊查询的话填like,默认可不填
                },
                {
                    "name": "zs_release",
                    "value": "zs_release",
                    "type": "select",                      //下拉框查询
                    "option": [				   //下拉项
                        {
                            "name": "是",
                            "value": true
                        },
                        {
                            "name": "否",
                            "value": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "发料单",
            "view": "ZS_V_发料单",
            "pagesize": 10,
            "orderby": "工单号 desc",
            "condition": [
                {
                    "name": "物料编码",
                    "value": "物料编码",
                    "type": "textbox",
                    "mode": ""
                }
            ]
        }
    ]
}

猜你喜欢

转载自blog.csdn.net/tink_tl/article/details/81451290
今日推荐