"use strict";
layui.extend({
    common    :   'js/common'
}).use(['tree', 'jquery','layer','form','common'], function () {
    //  弹窗插件
    var layer = layui.layer;
    //  Jquery插件
    var $ = layui.jquery;

    //  事件名称
    var eventName = {
        //  修改菜单类型
        "updateMenuType"    :   "update_menu_type",
        //  新增菜单
        "insertMenu"        :   "insert_menu",
        //  修改菜单
        "updateMenu"        :   "update_menu"
    };

    //  表单提交按钮
    var formSubmitBtn = $('#entity_submit_btn');
    //  删除菜单按钮
    var entityDeleteBtn = $('#entity_delete_btn');
    //  添加菜单按钮
    var entityAddBtn = $('#entity_add_btn');

    var gloablMenuList = [];
    /**
     * 树形菜单点击事件
     * @param node
     */
    var treeMenuClickFn = function(node){
        for (var i = 0; i < gloablMenuList.length; i++){
            var menu = gloablMenuList[i];
            if (node.id === menu.id){
                //  将数据渲染到表单中
                layui.form.val('entity_form',menu);
                //  选中下拉框
                $('.layui-form-select dd').each(function () {
                    if (parseInt($(this).attr('lay-value')) === menu.pid){
                        $(this).click();
                    }
                });
                //  选中类型
                $('input[name="type"][value="' + menu.type + '"]').next().click();
                formSubmitBtn.attr('lay-filter',eventName.updateMenu);
                $('input[type="hidden"][name="id"]').attr("lay-verify","required");
                entityDeleteBtn.css('display','inline-block').attr('delete-id',menu.id);
                return;
            }
        }
        layer.msg('数据异常',function () {
            window.location.reload();
        });
    };

    /**
     * 刷新树形菜单
     */
    var refreshTreeMenuFn = function(){
        //  获取树形菜单
        $.ajax({
            url     :   '/permissions/menu/getMenuTreeList',
            success :   function(result){
                if (result.list){
                    //  清空搜索框数据
                    $('#entity_pid_select option').remove();
                    //  清空全局的菜单列表
                    gloablMenuList = [];
                    //  转换数据格式
                    var list = menuListCastDataFormatFn(result.list);
                    //
                    $('#menuTree *').remove();
                    //  初始化树形菜单
                    layui.tree({
                        elem    :   '#menuTree'
                        ,nodes  :   list
                        ,click  :   treeMenuClickFn
                    });
                    layui.form.render();
                }
            }
        });
    };


    //  初始化
    (function () {
        //  绑定表单提交按钮事件
        formSubmitBtn.attr('lay-filter',eventName.insertMenu);
        //  绑定切换菜单
        $('input[type="radio"][name="type"]').attr('lay-filter',eventName.updateMenuType);
        //  加载树形菜单
        refreshTreeMenuFn();
    })();


    /**
     * 将菜单列表转换为属性数据格式
     * @param menuList
     * @returns {Array}
     */
    function menuListCastDataFormatFn(menuList){
        var list = [];
        if (menuList instanceof Array) {
            menuList.forEach(function (menu) {
                //  将每个元素都加入到搜索列表中
                $('#entity_pid_select').append('<option value="' + menu.id + '">' + menu.name + '(' + menu.layerNumber + ')</option>');
                var subList = menuListCastDataFormatFn(menu.subList);
                var item = {
                    id: menu.id,
                    name: menu.name,
                    spread: true,
                    children: subList
                };
                //  添加元素
                list.push(item);
                menu.subList = [];
                gloablMenuList.push(menu);
            });
        }
        return list;
    }

    //  切换菜单类型
    layui.form.on("radio(" + eventName.updateMenuType + ")", function(data){
        var $token = $('.layui-form input[name="token"]');
        var $path = $('.layui-form input[name="path"]');
        switch (data.value) {
            //  菜单
            case '1':
                //  Token和path字段必填
                $token.prop('disabled', false).removeClass('layui-disabled').attr('lay-verify','required');
                $path.prop('disabled', false).removeClass('layui-disabled').attr('lay-verify','required');
                break;
            //  按钮
            case '2':
                //  禁用path字段,Token字段必填
                $token.prop('disabled', false).removeClass('layui-disabled').attr('lay-verify','required');
                $path.prop('disabled', true).addClass('layui-disabled').removeAttr('lay-verify');
                break;
            //  文件夹
            default:
                //  禁用Token和path字段
                $token.prop('disabled', true).addClass('layui-disabled').removeAttr('lay-verify');
                $path.prop('disabled', true).addClass('layui-disabled').removeAttr('lay-verify');
                break;
        }
    });

    //  新增菜单事件
    layui.form.on("submit(" + eventName.insertMenu + ")", function(data){
        layer.confirm('确认创建菜单?', {icon: 3, title:'提示'}, function(index){
            //  发送请求
            $.ajax({
                url     :   '/permissions/menu/insert',
                data    :   data.field,
                type    :   'POST',
                success :   function(){
                    //  刷新树形菜单
                    refreshTreeMenuFn();
                    //  重置表单
                    layui.form.val('entity_form',{
                        'id'    :   '',
                        'name'  :   '',
                        'token' :   '',
                        'icon'  :   '',
                        'path'  :   ''
                    });
                    layer.msg("创建成功");
                }
            });
            //  关闭弹窗
            layer.close(index);
        });
        return false;
    });

    //  修改菜单事件
    layui.form.on("submit(" + eventName.updateMenu + ")", function(data){
        layer.confirm('保存更改?', {icon: 3, title:'提示'}, function(index){
            //  发送请求
            $.ajax({
                url     :   '/permissions/menu/update',
                type    :   'POST',
                data    :    data.field,
                success :   function(){
                    //  刷新树形菜单
                    refreshTreeMenuFn();
                    //  重置表单
                    layui.form.val('entity_form',{
                        'id'    :   '',
                        'name'  :   '',
                        'token' :   '',
                        'icon'  :   '',
                        'path'  :   ''
                    });
                    layer.msg("修改成功");
                }
            });
            //  关闭弹窗
            layer.close(index);
        });
        return false;
    });

    //  添加菜单点击事件
    entityAddBtn.on('click',function () {
        //  重置表单
        layui.form.val('entity_form',{
            'id'    :   '',
            'name'  :   '',
            'token' :   '',
            'icon'  :   '',
            'path'  :   ''
        });
        formSubmitBtn.attr('lay-filter',eventName.insertMenu);
        $('input[type="hidden"][name="id"]').removeAttr('lay-verify');
        entityDeleteBtn.css('display','none').removeAttr('delete-id');
    });

    //  删除菜单事件
    entityDeleteBtn.on('click',function () {
        var id= $(this).attr('delete-id');
        if (id){
            layer.confirm('是否确认删除？',{icon: 7, title:'提示'}, function(index) {
                $.ajax({
                    url: '/permissions/menu/delete/' + id,
                    success: function () {
                        layer.msg("删除成功");
                        entityAddBtn.click();
                        //  刷新树形菜单
                        refreshTreeMenuFn();
                    }
                });
            });
        } else {
            layer.msg("参数异常",function(index){
                layer.close(index);
                window.location.reload();
            });
        }
    });

//  表单校验
    layui.form.verify({
        //  用户名校验
        specialCharacters : function (value) {
            if(!/^[a-zA-Z0-9_\u4e00-\u9fa5\s·]+$/.test(value)){
                return '名称不能有特殊字符';
            }
            if(/(^\_)|(\__)|(\_+$)/.test(value)){
                return '名称首尾不能出现下划线\'_\'';
            }
            if(/^\d+\d+\d$/.test(value)){
                return '名称不能全为数字';
            }
        },
    });

});
