Boostrap-table.js+bootstrap-editable.js增删改查完整案例

版权声明:本文为博主原创文章,未经暴烈骑士允许或未声明者不得转载。 https://blog.csdn.net/u010543785/article/details/52314865

先上效果图:
这里写图片描述
Boostrap-table.js简单表格可视化可参考我的另外一篇博文:Boostrap-table.js的表格数据可视化 集成bootstrap-table-editable.js

该完整案例是典型的部门管理,通过ajax发出增删改查请求:

html代码:

<section class="panel">
                        <header class="panel-heading">
                            部门列表
                        </header>
                        <div id="toolbar" style="margin: 10px">
                            <section class="panel">
                                <div class="panel-body">
                                    <form class="form-inline">
                                        <button id="remove" class="btn btn-danger" disabled>
                                            <i class="glyphicon glyphicon-trash"></i> 删除
                                        </button>
                                        <div class="form-group">
                                            <input  class="form-control" id="nameInp" placeholder="输入新建部门名" style="display: none">
                                        </div>
                                        <div class="form-group"  >
                                            <select class="form-control" id="departSel"  style="display: none;">
                                            </select>
                                        </div>
                                        <a id="add" class="btn btn-success">
                                            <i class="glyphicon glyphicon-plus"></i> 新建
                                        </a>
                                        <a id="cancel" class="btn btn-warning" style="display:none">
                                            <i class="icon icon-remove-circle">取消</i>
                                        </a>
                                        <span class="remind"></span>
                                    </form>
                                </div>
                            </section>
                        </div>
                        <table id="departTable">
                        </table>
                    </section>

至于js的引用得参考我另外篇博客

js代码

/**
 * Created by ASUS on 2016/5/31. 部门管理
 */
$table = $("#departTable");
$remove = $('#remove');
$(document).ready(function(){
    initDepartSelect();
    //表格初始化
    var oTable = new TableInit();
    oTable.Init();
    //查询
   /* $("#queryBtn").click(function(){
        $table.bootstrapTable('destroy');//表格销毁
        oTable.Init()
    });*/
    $("#add").click(function(){
        var name = $("#nameInp").val();
        var parentId =$("#departSel").val();
            parentId = parentId=="*"?"":parentId;
        var  $remind = $(".remind");
        if($(this).find("i").hasClass("adding")){//提交新建数据
            if(name==''){
                $remind.html(' <i class="icon icon-info-sign">部门名不能为空!</i>');
                return;
            }
            if(/(^\s+)|(\s+$)/g.test(name)){
                $remind.html(' <i class="icon icon-info-sign">部门名不能输入空格!</i>');
                return;
            }
            if(name.length>20){
                $remind.html(' <i class="icon icon-info-sign">部门名不能超过20个字符!</i>');
                return;
            }
  //博主封装的ajax方法,详见我另外一篇博客   http://blog.csdn.net/u010543785/article/details/52366495          
  $.postJSON(baseUrl+"department/add",'{"name":"'+name+'","parentdepartId":"'+parentId+'"}',function(data){
                if(data>0){
                    $("#departSel").css("display","none");
                    $("#departSel").val("*");
                    $("#nameInp").css("display","none");
                    $("#nameInp").val("");
                    $("#cancel").css("display", "none");
                    $remind.html('');
                    $("#add").html('<i class="glyphicon glyphicon-plus"></i> 新建');
                    $table.bootstrapTable('destroy');//表格销毁
                    oTable.Init();
                    $.gritter.add({
                        title: '提示',
                        text: '新建部门成功!',
                        sticky: false,
                        time: 2500
                    });
                    initDepartSelect();
                }else{
                    alert("新建部门失败,请联系技术人员!");
                }
            })
        }else {
            $("#nameInp").css("display", "block");
            $("#departSel").css("display", "block");
            $("#cancel").css("display", "inline-block");
            $("#nameInp").focus();
            $("#add").html('<i class="glyphicon glyphicon-ok-circle adding"></i> 确认');
        }
    });
});
$("#cancel").click(function(){
    $("#departSel").css("display","none");
    $("#departSel").val("*");
    $("#nameInp").css("display","none");
    $("#nameInp").val("");
    $("#add").html('<i class="glyphicon glyphicon-plus"></i> 新建');
    $(".remind").html('');
    $(this).css("display","none");
});
var TableInit = function () {
    var oTableInit = new Object();
    //初始化Table
    oTableInit.Init = function () {
        $table.bootstrapTable({
            pagination: false,
            url: baseUrl + "department/queryAll",
            columns: [
                {
                    field: 'state',
                    checkbox: true
                }, {
                    title: '部门名',
                    field: 'name',
                    align: 'left',
                    formatter: spanFormatter,
                    sortable: true
                }, {
                    title: '上级部门名',
                    field: 'parentdepartName',
                    align: 'left',
                    formatter: nullFormatter,
                    sortable: true
                }, {
                    field: 'id',
                    title: '操作',
                    align: 'left',
                    events: operateEvents,
                    formatter: operateFormatter
                }
            ]
        });
    }
    return oTableInit;
}

