layui.extend({
    common: 'js/common'
}).use(['jquery', 'layer', 'common', 'table', 'util', 'form'], function () {
    //  Jquery插件
    var $ = layui.jquery;
    //  引入公共模块
    var common = layui.common;
    //  引入表单
    var form = layui.form;

    //选中id集合
    var ids = [];
    //清空选中集合
    var clearCheckbox = function () {
        ids = [];
    }
    //tableId集合
    var table_data = [];

    //  初始化表单
    var layuiTable = common.layuiTable.render(layui.table, {
        elem: '#data_entity_table'
        , url: '/permissions/appPackage/pagingQuery?deviceType=2'
        , cellMinWidth: 80 //全局定义常规单元格的最小宽度，
        , cols: [[
              {type: 'checkbox'}
            , {field: 'version', title: '版本号', align: 'center', width: 200}
            , {field: 'packageName', title: '版本名称', align: 'center', width: 200}
            , {field: 'createDate', title: '上传时间', align: 'center', width: 200}
            , {field: 'description', title: '版本说明', align: 'center'}
            , {field: 'deviceFactory', title: '设备厂商', align: 'center', width: 200}
            , {field: 'deviceModelNumber', title: '设备型号', align: 'center', width: 200}
            , {field: 'restore', title: '恢复版', align: 'center', templet: function(d){
                if (d.restore == 1){
                        return '<span class="layui-badge layui-bg-green">恢复版</span>';
                    }else {
                        return '<span></span>';
                    }
                }
             }
            , {field: 'isEnable', title: '启用状态', align: 'center', templet: "#switch_is_enable"}
            , {title: '操作', align: 'center', toolbar: '#table-operate', width: 180}
        ]],
        done: function (res, curr, count) {
            // 设置换页勾选之前的
            table_data = res.data;
            for (var i = 0; i < res.data.length; i++) {
                for (var j = 0; j < ids.length; j++) {
                    if (res.data[i].id == ids[j]) {
                        //这里才是真正的有效勾选
                        res.data[i]["LAY_CHECKED"] = 'true';
                        //找到对应数据改变勾选样式，呈现出选中效果
                        var index = res.data[i]['LAY_TABLE_INDEX'];
                        $('.layui-table tr[data-index=' + index + '] input[type="checkbox"]').prop('checked', true);
                        $('.layui-table tr[data-index=' + index + '] input[type="checkbox"]').next().addClass('layui-form-checked');
                    }
                }
            }
            //设置全选checkbox的选中状态，只有改变LAY_CHECKED的值， table.checkStatus才能抓取到选中的状态
            var checkStatus = layui.table.checkStatus('data_table_event');
            if (checkStatus.isAll) {
                $(' .layui-table-header th[data-field="0"] input[type="checkbox"]').prop('checked', true);
                $('.layui-table-header th[data-field="0"] input[type="checkbox"]').next().addClass('layui-form-checked');
            }
        }
    });

    var reloadTable = function () {
        //  重新加载表格
        layuiTable.reload({
            //  重新从第1页开始
            page: {
                curr: 1
            }
        });
    };

    //复选框选中监听,将选中的id 设置到缓存数组,或者删除缓存数组
    layui.table.on('checkbox(data_table_event)', function (obj) {
        if (obj.checked == true) {
            if (obj.type == 'one') {
                ids.push(obj.data.id)
            } else {
                for (var i = 0; i < table_data.length; i++) {
                    ids.push(table_data[i].id);
                }
            }
        } else {
            if (obj.type == 'one') {
                for (var i = 0; i < ids.length; i++) {
                    if (ids[i] == obj.data.id) {
                        ids.splice(i, 1);
                        return;
                    }
                }
            } else {
                for (var i = 0; i < ids.length; i++) {
                    for (var j = 0; j < table_data.length; j++) {
                        if (ids[i] == table_data[j].id) {
                            ids.splice(i, 1);
                            i--;
                            break;
                        }
                    }
                }
            }
        }
    });


    //  操作栏事件绑定
    layui.table.on('tool(data_table_event)', function (obj) {
        var title = obj.data.version + '-' + obj.data.deviceFactory + '-' + obj.data.deviceModelNumber
        switch (obj.event) {
            //  修改
            case 'edit':
                common.openDefaultIframe({
                    title: '修改页面',
                    content: '/permissions/device/appPackage/edit/' + obj.data.id
                });
                break;
            //  删除
            case 'delete':
                layer.confirm('是否确认删除?', {icon: 7, title: '提示'}, function (index) {
                    $.ajax({
                        url: '/permissions/appPackage/delete/' + obj.data.id,
                        success: function (result) {
                            if (result.data) {
                                reloadTable();
                            } else {
                                layer.msg("删除失败");
                            }
                        }
                    });
                    layer.close(index);
                });
                break;
            //  全部升级
            case 'upgrade':
                if (obj.data.isEnable == 2) {
                    layer.msg("该版本不能升级")
                    return;
                }
                layer.open({
                    type: 2,
                    title: '选择需要更新的设备',
                    content: '/permissions/appPackage/allDeviceUpgrade/' + obj.data.id,
                    area: ['80%', '80%'],
                    maxmin: true,
                    cancel: function () {
                        reloadTable();
                    }
                });
                break;
            //日志
            case 'log':
                common.openDefaultIframe({
                    title: '版本日志' + " 【 " + title + " 】",
                    content: '/permissions/appPackage/log4appPackage?version=' + obj.data.version
                });
            default:
                break;
        }
    });

    //  监听禁用开启状态
    layui.form.on('switch(switch_is_enable)', function (obj) {
        let enable = obj.elem.checked;
        let text = enable ? '启用' : '禁用';
        //  获取选中行数据
        var id = $(obj.elem).attr("kid");
        var url = "/permissions/appPackage/updateEnable";
        common.sendAsyncRequest(url, 'POST', {
            id: id,
            isEnable: enable ? 1 : 2
        }, function (result) {
            if (result.data) {
                reloadTable();
                layer.msg(text + '成功')
            }
        }, function (result) {
            if (!result.data) {
                layer.alert(result.msg, function (index) {
                    layer.close(index);
                    //  失败的回调用函数
                    obj.othis.click();
                });
            }
        })
    });

    //监听上传新包
    form.on('submit(add)', function () {
        common.openDefaultIframe({
            title: '上传新包',
            content: '/permissions/device/appPackage/add'
        });
    });
    //监听设置恢复包
    form.on('submit(setRestore)', function () {
        if(ids.length == 0 ){
            layer.msg("请选择要设置的升级包。");
            return;
        }
        if(ids.length > 1){
            layer.msg("请选择一个升级包进行设置");
            return;
        }
        layer.confirm('是否确认设置为恢复包并下发到设备?', {icon: 7, title: '提示'}, function (index) {
            $.ajax({
                url: '/permissions/appPackage/setRestore',
                type: 'POST',
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify(ids),
                success: function (result) {
                    if (result.data) {
                        //  刷新表格
                        layuiTable.reload();
                        clearCheckbox();
                        layer.msg("设置成功");
                        layer.close(index);
                    } else {
                        layer.msg("设置失败");
                    }
                }
            });
            layer.close(index);
        });
    });
});
