var GetTableSelectData = null;

layui.config({
    base: "/js/"
}).use(['form', 'vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'hhweb', 'utils'], function () {
    var form = layui.form,
        layer = layui.layer,
        $ = layui.jquery;
    var table = layui.table;
    var hhweb = layui.hhweb,
        //userId
        targetArrValueUserId = null,
        stationId = null;
        teamCode = null;

    var toplayer = (top == undefined || top.layer === undefined) ? layer : top.layer;  //顶层的LAYER
    layui.droptree("/base/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");

    var menu = GetUrlParam("menuFlag"),
        page = GetUrlParam("page");
    if (menu == null) {
        menu = 1;
    }
    $("#menus").loadMenus("SysUser", menu);

    //主列表加载,可反复调用进行刷新
    var config = {};  //table的参数,如搜索key,点击tree的id
    var mainList = function (options) {
        if (options != undefined) {
            $.extend(config, options);
        }
        let index = layer.load(0); //添加laoding,0-2两种方式
        table.reload('mainList', {
            url: '/base/SysUser/Load',
            method: 'POST',
            where: config,
            load: false,
            done: function (res, curr, count) {
                layer.close(index);
                if (res.Code === 200) {
                    //工位人员 选择人员信息
                    if (page == "stationUserRel") {
                        targetArrValueUserId = GetUrlParam("targetArrValue").split(",");
                        stationId = GetUrlParam("stationId").split(",");
                        tableCheckboxClick();
                        SetTableCheck(targetArrValueUserId, res, "Id");
                    }  //班组人员 选择人员信息
                    else if (page == "baseTeamUserRel") {
                        targetArrValueUserId = GetUrlParam("targetArrValue").split(",");
                        teamCode = GetUrlParam("teamCode").split(",");
                        tableCheckboxClickBaseTeam();
                        SetTableCheck(targetArrValueUserId, res, "Id");
                    } else if (page == "delivery") {
                        targetArrValueUserId = GetUrlParam("targetArrValue").split(",");
                        SetTableCheck(targetArrValueUserId, res, "Account");
                    }
                }
            }
        });
    }
    //左边树状机构列表
    var ztree = function () {
        var url = '/base/UserSession/GetOrgs';
        var zTreeObj;
        var setting = {
            view: { selectedMulti: false },
            data: {
                key: {
                    name: 'Name',
                    title: 'Name'
                },
                simpleData: {
                    enable: true,
                    idKey: 'Id',
                    pIdKey: 'ParentId',
                    rootPId: ""
                }
            },
            callback: {
                onClick: function (event, treeId, treeNode) {
                    mainList({ orgId: treeNode.Id });
                }
            }
        };
        var load = function () {
            $.getJSON(url, function (json) {
                zTreeObj = $.fn.zTree.init($("#tree"), setting);
                var newNode = { Name: "根节点", Id: null, ParentId: "" };
                json.push(newNode);
                zTreeObj.addNodes(null, json);
                mainList({ orgId: "" });
                zTreeObj.expandAll(true);
            });
        };
        load();
        return {
            reload: load
        }
    }();

    $("#tree").height($("div.layui-table-view").height());

    //添加(编辑)对话框
    var editDlg = function () {
        var vm = new Vue({
            el: "#formEdit"
        });
        var update = false;  //是否为更新
        var show = function (data) {
            var title = update ? "编辑" : "新增";
            if (update) {
                $(".Password").hide();
            }
            else {
                $(".Password").show();
            }

            index = layer.open({
                title: title,
                area: ["500px", "400px"],
                type: 1,
                content: $('#divEdit'),
                success: function () {
                    vm.$set('$data', data);

                    $(":radio[name='Sex'][value='" + data.Sex + "']").prop("checked", "checked");
                    $("input:checkbox[name='Status']").prop("checked", data.Status == 1);

                    form.render();
                }
            });
            var url = "/base/SysUser/Add";
            if (update) {
                url = "/base/SysUser/Update";
            }
            //提交数据
            form.on('submit(formSubmit)',
                function (data) {
                    //密码强度正则,最少8位,包括至少1个大写字母,1个小写字母,1个数字
                    var pPattern = /^.*(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).*$/;
                    if (data.field.Password == data.field.Account) {
                        layer.alert('密码不能用账户一致');
                        return false;
                    }
                    //else if (!pPattern.test(data.field.Password)) {
                    //    layer.alert('密码不符合规则!!密码最少8位,包括至少1个大写字母,1个小写字母,1个数字');
                    //    return false;
                    //}
                    else {
                        let indexs = layer.load();
                        debugger
                        $.post(url,
                            data.field,
                            function (data) {
                                layer.msg(data.Message);
                                if (data.Code == 200) {
                                    layer.close(index);
                                    mainList();
                                }
                                layer.close(indexs);
                            },
                            "json");
                    }
                    return false;
                });
        };
        return {
            add: function () { //弹出添加
                update = false;
                show({
                    Id: '',
                    Status: 1,
                    Password: '123456',
                });
            },
            update: function (data) { //弹出编辑框
                update = true;
                show(data);
            }
        };
    }();
    //绑定方法提交
    var bindingSubimt = function (data, edit) {
        debugger
        var formFile = new FormData();
        formFile.append("excelfile", $("#UserImage")[0].files[0]);
        formFile.append("account", data[0].Account);
        formFile.append("userImage", $("#UserImage_a").attr("src"));
        formFile.append("jobCard", $("#JobCard").val());
        formFile.append("edit", edit);
        let index = layer.load();
        var ajaxConfig = {
            data: formFile,
            dataType: "json",
            type: "post",
            url: "/base/SysUser/BindingAdd",
            cache: false,//上传文件无需缓存
            processData: false,//用于对data参数进行序列化处理 这里必须false
            contentType: false, //必须
            success: function (result) {
                layer.close(index);
                if (result.Code == 200) {
                    layer.msg(result.Message);
                    mainList();
                    setTimeout(() => {
                        layer.closeAll();
                    }, 1000);
                } else {
                    layer.alert(result.Message, { icon: 2, shadeClose: true, title: "操作失败" });
                }
            }
        };
        $.ajax(ajaxConfig);
        return false;
    }

    function SetTableCheck(targetValue, res, resKey) {
        if (menu != -2) return;
        //checkbox选中状态
        for (var i = 0; i < targetValue.length; i++) {
            for (var j = 0; j < res.Result.length; j++) {
                if (targetValue[i] != res.Result[j][resKey]) continue;
                res.Result[j]["LAY_CHECKED"] = true;
                var index = res.Result[j]["LAY_TABLE_INDEX"],
                    trCheckbox = $(".layui-table-fixed-l tr[data-index=" + index + '] input[type="checkbox"]');
                trCheckbox.prop("checked", true);
                trCheckbox.next().addClass("layui-form-checked");
            }
        }
        //如果构成全选
        var checkStatus = table.checkStatus('mainList'),
            tableHeaderTh = $('.layui-table-header th[data-field="0"] input[type="checkbox"]');
        if (checkStatus.isAll) {
            tableHeaderTh.prop('checked', true);
            tableHeaderTh.next().addClass('layui-form-checked');
        }
    }

    //监听页面主按钮操作
    //监听页面主按钮操作
    var active = {
        btnDelete: function () {      //批量删除
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            hhweb.del("/base/SysUser/Delete",
                data.map(function (e) { return e.Id; }),
                mainList);
        },
        btnAdd: function () {  //添加
            editDlg.add();
        },
        btnEdit: function () {  //编辑
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            if (data.length != 1) {
                layer.alert("请选择编辑的行,且同时只能编辑一行", { icon: 2, shadeClose: true, title: "错误信息" });
                return;
            }
            editDlg.update(data[0]);
        },

        search: function () {   //搜索
            debugger
            var data = {
                Name: $('#Name').val(),
                Idcard: $("#Idcard").val()
            };
            mainList(data);
        },
        btnRefresh: function () {
            mainList();
        },
        btnAccessModule: function () {
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            if (data.length != 1) {
                toplayer.msg("请选择要分配的用户");
                return;
            }

            var index = toplayer.open({
                title: "为用户【" + data[0].Name + "】分配模块",
                type: 2,
                area: ['750px', '600px'],
                content: "/base/SysModule/Assign?type=UserModule&menuType=UserElement&id=" + data[0].Id,
                success: function (layero, index) {

                }
            });
        },
        btnAccessRole: function () {
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            if (data.length != 1) {
                toplayer.msg("请选择要分配的用户");
                return;
            }

            var index = toplayer.open({
                title: "为用户【" + data[0].Name + "】分配角色",
                type: 2,
                area: ['750px', '600px'],
                content: "/base/SysRole/Assign?type=UserRole&id=" + data[0].Id,
                success: function (layero, index) {

                }
            });
        },
        btnResetPwd: function () {  
            layer.confirm("你确定重置密码吗?", { icon: 3 }, function (index) {
                var checkStatus = table.checkStatus('mainList'),
                    data = checkStatus.data;
                if (data.length != 1) {
                    layer.msg("只能编辑一行");
                    return;
                }
                $.post("/base/SysUser/ResetPassword", { user: data[0], }, function (result) {
                    if (result.Code == 200) {
                        layer.msg("密码重设成功");
                        return;
                    }
                    layer.alert(result.Message, { icon: 2, shadeClose: true, title: "操作失败" });
                }, "json");
            });

           
        },
        binding: function () {  //绑定
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            var edit = false;
            if (data.length != 1) {
                toplayer.msg("请选择要分配的用户");
                return;
            }
            $("#UserImage").val("");
            var objfile = {};
            var selFile = document.querySelector('#UserImage');
            selFile.addEventListener('change', function (e) {
                // 这里进行事件操作
                filechange("UserImage", objfile, function () {
                    $("#UserImage_a").attr("src", objfile.base64);
                });
            });

            layer.open({
                title: "为用户【" + data[0].Name + "】绑定登录方式",
                area: ["800px", "500px"],
                type: 1,
                content: $('#divBinding'),
                btn: ['保存', '关闭'],
                yes: function (index, layero) {
                    if (objfile.base64 == null && $("#JobCard").val() == "") {
                        layer.msg("请至少选择选择一种绑定登录方式");
                        return;
                    }
                    bindingSubimt(data, edit);
                },
                success: function () {
                    $("#JobCard").val(data[0].Idcard);
                    $('#UserImage_a').attr("src", data[0].FacePicture);
                    if (data[0].FacePicture != null || data[0].Idcard != null) edit = true;
                }
            });

        },
        btnBindClient: function () {//绑定客户            
            var checkStatus = table.checkStatus('mainList'),
               data = checkStatus.data;
            var edit = false;
            if (data.length != 1) {
                toplayer.msg("请选择要绑定客户的用户!");
                return;
            }

            var url = `/configure/BaseClientInfo/Index?menuFlag=-2&selectColKeyCustom=keys&page=sysuser&userAccount=${data[0].Account}`;//menuFlag=-2 菜单隐藏
            var index = layer.open({
                title: "为用户【" + data[0].Name + "】绑定客户<span style='color:red;'>(目前只支持用户绑定单个客户,当已绑定勾选某个客户需要解绑再点击一次即可)</span>",
                area: ["1000px", "600px"],
                type: 2,
                content: url,
                
            });
        },
        //搜索
        btnQuery: function () { 
            $("#panelSearch").toggle("fast");
            active.search();
        },

        btnClose: function () {
            $("#panelSearch").toggle("fast");
        }
    };

    $('.toolList .layui-btn').on('click', function () {
        var type = $(this).data('type');
        active[type] ? active[type].call(this) : '';
    });
    //监听页面主按钮操作 end
    function tableCheckboxClick() {
        if (menu == -2) {
            let objData;
            //单元格点击事件 fileEvent 图片预览
            table.on(`row(list)`, function (obj) {
                objData = obj.data;
            });
            //分配及取消分配
            table.on('checkbox(list)', function (obj) {
                var userIds = GetObjData(obj),
                    url = "/configure/StationUserRel/Assign",
                    flag = "check";
                debugger;
                if ($.isEmptyObject(obj.data) && obj.type == "one") userIds = objData.Id;
                if (!obj.checked) {
                    flag = "unCheck";
                }
                $.post(url, { stationId: stationId.join(), userIds: userIds, flag: flag }, function (data) {
                    layer.msg(data.Message);
                }, "json");
            });
        }
    }

    //监听页面主按钮操作 end
    function tableCheckboxClickBaseTeam() {
        if (menu == -2) {
            let objData;
            //单元格点击事件 fileEvent 图片预览
            table.on(`row(list)`, function (obj) {
                objData = obj.data;
            });

            //分配及取消分配
            table.on('checkbox(list)', function (obj) {
                var userIds = GetObjData(obj),
                    url = "/configure/BaseTeam/Assign",
                    flag = "check";
                debugger;
                if ($.isEmptyObject(obj.data) && obj.type == "one") userIds = objData.Id;
                if (!obj.checked) {
                    flag = "unCheck";
                }
                $.post(url, { teamCode: teamCode.join(), userIds: userIds, flag: flag }, function (data) {
                    layer.msg(data.Message);
                }, "json");
            });
        }
    }

    function GetObjData(obj) {
        var editdata;
        if (obj.type == "one") {
            editdata = obj.data.Id;
        }
        else {
            editdata = table.cache["mainList"].map(x => {
                return x["Id"];
            }).join();
        }
        return editdata;
    }

    GetTableSelectData = function () {
       return table.checkStatus('mainList');
    };
});

//文件选择改变事件
function filechange(fileId, obj, fn) {
    var selectFile = document.getElementById(fileId);
    //var filePath = selectFile.value;//文件路径
    var fileName = selectFile.files[0].name;//上传的文件名称
    var file = selectFile.files[0];//上传的文件
    //var extn = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();//文件后缀
    //文件base64string获取

    if (window.FileReader) {
        var reader = new FileReader();
        reader.readAsDataURL(file);
        let index = layer.load();
        //监听文件读取结束后事件    
        reader.onloadend = function (e) {
            layer.close(index);
            var base64String = e.target.result;
            if (obj != null) obj["base64"] = base64String;
            if (fn != null) fn();
        };
    }
}

function GetUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}