1. 程式人生 > >JS:jquery.dataTables.bootstrap外掛詳解

JS:jquery.dataTables.bootstrap外掛詳解

dataTable介紹


DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, build upon the foundations of progressive enhancement, that adds all of these advanced features to any HTML table.

1. 列表顯示


html

    <script src="${pageContext.request.contextPath}/core/js/jquery.min.js"></script>
    <script src="${pageContext.request.contextPath}/assets/js/bootstrap.min.js"></script>
    <script src="${pageContext.request.contextPath}/assets/js/jquery-ui-1.10.3.custom.min.js"></script>
    <script src="${pageContext.request.contextPath}/assets/js/jquery.dataTables.min.js"></script>
    <script src="${pageContext.request.contextPath}/assets/js/jquery.dataTables.bootstrap.js"></script>
                    <div class="col-xs-12">
                        <div class="table-header">
                            訂單列表
                        </div>
                        <div class="table-responsive">
                            <table id="orderTable" class="table table-striped table-bordered table-hover">
                                <thead>
                                <tr>
                                    <th class="center" style="width: 50px;">
                                        <label>
                                            <input type="checkbox" class="ace"/>
                                            <span class="lbl"></span>
                                        </label>
                                    </th>

                                    <th class="hidden-480" style="width: 80px;">ID</th>
                                    <th class="hidden-480" style="width: 150px;">主訂單號</th>
                                    <th class="hidden-480" style="width: 130px;">訂單型別</th>
                                    <th class="hidden-480" style="width: 150px;">物流資訊</th>
                                    <th class="hidden-480" style="width: 80px;">買家留言</th>
                                    <th class="hidden-480" style="width: 100px;">支付日期</th>
                                    <th class="hidden-480" style="width: 70px;">訂單狀態</th>
                                    <th class="hidden-480" style="width: 400px;">訂單商品</th>
                                </tr>
                                </thead>
                            </table>
                        </div><!--/.table-responsive -->
                    </div><!-- /.col -->

