layui.extend({
    common: 'js/common',
    orgTree: 'layui/lay/mymodules/org-tree',
    xmSelect: 'layui/dist/xm-select',
}).use(['tree', 'table', 'jquery', 'layer', 'common', 'orgTree', 'util', 'laydate', 'form', 'xmSelect'], function () {
    //  弹窗插件
    var layer = layui.layer;
    //  Jquery插件
    var $ = layui.jquery;
    //  引入公共模块
    var common = layui.common;
    //  引入表格
    var table = layui.table;
    //  引入表单
    var form = layui.form;

    var laydate = layui.laydate;
    //  引入下拉列表组件
    var xmSelect = layui.xmSelect;

    var layuiTable = null;

    // 查询框表单
    var $node = {

        //  单元搜索
        unitId: $('#unit_id'),
        //  房间搜索
        roomId: $('#room_id'),
        cardNoInput: $('input[name="cardNo"]'),

        //  有效期开始日期
        beginDateInput: $('input[name="beginDate"]'),
        //  有效期截至日期
        endDateInput: $('input[name="endDate"]'),
        cardDate: $('#card_date')

    };

    //  页面数据
    var pageData = {
        myOrgId: parseInt($('#org_id').val()),
        residentialId: $('#residentialId').val()
    };

    //日期时间范围
    laydate.render({
        elem: '#card_date'
        , type: 'date'
        , range: true
        , min: '1990-1-1 00:00:00'
        , done: function (value, date, endDate) {
            var dateArray = value.split(" - ");
            $("#begin_date").val(dateArray[0] + ' 00:00:00');
            $("#end_date").val(dateArray[1] + ' 23:59:59');
        }
    });

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

    //选中树的Id
    var selectTreeId = null;

    //选中树的类型 1 机构 2 小区 3社区机构  4 单元 5 房间
    var flag = null;

    //  重新加载表格
    var reloadTable = function (obj) {
        //重新加载表格
        layuiTable.reload({
            where: {
                unitId: $node.unitId.val(),
                roomId: $node.roomId.val(),
                cardNo: $node.cardNoInput.val(),
                beginDate: $node.beginDateInput.val(),
                endDate: $node.endDateInput.val(),
                selectTreeId: selectTreeId,
                selectTreeType: flag,
                //排序
                sortField: obj ? obj.field : '',
                sortOrder: obj ? obj.type : '',
            }
            //重新从第1页开始
            , page: {
                curr: 1
            },
            initSort: obj
        });
    };


    //  初始化
    (function () {
        //  加载树形列表
        layui.orgTree({
            //  点击路径的回调函数
            pathClickFn: function (item) {
                selectTreeId = item.id;
                flag = item.flag;
                switch (flag) {
                    //单元
                    case 4 : {
                        unitSelect.update({
                            data: initUnitFn({
                                residentialId: pageData.residentialId,
                                unitId: selectTreeId
                            })
                        }).setValue([selectTreeId]);
                        roomSelect.update({
                            data: initRoomFn({
                                residentialId: pageData.residentialId,
                                unitId: unitSelect.getValue('valueStr')
                            })
                        });
                        $node.unitId.val(selectTreeId);
                        $node.roomId.val('')
                        break
                    }
                    //房间
                    case 5 : {
                        roomSelect.setValue([selectTreeId]);
                        $node.roomId.val(selectTreeId);
                        break
                    }
                }
                reloadTable();
            },
            //  点击树的回调函数
            treeClickFn: function (item) {
                selectTreeId = item.id;
                flag = item.flag;
                switch (flag) {
                    //单元
                    case 4 : {
                        unitSelect.update({
                            data: initUnitFn({
                                residentialId: pageData.residentialId,
                                unitId: selectTreeId
                            })
                        }).setValue([selectTreeId]);
                        roomSelect.update({
                            data: initRoomFn({
                                residentialId: pageData.residentialId,
                                unitId: unitSelect.getValue('valueStr')
                            }), disabled: false
                        });
                        $node.unitId.val(selectTreeId);
                        $node.roomId.val('')
                        break
                    }
                    //房间
                    case 5 : {
                        roomSelect.setValue([selectTreeId]);
                        $node.roomId.val(selectTreeId);
                        break
                    }
                }
                reloadTable();
            },
            //  当前用户的机构Id
            orgId: pageData.residentialId,
            //  截至级别（不包含）
            // isShowFlag : 2
        });
        //  初始化表格
        layuiTable = common.layuiTable.render(layui.table, {
            elem: '#table_id'
            , url: '/estate/accessCard/showAccessCardList?residentialId='+pageData.residentialId
            , cellMinWidth: 80 //全局定义常规单元格的最小宽度，
            , cols: [[
                {type: 'checkbox'}
                , {field: 'cardNo', title: '卡号', align: 'center', sort: true}
                , {field: 'residentialName', title: '小区名称', align: 'center'}
                , {field: 'unitName', title: '单元名称', align: 'center'}
                , {field: 'roomName', title: '房间名称', align: 'center'}
                , {
                    field: 'endDate', width: 300, align: 'center', title: '卡号有效期', sort: true, templet: function (d) {
                        return layui.util.toDateString(d.beginDate) + " 至 " + layui.util.toDateString(d.endDate);
                    }
                }
                , {title: '操作', width: 180, align: 'center', toolbar: '#table-useradmin-webuser'}
            ]]
            //  开启分页功能
            , page: true
            , 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 = table.checkStatus('table_id');
                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');
                }
            }
        });
    })();

    //排序
    layui.table.on('sort(table_event)', function (obj) {
        reloadTable(obj);
    });

    //复选框选中监听,将选中的id 设置到缓存数组,或者删除缓存数组
    table.on('checkbox(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;
                        }
                    }
                }
            }
        }
    });

    //监听行工具事件
    table.on('tool(table_event)', function (obj) { //注：lay-filter="table-event""
        var data = obj.data; //获得当前行数据
        var userDataStr = data.cardNo + " - " + data.residentialName;
        switch (obj.event) {
            case 'edit'://修改
                common.openDefaultIframe({
                    title: '修改卡',
                    content: '/estate/accessCard/edit/' + data.id
                });
                break;
            case 'del'://删除
                layer.confirm('是否确认删除？', {icon: 7, title: '提示'}, function (index) {
                    common.sendAsyncRequest("/estate/accessCard/deleteAccessCard", 'POST', {
                        id: data.id
                    }, function (result) {
                        if (result.data) {
                            obj.del(); //删除对应行（tr）的DOM结构
                            layer.msg("删除成功");
                            layer.close(index);//关闭弹窗提示
                        } else {
                            layer.msg("删除失败");
                        }
                    });
                });
                break;
            //  卡日志
            case 'log4card':
                common.openDefaultIframe({
                    title: '卡日志' + " 【 " + userDataStr + " 】",
                    content: '/estate/user/log4card?cardNo=' + data.cardNo
                });
                break;
            //  实名登记
            case 'realNameReg':
                common.openDefaultIframe({
                    title: '门禁卡实名登记' + " 【 " + data.cardNo + " 】",
                    content: '/estate/accessCard/realNameRegIndex/' + data.cardNo + '/' + data.residentialId
                });
                break;
            default:
                break;
        }
        ;
    });

    //监听搜索
    form.on('submit(query)', function () {
        reloadTable();
    });

    //监听重置查询
    form.on('submit(reset)', function () {
        //选中树的类型 1 机构 2 小区 3社区机构  4 单元  5 房间
        switch (flag) {
            case 2: {
                unitSelect.setValue([]);
                roomSelect.update({data: [], disabled: true});
                $node.unitId.val('');
                $node.roomId.val('');
                break
            }
            case 4 : {
                roomSelect.setValue([]);
                $node.roomId.val('');
                break
            }
            case 5 : {
                break
            }
            default : {
                unitSelect.update({data: [], disabled: true});
                roomSelect.update({data: [], disabled: true});
                $node.residentialId.val('');
                $node.unitId.val('');
                $node.roomId.val('');
                break
            }
        }
        $node.cardNoInput.val('');
        $node.beginDateInput.val('');
        $node.endDateInput.val('');
        $node.cardDate.val('');
        reloadTable();
    });

    //监听门禁卡添加
    form.on('submit(add)', function () {
        if ($node.roomId.val()) {
            selectTreeId = $node.roomId.val();
            flag = 5;
        } else if ($node.unitId.val()) {
            selectTreeId = $node.unitId.val();
            flag = 4;
        } else if (pageData.residentialId) {
            selectTreeId = pageData.residentialId;
            flag = 2;
        }
        //2 小区 4 单元  5房间
        if (2 == flag || 4 == flag || 5 == flag) {
            common.openDefaultIframe({
                title: '添加门禁卡',
                content: '/estate/accessCard/add/' + selectTreeId + '/' + flag
            });
        } else {
            layer.msg("该对象无法发卡，请重新选择（小区、单元或房间）");
            return;
        }
    });

    //监听批量删除
    form.on('submit(batchdel)', function () {
        if (ids.length == 0) {
            layer.msg("请选择要删除的数据。");
            return;
        }
        layer.confirm('是否确认删除？', {icon: 7, title: '提示'}, function (index) {
            $.ajax({
                url: '/estate/accessCard/deleteCardList',
                type: 'POST',
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify(ids),
                success: function (result) {
                    if (result.code == '200') {
                        if (result.data) {
                            //  刷新表格
                            layuiTable.reload();
                            clearCheckbox();
                            layer.msg("删除成功");
                            layer.close(index);
                        } else {
                            layer.msg("删除失败");
                        }
                    } else {
                        layer.msg(result.msg);
                    }
                }
            });
        });
    });

    //单元查询下拉列表
    var unitSelect = xmSelect.render({
        el: '#unit_name',
        radio: true,
        prop: {
            name: 'name',
            value: 'id',
        },
        toolbar: {
            show: true,
            list: [{
                name: '清空',
                method: function () {
                    unitSelect.setValue([]);
                    $node.unitId.val('');
                    roomSelect.update({disabled: true}).setValue([]);
                    $node.roomId.val('');
                }
            }]
        },
        clickClose: true,
        filterable: true,
        remoteSearch: true,
        remoteMethod: function (val, cb, show) {
            $.ajax({
                type: 'GET',
                url: '/estate/unit/getListByLikeName',
                data: {
                    name: val,
                    residentialId: pageData.residentialId,
                    isSelect: true
                },
                success: function (result) {
                    cb(result.list);
                },
                error: function () {
                    cb([]);
                }
            });
        },
        //监听选择
        on: function (data) {
            var change = data.change;
            if (change.length > 0) {
                $node.unitId.val(change[0].id);
                roomSelect.update({
                    data: initRoomFn({residentialId: $node.residentialId.val(), unitId: change[0].id}),
                    disabled: false
                });
            }
            if (!data.isAdd) {
                $node.unitId.val('');
                roomSelect.update({data: [], disabled: true});
            }
            $node.roomId.val('');
        },
        //显示方式
        model: {
            label: {
                type: 'text',
                text: {
                    //左边拼接的字符
                    left: '',
                    //右边拼接的字符
                    right: '',
                    //中间的分隔符
                    separator: ', ',
                },
            }
        },
    });

    //房间查询下拉列表
    var roomSelect = xmSelect.render({
        el: '#room_name',
        disabled: true,
        radio: true,
        prop: {
            name: 'name',
            value: 'id',
        },
        toolbar: {
            show: true,
            list: [{
                name: '清空',
                method: function () {
                    roomSelect.setValue([]);
                    $node.roomId.val('');
                }
            }]
        },
        clickClose: true,
        filterable: true,
        remoteSearch: true,
        remoteMethod: function (val, cb, show) {
            $.ajax({
                type: 'GET',
                url: '/estate/room/getListByLikeName',
                data: {
                    name: val,
                    residentialId: pageData.residentialId,
                    unitId: $node.unitId.val(),
                    isSelect: true
                },
                success: function (result) {
                    cb(result.list);
                },
                error: function () {
                    cb([]);
                }
            });
        },
        //监听选择
        on: function (data) {
            var change = data.change;
            if (change.length > 0) {
                $node.roomId.val(change[0].id)
            }
            if (!data.isAdd) {
                $node.roomId.val('');
            }
        },
        //显示方式
        model: {
            label: {
                type: 'text',
                text: {
                    //左边拼接的字符
                    left: '',
                    //右边拼接的字符
                    right: '',
                    //中间的分隔符
                    separator: ', ',
                },
            }
        },
    });

    function initUnitFn(data) {
        var unitList;
        common.sendSyncRequest("/estate/unit/getListByLikeName", 'get', {
            residentialId: data.residentialId,
            id: data.id,
            isSelect: true
        }, function (result) {
            unitList = result.list;
        });
        return unitList;
    }

    function initRoomFn(data) {
        var roomList;
        common.sendSyncRequest("/estate/room/getListByLikeName", 'get', {
            residentialId: data.residentialId,
            unitId: data.unitId,
            id: data.id,
            isSelect: true
        }, function (result) {
            roomList = result.list;
        });
        return roomList;
    }
});