使用layui table达到穿梭框效果

由于自己文章写得transfer过于操蛋,现在直接使用两个table来实现transfer的功能,与layui的穿梭框不同的是,里面的值虽然也是一一对应的,但是右侧框是可以显示左侧框没有的值。且也不会因为左侧框的值变化右侧框也跟着变化

<script th:inline="javascript">
    // const index = parent.layer.getFrameIndex(window.name);
    /*<![CDATA[*/
    layui.use(['layer', 'form', 'upload', 'table'], function () {
        let layer = layui.layer,
            form = layui.form,
            table = layui.table,
            $ = layui.$;
        layui.config({
            base: '/'
        }).extend({
            authtree: 'authtree/authtree',
        });
        //----------------------------------------
        //穿梭框初始化
        let dataList, dataListLeft;
        // 执行一个 table实例
        let id = $("input[name='id']").val();
        $.ajax({
            type: "post",
            url: '/customer/list4Trans',// 数据接口
            async: false,
            cache: false,
            data: {
                id: id
            }, success: function (data) {
                dataList = data.data;
                table.render({
                    elem: '#dataList',
                    data: dataList
                    , title: '记录表'
                    , height: 320 // 开启分页
                    , method: 'post', // 默认get方式,
                    limit: 40
                    , cols: [[// 表头
                        {type: 'checkbox', fixed: 'index_id'}
                        , {field: 'title', title: '样品', width: 300, align: 'center', sort: true}
                    ]]
                });
            }
        });
        $.ajax({
            type: "post",
            // contentType: "application/json;charset=UTF-8",
            url: '/share/list4Trans',// 数据接口
            async: false,
            cache: false,
            data: {
                id: id
            }, success: function (data) {
                dataListLeft = deleteRepeat(data.data)
                table.render({
                    elem: '#dataListLeft'
                    , data: dataListLeft// 数据接口
                    , title: '记录表',
                    limit: data.count
                    , height: 320 // 开启分页
                    , cols: [[// 表头
                        {type: 'checkbox', fixed: 'index_id'}
                        , {field: 'title', title: '样品', width: 300, align: 'center', sort: true}
                    ]]
                });
            }
        });


        function deleteRepeat(dataLeft) {
            let dataRight = table.cache['dataList'];

            let flag = false;
            for (let k of dataRight) {
                //遍历左边框,并删除选中数据
                for (let h = dataLeft.length - 1; h >= 0; h--) {
                    if (k.value === dataLeft[h].value) {
                        dataLeft.splice(h--, 1);
                        flag = true;
                    }
                }
            }
            return dataLeft;
        }

 //重新渲染左侧table的数据
        function tableReloadLeft(data) {
            table.cache['dataListLeft'] = data;
            table.reload('dataListLeft', {
                data: data
            })
        }

  //重新渲染右侧table的数据
        function tableReloadRight(data) {
            table.cache['dataList'] = data;
            if (data.length===1)
            {
                $("#css").show();
            }else {
                $("#css").hide();
            }
            table.reload('dataList', {
                data: data
            });
        }

    //删除右边框选中的数据
        $("#remove").click(function () {
            let checkData = table.checkStatus('dataList');
            let i = 0;
            if (checkData.data.length > 0) {
                // console.log(checkData.data)

                let flag;
                for (let k of checkData.data) {
                    //遍历左边框,并删除选中数据

                    for (let h = dataList.length - 1; h >= 0; h--) {
                        if (k.value === dataList[h].value) {
                            dataList.splice(h--, 1);
                            flag = true;
                        }
                    }
                }
                //判断表格是否变化
                if (flag === true) {
                    tableReloadRight(dataList);
                    getDataLeft();
                    table.reload('dataListLeft', {
                        data: table.cache['dataListLeft']
                    });
                }
            }
        });



       //将左侧选中的数据添加到右侧table
        $("#add").click(function () {
            let checkData = table.checkStatus('dataListLeft');
            let i = 0;
            if (checkData.data.length > 0) {
                let flag;
                for (let k of checkData.data) {
                    //遍历左边框,并删除选中数据
                    flag = true;
                    for (let h = dataListLeft.length - 1; h >= 0; h--) {
                        if (k.value === dataListLeft[h].value) {
                            dataListLeft.splice(h--, 1);
                        }
                    }
                    //遍历右边框,添加选中数据
                    for (let h = dataList.length - 1; h >= 0; h--) {
                        if (k.value === dataList[h].value) {
                            flag = false;
                        }
                    }
                    if (flag === true) {
                        k.LAY_TABLE_INDEX = dataList.length;
                        dataList.push(k);
                    }
                }
                //判断表格是否变化
                if (flag) {
                    tableReloadLeft(dataListLeft);
                    console.log(dataList);
                    tableReloadRight(dataList);

                }

            }
        });

       //当筛选条件变化时。重新载入左侧table数据
        function getDataLeft() {
            let patternCateId = $("#patternCateId").val();
            $.ajax({
                type: "post",
                // contentType: "application/json;charset=UTF-8",
                url: '/share/list4Trans',// 数据接口
                async: false,
                cache: false,
                data: {
                    patternCateId: patternCateId
                }, success: function (data) {
                    table.cache['dataListLeft'] = deleteRepeat(data.data);
                    dataListLeft = deleteRepeat(data.data);
                }
            });
        }


        form.on('select(patternCate)', function () {
            getDataLeft();
            table.reload('dataListLeft', {
                data: table.cache['dataListLeft']
            });
        });//获取输入框的值
    });
    /*]]>*/
</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值