js

        $('#orderTable').dataTable({
            "bPaginate": true,//分頁工具條顯示
            "bStateSave": false, //是否開啟客戶端狀態記錄功能,此功能在ajax重新整理紀錄的時候不會將個性化設定回覆為初始化狀態
            "bScrollCollapse": true, //當顯示的資料不足以支撐表格的預設的高度
            "bLengthChange": true, //每頁顯示的記錄數
            "bFilter": false, //搜尋欄
            "bInfo": true, //顯示錶格資訊
            "bSort": false, //是否支援排序功能
            "bAutoWidth": false, //自適應寬度
            "bJQueryUI": false,//是否開啟主題
            "bDestroy": true,
            "bProcessing": false, //開啟讀取伺服器資料時顯示正在載入中……特別是大資料量的時候,開啟此功能比較好
            "bServerSide": true,//伺服器處理分頁,預設是false,需要伺服器處理,必須true
            "sAjaxDataProp": "aData",//是伺服器分頁的標誌,必須有
            "sServerMethod": "POST", // 請求方式  預設為GET
            "sAjaxSource": "${pageContext.request.contextPath}/manage/order/getTableData",//通過ajax實現分頁的url路徑。
            "fnServerParams": function (aoData) {  //查詢條件
                aoData.push(
                    {"name": "mainorderNum", "value": $("#mainorderNum").val()},
                    {"name": "phone", "value": $("#phone").val()},
                    {"name": "deliveryState", "value": $("#deliveryState").val()},
                    {"name": "orderType", "value": $("#orderType").val()},
                    {"name": "orderState", "value": $("#orderState").val()},
                    {"name": "startTime", "value": $("#startTime").val()},
                    {"name": "endTime", "value": $("#endTime").val()},
                    {"name": "goodsId", "value": $("#ddGoods").val()}
                )
            },
            "aoColumns": [//初始化要顯示的列
                {
                    "mDataProp": "id",//獲取列資料
                    "sClass": "center",//顯示樣式
                    "mRender": function (data, type, full) {//返回自定義的樣式
                        return "<label><input type='checkbox' class='ace' /><span class='lbl'></span></label>"
                    }
                },
                {
                    "sWidth": "60px",
                    "mDataProp": "id",//獲取列資料,跟伺服器返回欄位一致
                    "sClass": "left",//顯示樣式
                    "title": "ID"
                },
                {
                    "sWidth": "150px",
                    "mDataProp": "mainorderNum",
                    "mRender": function (data, type, full) {
                        return data + "<br> 外部訂單號:" + (full['outerOrderNum'] == null ? "" : full['outerOrderNum']);
                    }

                },
                {
                    "sWidth": "80px",
                    "mDataProp": "orderType",
                    "mRender": function (data, type, full) {
                        if (data == 0) {
                            return "有贊"
                        } else if (data == 1) {
                            return "淘寶"
                        } else if (data == 2) {
                            return "手工"
                        } else if (data == 3) {
                            return "提貨卡"
                        } else {
                            return ""
                        }
                    }
                },


                {
                    "mDataProp": "addressee",
                    "mRender": function (data, type, full) {
                        var html = full['addressee'] + " - " + full['phone'] + " - ";
                        if (full['yzExpressType'] != 1) {
                            html += full['province'] + " - " + full['city'] + " - " + full['district'] + " - " + full['address'];
                        } else {
                            html += full['address'];
                        }
                        html += "<br>物流型別:";
                        //物流型別 0:快遞發貨; 1:到店自提; 2:同城配送; 9:無需發貨(虛擬商品訂單)
                        if (full['yzExpressType'] == 0) {
                            html += "快遞發貨"
                        } else if (full['yzExpressType'] == 1) {
                            html += "到店自提"
                        } else if (full['yzExpressType'] == 2) {
                            html += "同城配送"
                        } else if (full['yzExpressType'] == 9) {
                            html += "無需發貨"
                        } else {
                            html += ""
                        }
                        return html;
                    }
                },
                {
                    "mDataProp": "buyerMessag"
                },
                {
                    "mDataProp": "orderTime",
                    "mRender": function (data, type, full) {
                        return timeStampToString(data);
                    }
                },
                {
                    "mDataProp": "orderState",
                    "mRender": function (data, type, full) {
                        //0 待付款  1 待送貨   2 已發貨  3 已收貨 4交易關閉 5退款中
                        var html = "";
                        if (data == 0) {
                            html = "<span class='label label-warning'>待付款</span>"
                        } else if (data == 1) {
                            html = "<span class='label label-warning'>待發貨</span>"
                        } else if (data == 2) {
                            html = "<span class='label label-primary'>已發貨</span>"
                        } else if (data == 3) {
                            html = "<span class='label label-primary'>交易完成</span>"
                        } else if (data == 4) {
                            html = "<span class='label label-primary'>交易關閉</span>"
                        } else if (data == 5) {
                            html = "<span class='label label-primary'>退款中</span>"
                        } else {
                            html = ""
                        }
                        if (full['yzIsSync'] == 0 && full['orderType'] == 0) {
                            html += "<br>量大於2";
                        }
                        return html;
                    }
                },
                {
                    "mDataProp": "orderGoods",
                    "mRender": function (data, type, full) {
                        var html = "";
                        for (var i = 0; i < data.length; i++) {
                            html = html + "<div class='col-sm-12' style='margin-bottom:10px;'>"
                            html = html + "<img src='${pageContext.request.contextPath}/upload/" + data[i].img + "' style='width:50px;height:50px;margin-bottom:5px;' /> ";

                            if (data[i].goodsId == 0) {
                                html = html + "<a id='" + data[i].id + "' title='" + data[i].goodsName1 + "<br>商品ID:" + data[i].outGoodsId + "<br>規格ID:" + data[i].outSkuid + "' href='javascript:refreshGoods(" + data[i].id + ")'>" + "商品ID:" + data[i].outGoodsId + " 規格ID:" + data[i].outSkuid + "</a>";
                            } else {
                                html = html + data[i].goodsName;
                                html = html + "(" + data[i].goodsNum + ")" + data[i].model + "(" + data[i].validNum + data[i].texture + ")";
                            }
                            html = html + "<br>";
                            if (isupdate == 1) {
                                //判斷是否有贊自提訂單
                                if (full['orderType'] == 0 && full['yzExpressType'] == 1) {

                                    //手工訂單
                                } else if (full['orderType'] == 2) {
                                    //快遞發貨
                                    if (full['yzExpressType'] == 0) {


                                        //到店自提
                                    } else if (full['yzExpressType'] == 1) {
                                        html += "<a class='blue' href=javascript:sendSMS('" + data[i].id + "')>" +
                                            " 短 信 " +
                                            "</a>";
                                    }
                                }
                                //快遞發貨
                                if (full['yzExpressType'] == 0 && (full['orderState'] == 1 || full['orderState'] == 2)
                                    && (data[i].expressSate == null || data[i].expressSate == 1)) { //待送貨狀態

                                    html += "<select  class='col-sm-3' style='padding:0 0' onchange=sendGoods('" + data[i].id + "',this.value)>" +
                                        "<option value=''>下發貨單</option>"
                                    for (var n in expressList) {
                                        html += "<option value='" + expressList[n].name + "'>" + JSON.parse(expressList[n].value).type + "</option>"
                                    }
                                    html += "</select>";
                                    html += "<select  class='col-sm-3' style='padding:0 0' onchange=javascript:printFaceSheet('" + data[i].orderNum + "',this.value)>" +
                                        "<option value=''>列印面單</option>"
                                    for (var n in expressList) {
                                        html += "<option value='" + expressList[n].name + "'>" + JSON.parse(expressList[n].value).type + "</option>"
                                    }
                                    html += "</select>";
                                    html += "<select  class='col-sm-3' style='padding:0 0' onchange=javascript:faceSheetCode('" + data[i].id + "',this.value)>" +
                                        "<option value=''>錄入面單號</option>"
                                    html += "<option value='zt'>無需發貨</option>";
                                    for (var n in expressList) {
                                        html += "<option value='" + expressList[n].name + "'>" + JSON.parse(expressList[n].value).type + "</option>"
                                    }
                                    //                                    html += "<option value='zt'>自提訂單</option>"
                                    html += "</select>";
                                    html += "<a class='blue' href=javascript:sendSMS('" + data[i].id + "')>" +
                                        " 短 信 " +
                                        "</a>";
                                }
                                if (full['orderState'] == 1 && full['orderType'] == 2) {
                                    html += "<a class='blue' href=javascript:deleteOrder('" + full['orderNum'] + "')>" +
                                        "刪除訂單" +
                                        "</a>";
                                } else if (data[i].expressSate == 2) { //已發貨
                                    html += "<a class='blue' href=javascript:sendState('" + data[i].expressId + "')>" +
                                        "物流狀態:已發貨," + data[i].expressType + "面單號【" + data[i].slogisticCode + "】" +
                                        "</a>";
                                } else if (data[i].expressSate == 3) { //已簽收
                                    html += "<a class='blue' href=javascript:sendState('" + data[i].expressId + "')>" +
                                        "物流狀態:已簽收," + data[i].expressType + "面單號【" + data[i].slogisticCode + "】" +
                                        "</a>";
                                }
                            }
                            html = html + "</div>";
                        }
                        return html;
                    }
                }
            ],

            "oLanguage": {//語言設定
                "sProcessing": "處理中...",
                "sLengthMenu": "顯示 _MENU_ 項記錄",
                "sZeroRecords": "沒有匹配記錄",
                "sInfo": "顯示第 _START_ 至 _END_ 條記錄,共 _TOTAL_ 條",
                "sInfoEmpty": "顯示第 0 至 0 條記錄,共 0 條",
                "sInfoFiltered": "",
                "sInfoPostFix": "",
                "sSearch": "搜尋:",
                "sUrl": "",
                "sEmptyTable": "表中資料為空",
                "sLoadingRecords": "載入中...",
                "sInfoThousands": ",",
                "oPaginate": {
                    "sFirst": "首頁",
                    "sPrevious": "上頁",
                    "sNext": "下頁",
                    "sLast": "末頁"
                },
                "oAria": {
                    "sSortAscending": ": 以升序排列此列",
                    "sSortDescending": ": 以降序排列此列"
                }
            }
        });