//操作
window.operateEvents = {
    'click .edit': function (e, value, row, index) {
        index = index+1;//tr所在行
        var $row = $table.find("tbody tr:nth-child("+index+")");
        //各字段的编辑
        var $name = $row.find("td:nth-child(2) span");
        var  $parentdepartName= $row.find("td:nth-child(3) span");

        if($(this).hasClass("editting")){//编辑完成
            $(this).siblings("a").css("display","none");
            $(this).find("i").removeClass("glyphicon-ok");
            $(this).find("i").addClass("glyphicon-edit");
            $(this).removeClass("editting");
            $row.find(".editable").editable('toggleDisabled');//转成不可编辑状态

            row.name = $name.html();
            var parentId = $parentdepartName.attr("data-value");
            row.parentdepartId = parentId=="null"?"":parentId;

             //博主封装的ajax方法,详见我另外一篇博客   http://blog.csdn.net/u010543785/article/details/52366495
     $.putJSON(baseUrl+"department/update", JSON.stringify(row),function(data){//编辑请求  并返回值
                if(data==1) {
                    $.gritter.add({
                        title: '提示',
                        text: '编辑部门成功!',
                        sticky: false,
                        time: 2000,
                    });
                }else{
                    alert("编辑失败,请联系技术人员!");
                }
            });
        }else{//开始编辑
            $(this).siblings("a").css("display","inline-block");
            $row.find(".editable").editable('toggleDisabled');
            $(this).find("i").removeClass("glyphicon-edit");
            $(this).find("i").addClass("glyphicon-ok");
            $(this).addClass("editting");
            //变成可编辑状态
            $name.editable({//部门名
                validate: function(value) {
                    if(/(^\s+)|(\s+$)/g.test(value)){
                        return '部门名不能输入空格!';
                    }
                    if(value.length>20){
                        return '部门名不能超过20个字符!';
                    }
                    if($.trim(value) == '') return '部门名不能为空!';

                }
            });
            $parentdepartName.editable({//部门
                type:'select2',
                emptytext: '无上级',
                showbuttons: false,
                select2: {
                    width: '230px',
                    minimumInputLength: 0,
                    minimumResultsForSearch: -1,
                    id: function (e) {
                        return e.id;
                    },
                    ajax: {
                        url: baseUrl+"department/queryAll",
                        dataType: 'json',
                        data: function (term, page) {
                            return { query: term };
                        },
                        results: function (data, page) {
                            var datas =[{"id":"null","name":"无上级"}];
                            for(var i in data){
                                datas.push(data[i]);
                            }
                            return { results: datas };
                        }
                    },
                    formatResult: function (depart) {
                        return depart.name;
                    },
                    formatSelection: function (depart) {
                        $parentdepartName.attr("data-value",depart.id);
                        return depart.name;
                    },
                    initSelection: function (element, callback) {
                        /* if(element.val()==""){
                            return;
                        }
                     return $.get(baseUrl+"department/queryById/"+element.val(), {}, function (data) {
                            callback(data);
                        }, 'json'); *///added dataType
                    }
                }
            });
        }
    },
    'click .cancel': function (e, value, row, index) {//取消编辑
        index = index+1;//tr所在行
        var $row = $table.find("tbody tr:nth-child("+index+")");
        $row.find(".editable").editable('toggleDisabled');
        $(this).siblings("a").find("i").removeClass("glyphicon-ok");
        $(this).siblings("a").find("i").addClass("glyphicon-edit");
        $(this).siblings("a").removeClass("editting");
        $(this).css("display","none");
    }
};
//批量删除操作
$table.on('check.bs.table uncheck.bs.table ' +
    'check-all.bs.table uncheck-all.bs.table', function () {
    $remove.prop('disabled', !$table.bootstrapTable('getSelections').length);
    // save your data, here just save the current page
    selections = getIdSelections();
    // push or splice the selections if you want to save all data selections
});
$table.on('expand-row.bs.table', function (e, index, row, $detail) {
    if (index % 2 == 1) {
        $detail.html('Loading from ajax request...');
        $.get('LICENSE', function (res) {
            $detail.html(res.replace(/\n/g, '<br>'));
        });
    }
});
$remove.click(function () {
    var ids = getIdSelections();
    //博主封装的ajax方法,详见我另外一篇博客   http://blog.csdn.net/u010543785/article/details/52366495    
    $.putJSON(baseUrl+"department/deletes","["+ids.toString()+"]",function(data){
        if(data>0){
            $table.bootstrapTable('remove', {
                field: 'id',
                values: ids
            });
            $.gritter.add({
                title: '提示',
                text: '删除部门成功!',
                sticky: false,
                time: 2500
            });
        }else{
            alert("删除失败,请联系技术人员!");
        }
    });
    $remove.prop('disabled', true);
});
function getIdSelections() {
    return $.map($table.bootstrapTable('getSelections'), function (row) {
        return row.id
    });
}


