欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

拓展10-两个datagrid动态多选追加和删除—保持排序不变

程序员文章站 2022-04-16 09:24:15
...

1、效果图

拓展10-两个datagrid动态多选追加和删除—保持排序不变

2、添加或者修改弹出框dialog

  • dialog对话框—>form表单–>一个table表格一个layout布局
  • table表格内两个input标签
  • layout布局布局中,west,center,east三个模块,左右均为datagrid,中间为按钮
  • 两个datagrid通过js创建,按钮分别绑定点击事件
  • 注意:form表单元素不包含datagrid,这很重要。
<%--添加或者修改的弹出框--%>
<div id="editDialog" class="easyui-dialog"
     data-options="iconCls:'icon-save',resizable:true,modal:true,closed:true,buttons:'#btns'">
    <form id="editForm" method="post">
        <input id="roleId" type="hidden" name="id"/>
        <table cellpadding="5">
            <tr>
                <td>名称:&ensp;</td>
                <td><input class="easyui-textbox" type="text" name="name" data-options="required:true"/></td>
                <td>&ensp;&ensp;&ensp;</td>
                <td>sn:&ensp;</td>
                <td><input class="easyui-textbox" type="text" name="sn" data-options="required:true"/></td>
            </tr>
        </table>
        <div class="easyui-layout" style="width:900px;height:400px;">
            <div data-options="region:'west'" style="width:45%;">
                <%--所有权限--%>
                <table id="allPermsGrid">
                    <thead>
                    <tr>
                        <th data-options="field:'',width:20,checkbox:true">多选</th>
                        <th data-options="field:'id',width:40" sortable="true">序号</th>
                        <th data-options="field:'name',width:100" sortable="true">名称</th>
                        <th data-options="field:'sn',width:100">编码</th>
                        <th data-options="field:'url',width:100">路径</th>
                    </tr>
                    </thead>
                </table>
            </div>
            <div data-options="region:'center'" style="width:5%;text-align: center">
                <div style="padding-top: 80px;">
                    <input type="button" id="btn1" value="添加" onclick="bnt1()"/><br/><br/><br/>
                    <input type="button" id="btn2" value="移除" onclick="bnt2()"/><br/><br/><br/>
                    <input type="button" id="btn3" value="添加所有" onclick="bnt3()"/><br/><br/><br/>
                    <input type="button" id="btn4" value="移除所有" onclick="bnt4()"/>
                </div>
            </div>
            <div data-options="region:'east'" style="width:45%;">
                <%--当前角色拥有的权限--%>
                <table id="rolePermsGrid">
                    <thead>
                    <tr>
                        <th data-options="field:'',width:20,checkbox:true">多选</th>
                        <th data-options="field:'id',width:40" sortable="true">序号</th>
                        <th data-options="field:'name',width:100">名称</th>
                        <th data-options="field:'sn',width:100">编码</th>
                        <th data-options="field:'url',width:100">路径</th>
                    </tr>
                    </thead>
                </table>
            </div>
        </div>
    </form>
    <div id="btns">
        <a href="javascript:;" data-method="save" class="easyui-linkbutton c3" data-options="iconCls:'icon-ok'">确定</a>
        <a href="javascript:;" data-method="close" class="easyui-linkbutton c5"
           data-options="iconCls:'icon-cancel'">取消</a>
    </div>
</div>

3、新建datagrid

//创建两个grid
//1.当前角色拥有的权限Grid
    rolePermsGrid.datagrid({
        fitColumns: true,
        singleSelect: false,
        checkOnSelect: true,
        fit: true
    })
//2.所有权限的Grid
    allPermsGrid.datagrid({
        url: '/permission/list',
        fitColumns: true,
        singleSelect: false,
        checkOnSelect: true,
        fit: true
    })
})

4、添加方法

add() {
      //打开面板前把里面的数据清除,只能清楚表单数据
       editForm.form("clear");
       //修改添加框的标题
       editDialog.dialog({title: '添加菜单'});
       //把添加框(editDialog)打开并居中
       editDialog.dialog("center").dialog("open");
       //清空当前角色datagrid中的数据
       rolePermsGrid.datagrid("loadData", []);
       //重新加载所有权限datagrid中的数据
       allPermsGrid.datagrid("reload");
},