2. 條件查詢


html

                    <div class="col-xs-12">
                        <div class="table-header">
                            查詢條件
                        </div>
                        <div class="query_well">
                            <br>
                            <div class="row">
                                <div class="col-xs-12">
                                    <div class="form-group">

                                        <label class="col-sm-1 control-label center" for="mainorderNum">
                                            主訂單號: </label>
                                        <div class="col-sm-2">
                                            <input type="text" id="mainorderNum" placeholder="主訂單號"
                                                   class="col-xs-10 col-sm-12"/>
                                        </div>

                                        <label class="col-sm-1 control-label center" for="phone"> 買家電話: </label>
                                        <div class="col-sm-2">
                                            <input type="text" id="phone" placeholder="買家電話"
                                                   class="col-xs-10 col-sm-12"/>
                                        </div>


                                        <label class="col-sm-1 control-label center" for="startTime"> 建立時間: </label>
                                        <div class="col-sm-5">
                                            <div class="col-sm-12">
                                                <div class="col-sm-5">
                                                    <input class="col-sm-12" id="startTime" type="text"
                                                           readonly="readonly" placeholder="開始日期"/>
                                                </div>
                                                <label class="col-sm-2 control-label center"> — </label>
                                                <div class="col-sm-5">
                                                    <input class="col-sm-12" id="endTime" type="text"
                                                           readonly="readonly" placeholder="結束日期"/>
                                                </div>
                                            </div>
                                        </div>
                                    </div>

                                </div>
                            </div>

                            <br>
                            <div class="row">
                                <div class="col-xs-12">
                                    <div class="form-group">

                                        <label class="col-sm-1 control-label center" for="orderType"> 訂單型別: </label>

                                        <div class="col-sm-2">
                                            <select class="col-sm-12" id="orderType" style="padding:0 0">
                                                <option value=""> 請選擇型別</option>
                                                <option value="0"> 有贊商城訂單</option>
                                                <option value="1"> 淘寶商城訂單</option>
                                                <option value="2"> 手工訂單</option>
                                                <option value="3"> 提貨卡自動訂單</option>
                                            </select>
                                        </div>

                                        <label class="col-sm-1 control-label center" for="orderState">
                                            訂單狀態: </label>

                                        <div class="col-sm-2">
                                            <select class="col-sm-12" id="orderState" style="padding:0 0">
                                                <option value=""> 請選擇狀態</option>
                                                <option value="0">待付款</option>
                                                <option value="1">待發貨</option>
                                                <option value="2">已發貨</option>
                                                <option value="3">交易完成</option>
                                                <option value="4">交易關閉</option>
                                                <option value="5">退款中</option>

                                            </select>
                                        </div>
                                        <label class="col-sm-1 control-label center" for="ddGoods"> 訂單商品: </label>

                                        <div class="col-sm-2">
                                            <select class="col-sm-12" id="ddGoods" style="padding:0 0">
                                                <option value=""> 請選擇商品</option>
                                                <c:forEach items="${ddGoodList}" var="ddgood"
                                                           varStatus="roleStatus">
                                                    <option value="${ddgood.id}"> ${ddgood.name}</option>
                                                </c:forEach>
                                            </select>
                                        </div>

                                        <div class="col-sm-1">
                                            <div class="col-sm-12">
                                                <div class="col-sm-1">
                                                    <button id="query" class="btn btn-sm btn-success">
                                                        查 &nbsp;&nbsp;詢
                                                    </button>
                                                </div>
                                            </div>
                                        </div>
                                        <c:if test="${auth.isadd == 1}">
                                            <div class="col-sm-1">
                                                <div class="col-sm-12">
                                                    <div class="col-sm-1">
                                                        <button id="importYz" class="btn btn-sm btn-success">
                                                            同步有贊訂單
                                                        </button>
                                                    </div>
                                                </div>
                                            </div>
                                        </c:if>
                                        <div class="col-sm-1">

                                            <%--<div id="demoOut" class="MyCssBtn leftBtn" onclick="demoOut();"><span>模板下載</span>--%>
                                            <%--</div>--%>
                                            <%--<div id="excelOut" class="MyCssBtn leftBtn" onclick="excelOut();"><span>Excel匯出</span>--%>
                                            <%--</div>--%>


                                        </div>
                                    </div>
                                </div>
                            </div>
                            <br>
                        </div>
                    </div><!-- 查詢條件 -->