//---formatter 格式化返回td
function spanFormatter(data) {
    return "<span style='cursor:pointer'>"+data+"</span>";
}
function nullFormatter(value, row) {
    if(value==""||value==null||value=="null") {
        return "<span style='cursor:pointer' data-value='"+row.parentdepartId+"'></span>";
    }
    return "<span style='cursor:pointer' data-value='"+row.parentdepartId+"'>"+value+"</span>";
}
function operateFormatter(value, row, index) {
    return [
        '<a class="edit" href="javascript:void(0)" title="编辑">',
        '<i class="glyphicon glyphicon-edit"></i>',
        '</a>  ',
        '<a class="cancel" href="javascript:void(0)" title="取消编辑" style="display:none">',
        '<i class="glyphicon glyphicon-remove"></i>',
        '</a>'
    ].join('');
}
//初始化部门下拉框
function initDepartSelect() {
 //博主封装的ajax方法,详见我另外一篇博客   http://blog.csdn.net/u010543785/article/details/52366495
  $.sanjiGetJSON(baseUrl + "department/queryAll", '', function (data) {

            $("#departSel").html("");
            $("#departSel").append('<option value="*">请选择上级部门</option>');
            for (var i = 0; i < data.length; i++) {
                $("#departSel").append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
            }
            //$("#departSel").select2();
        });
}

该部门管理并没有查询功能,附上

查询功能

的例子:


$(document).ready(function(){
    if(localStorage.getItem("rolesName")!="管理员"){//权限控制
        $("#add").remove();
    }
    //初始化下拉框
    initRolesSelect();
    //表格初始化
    var oTable = new TableInit();
    oTable.Init();
    //查询
    $("#queryBtn").click(function(){
        $table.bootstrapTable('destroy');//表格销毁
        oTable.Init()
    });
});