5、修改方法

		edit() {
            allPermsGrid.datagrid("reload");
            //获取选择的行
            var row = datagrid.datagrid("getSelected");
            //判断是否选择了一行
            //没有选择提示并结束
            if (!row) {
                $.messager.alert('提示', '请先选择一行进行修改', "info");
                return;
            } else {
                //修改添加框的标题
                editDialog.dialog({title: '修改菜单'});
                //把添加框(editDialog)打开
                editDialog.dialog("center").dialog("open");
                //回显其他内容
                editForm.form('load', row);
                //回显权限数据,先复制一个模板
                var perms = [...row.permissions];
                rolePermsGrid.datagrid("loadData", perms);
            }
        },

6、οnclick="bnt1()"方法

var bnt1 = function () {
    var rows1 = $("#allPermsGrid").datagrid('getChecked');
    var rows2 = $("#rolePermsGrid").datagrid('getRows');
    var rows3 = [...rows1];
    var rows4 = [...rows2];
    var messg = [];
    for (var j = 0; j < rows3.length; j++) {
        var flag1 = true;
        var flag2 = false;
        var rows1id = rows3[j].id;
        var index =  $("#allPermsGrid").datagrid('getRowIndex', rows3[j]);
        $("#allPermsGrid") .datagrid('deleteRow', index);
        for(var i = 0; i < rows4.length; i++){
            var rows2id = rows4[i].id;
            if(rows1id==rows2id){
                flag1 = false ;
                flag2 = true ;
                messg.push(rows3[j].name);
            }
        }
        if(flag1){
            rows4.push( rows3[j]);
        }
        //冒泡排序,按照id排序
        for(var k = 0;k<rows4.length-1;k++){
            for(var m = 0;m<rows4.length-1;m++){
                if(rows4[m].id>rows4[m+1].id){
                    var temp = rows4[m];
                    rows4[m] = rows4[m+1];
                    rows4[m+1] =temp;
                }
            }
        }
        $("#rolePermsGrid").datagrid("loadData", rows4);
        if(flag2){
            $.messager.show({
                title:'提示',
                msg:'<h3 style="color: red;">'+messg+'已经存在,请不要重复添加</h3>',
                showType:'slide',
                timeout:2000,
                style:{
                    right:'',
                    top:document.body.scrollTop+document.documentElement.scrollTop,
                    bottom:''
                }
            });
        }

    }
}

7、οnclick="bnt2()"方法

var bnt2 = function () {
    var rows = $("#rolePermsGrid").datagrid('getChecked');
    var rows3 = $("#allPermsGrid").datagrid('getRows');
    var rows2 = [...rows];
    var rows4 = [...rows3];
    for (var j = 0; j < rows2.length; j++) {
        var flag = true;
        var rowsid = rows2[j].id;
        var index =  $("#rolePermsGrid").datagrid('getRowIndex', rows2[j]);
        $("#rolePermsGrid") .datagrid('deleteRow', index);
        for(var i = 0; i < rows4.length; i++){
            var rows4id = rows4[i].id;
            if(rowsid==rows4id){
                flag = false ;
            }
        }
        if(flag){
            rows4.push( rows2[j]);
        }
    }
    //冒泡排序
    for(var k = 0;k<rows4.length-1;k++){
        for(var m = 0;m<rows4.length-1;m++){
            if(rows4[m].id>rows4[m+1].id){
                var temp = rows4[m];
                rows4[m] = rows4[m+1];
                rows4[m+1] =temp;
            }
        }
    }
    $("#allPermsGrid").datagrid("loadData", rows4);
}

8、οnclick="bnt3()"方法

//和bnt1方法一样,只需要把第一行换成下面这个
var rows1 = $("#allPermsGrid").datagrid('getRows');

9、οnclick="bnt4()"方法

//和bnt2方法一样,只需要把第一行换成下面这个
var rows = $("#rolePermsGrid").datagrid('getRows');
相关标签: Java #SpringDataJpa