js

            "fnServerParams": function (aoData) {  //查詢條件
                aoData.push(
                    {"name": "mainorderNum", "value": $("#mainorderNum").val()},
                    {"name": "phone", "value": $("#phone").val()},
                    {"name": "deliveryState", "value": $("#deliveryState").val()},
                    {"name": "orderType", "value": $("#orderType").val()},
                    {"name": "orderState", "value": $("#orderState").val()},
                    {"name": "startTime", "value": $("#startTime").val()},
                    {"name": "endTime", "value": $("#endTime").val()},
                    {"name": "goodsId", "value": $("#ddGoods").val()}
                )
            },
        //查詢
        $("#query").click(function () {
            $("#orderTable").dataTable().fnDraw(true);
        });

3. 匯入匯出


html

                <div class="row" style="height: 50px;">
                    <div class="col-xs-12">
                        <div class="form-group">
                            <c:if test="${auth.isadd == 1}">
                                <li class="col-sm-2">
                                    <button onclick="addOrder();" class="btn btn-success btn-sm ">新&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增</button>
                                </li>
                            </c:if>
                            <form class="col-sm-2" action="/manage/order/downLoadDemo" method="post">
                                <input type="submit" class="btn btn-success btn-sm " value="模板下載">
                            </form>
                            <form class="col-sm-2" action="/manage/order/download" method="post" onsubmit="checkForm()">
                                <input type="submit" class="btn btn-success btn-sm " value="Excel匯出">
                                <input id="mainorderNum1" name="mainorderNum" value="" style="display: none"></input>
                                <input id="phone1" name="phone" value="" style="display: none"></input>
                                <input id="deliveryState1" name="deliveryState" value="" style="display: none"></input>
                                <input id="orderType1" name="orderType" value="" style="display: none"></input>
                                <input id="orderState1" name="orderState" value="" style="display: none"></input>
                                <input id="startTime1" name="startTime" value="" style="display: none"></input>
                                <input id="endTime1" name="endTime" value="" style="display: none"></input>
                                <input id="goodsId1" name="goodsId" value="" style="display: none"></input>
                            </form>
                            <c:if test="${auth.isadd == 1}">
                                <li class="col-sm-1">
                                    <span>上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;傳:</span>
                                </li>
                                <li class="col-sm-3">
                                    <span>
                                         <input type="file" accept=".xls" id="upfile" name="upfile" placeholder="">
                                    </span>
                                </li>
                                <li class="col-sm-2">
                                    <button id="importExp" onclick="importExp();" class="btn btn-success btn-sm ">導&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;入</button>
                                    <span>格式:.xls</span>
                                </li>
                            </c:if>
                        </div>
                    </div>
                </div><!-- 匯入匯出 -->