var TableInit = function () {
    var oTableInit = new Object();
    //初始化Table
    oTableInit.Init = function () {
        $table.bootstrapTable({
            pagination: true,
            url: baseUrl + "user/query",
            queryParams: oTableInit.queryParams,
            columns: [
                {
                    field: 'state',
                    checkbox: true
                }, {
                    title: '用户名',
                    field: 'username',
                    align: 'left',
                    formatter: spanFormatter,
                    sortable: true
                }, {
                    title: '真名',
                    field: 'longname',
                    align: 'left',
                    sortable: true,
                    formatter: nullFormatter
                }, {
                    title: '角色',
                    field: 'rolesName',
                    align: 'left',
                    sortable: true,
                    formatter: rolesFormatter
                }, {
                    title: '所在部门',
                    field: 'departName',
                    align: 'left',
                    formatter: departFormatter
                }, {
                    title: '最后一次登录',
                    field: 'logTime',
                    align: 'left',
                    sortable: true,
                    formatter: timeFormatter
                }, {
                    field: 'id',
                    title: '操作',
                    align: 'left',
                    events: operateEvents,
                    formatter: operateFormatter
                }
            ]
        });
    }
    //查询条件
     oTableInit.queryParams  = function(params){
        var temp={
            rolesId:$("#rolesSel").val()=="*"?null:$("#rolesSel").val(),
            departId:$("#departSel").val()=="*"?null:$("#departSel").val(),
            username:$("#usernameInp").val()==""?null:$("#usernameInp").val()
        }
        return temp;
    }
     return oTableInit;

    //一次性获取所有数据时responseHandler 这段代码不需要。 但是只获取单页数据时就需要该段代码提供总行数,以便显示分页信息
/*   oTableInit.responseHandler = function (res) {


        if (res != null) {
            return {
                "rows": res.rows, //查询到到单页里的数据
                "total": res.total //总行数(数据库里查询到的总记录数量)
            };

        } else {
            return {
                "rows": [],
                "total": 0
            };
        }

    }
    return oTableInit; */
}

上获取单页数据的page模型,如一次性获取所有数据则不需要该模型

/**
 * 封装分页数据
 * @param <T>
 */

public class Page<T> {
    private List<T> rows;//数据
    private int total;//总行数
    public List<T> getRows() {
        return rows;
    }
    public void setRows(List<T> rows) {
        this.rows = rows;
    }
    public int computeTotal(int totalRows,int size) {
        if(totalRows==0){
            return 1;
        }
            return  (int) (totalRows % size == 0 ? totalRows / size
                : totalRows / size + 1);
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }

上java后台代码, springmvc获取单页数据的controller

/**
     * 
     * @param @param psUser ps用户名
     * @param @param psLongname ps用户真名
     * @param @param departId  部门ID
     * @param @return   
     * @return List<psRecord>  
     * @throws
     * @date 2016年6月3日
     */
    @RequestMapping(value = "/queryByPage", method = RequestMethod.GET)
    public @ResponseBody
    Page<psRecord> query(@RequestParam String pageNumber,
            @RequestParam String pageSize,@RequestParam String daterange, @RequestParam String recordUser, @RequestParam String caller,@RequestParam String sort) {
        Page<psRecord> page = new Page<psRecord>();
        int no = pageNumber == null ? 10 : Integer.parseInt(pageNumber);
        int size = pageSize == null ? 10 : Integer.parseInt(pageSize);
        List<psRecord> psRecords = null;
        HashMap<String,String> map = new HashMap<String,String>();
        try {
             String[] dateranges  = new String(daterange.getBytes("iso8859-1"),"UTF-8").split(" ");
             String startDate="",endDate = "";
             if(dateranges.length>1){
                 startDate =  dateranges[0];
                 endDate =  dateranges[2];
             }
             map.put("startDate", startDate);
             map.put("endDate", endDate);
             map.put("recordUser", new String(recordUser.getBytes("iso8859-1"),"UTF-8"));
             map.put("caller", new String(caller.getBytes("iso8859-1"),"UTF-8"));
             psRecords = psRecordService.queryByPage(startDate,endDate,new String(recordUser.getBytes("iso8859-1"),"UTF-8")
            ,new String(caller.getBytes("iso8859-1"),"UTF-8"),size*(no-1),size,sort);

            //返回的数据初始化page
            page.setRows(psRecords);
            page.setTotal(psRecordService.count(map));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;
    }

对代码如有问题,私信我~

猜你喜欢

转载自blog.csdn.net/u010543785/article/details/52314865