js

    //匯入檔案
    function importExp() {
        name = $("#upfile").val();
        if (name == "") {
            alert("請先選擇檔案!");
            return;

        }
        layer.msg("開始匯入訂單...");
        var formData = new FormData();
        formData.append("file", $("#upfile")[0].files[0]);
        formData.append("name", name);
        $.ajax({
            url: '/manage/order/upload',
            type: 'POST',
            async: false,
            data: formData,
            // 告訴jQuery不要去處理髮送的資料
            processData: false,
            // 告訴jQuery不要去設定Content-Type請求頭
            contentType: false,
            dataType: 'JSON',
            beforeSend: function () {
                console.log("正在進行,請稍候");
            },
            success: function (result) {
                var res = result.res;
                var resmsg = result.resMsg;
                if (res != 0 && res != "0") {
                    layer.msg("匯入成功" + resmsg + "條資料!");
                    $("#upfile").val("");
                    $("#orderTable").dataTable().fnDraw(true);
                    window.location.reload();
                } else {
                    alert("匯入失敗," + resmsg);
                    $("#upfile").val("");
                    window.location.reload();


                }
            }
        });
    }

4. 編輯修改一


html

<div class="modal fade" id="ztCode" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title" id="myModalLabe2">填寫運單資訊</h4>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="form-group">
                        <label class="col-sm-4 control-label text-right" for="slogisticCode">自提點: </label>
                        <div class="col-sm-6">
                            <select class="col-sm-12" id="ztid" style="padding:0 0">
                                <option value=""> 請選擇自提點</option>
                                <c:forEach items="${ztList}" var="zt" varStatus="roleStatus">
                                    <option value="${zt.id}"> ${zt.name}</option>
                                </c:forEach>
                            </select>
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
                <button type="button" class="btn btn-primary" id="saveztCode">提交更改</button>
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal -->
</div>

js

  var ztid = $("#ztid").val();
            $('#ztCode').modal('show');
            $.ajax({
                type: "POST",
                url: "/manage/order/modifySlogisticCode",
                data: {
                    id: goodsId,
                    expressType: expressType,
                    slogisticCode: slogisticCode
                },
                dataType: "json",
                success: function (data) {
                    if (data.res == 1) {
                        layer.msg("面單號提交成功")
                        $("#orderTable").dataTable().fnDraw(true);
                        $('#ztCode').modal('hide');

                    } else {
                        alert(data.resMsg);
                        $('#ztCode').modal('hide');

                    }
                }
            });

5. 編輯修改二


html

js

點選修改按鈕,使用layer.open方法載入toadd頁面;
controller查詢add頁面需要的引數加到model中返回;
在add頁面提交資料,重新整理列表;

    //手工訂單
    function handOrderGoods(id) {
	    handIndex=layer.open({
		  type: 2,
		  title: '手工訂單',
		  shadeClose: true,
		  shade: 0.8,
		  area: ['800px', '500px'],
		  content: '${pageContext.request.contextPath}/manage/card/toCardphoneOrderAdd?id='+id //iframe的url
		}); 
       
    }