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

    //  事件名称
    var eventName = {
        //  修改字典类型
        "updateDictType"    :   "update_dict_type",
        //  新增字典
        "insertDict"        :   "insert_dict",
        //  修改字典
        "updateDict"        :   "update_dict"
    };

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

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

    /**
     * 刷新树形字典
     */
    var refreshTreeDictFn = function(){
        //  获取树形字典
        $.ajax({
            url     :   '/permissions/dict/getDictTreeList',
            success :   function(result){
                if (result.list){
                    //  清空搜索框数据
                    // $('#entity_pid_select option').remove();
                    //  清空全局的字典列表
                    gloablDictList = [];
                    //  转换数据格式
                    var list = dictListCastDataFormatFn(result.list);
                    //
                    $('#dictTree *').remove();
                    //  初始化树形字典
                    layui.tree({
                        elem    :   '#dictTree'
                        ,nodes  :   list
                        ,click  :   treeDictClickFn
                    });
                    layui.form.render();
                }
            }
        });
    };


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


    /**
     * 将字典列表转换为属性数据格式
     * @param dictList
     * @returns {Array}
     */
    function dictListCastDataFormatFn(dictList){
        var list = [];
        if (dictList instanceof Array) {
            dictList.forEach(function (dict) {
                //  将每个元素都加入到搜索列表中
                if (dict.pid == 0){
                    $('#entity_pid_select').append('<option value="' + dict.id + '" code="' +dict.code + '">' + dict.dictValue + '</option>');
                }

                var subList = dictListCastDataFormatFn(dict.subList);
                var item = {
                    id: dict.id,
                    name: dict.dictValue,
                    spread: true,
                    children: subList
                };
                //  添加元素
                list.push(item);
                dict.subList = [];
                gloablDictList.push(dict);
            });
        }
        return list;
    }

    //  切换字典类型
    layui.form.on("select(entity_pid_select)", function(data){
        if (!data.value){
            $('input[name="code"]').val('');
            $('input[name="code"]').removeAttr('readonly');
            //字典父节点dictKey默认为-1，且不能修改
            $('input[name="dictKey"]').val(-1);
            $('input[name="dictKey"]').attr('readonly', 'readonly');
        }else{
            var code = $(data.elem).find('option[value="' + data.value + '"]').attr('code');
            if (!!code){
                $('input[name="code"]').val(code);
                $('input[name="code"]').attr('readonly', 'readonly');

                $('input[name="dictKey"]').val('');
                $('input[name="dictKey"]').removeAttr('readonly');
            }
        }
    });

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

    //  修改字典事件
    layui.form.on("submit(" + eventName.updateDict + ")", function(data){
        layer.confirm('保存更改?', {icon: 3, title:'提示'}, function(index){
            //  发送请求
            $.ajax({
                url     :   '/permissions/dict/update',
                type    :   'POST',
                data    :    data.field,
                success :   function(){
                    //  刷新树形字典
                    refreshTreeDictFn();
                    //  重置表单
                    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'    :   '',
            'code'  :   '',
            'dictKey' :   '',
            'dictValue'  :   '',
            'remark'  :   ''
        });
        formSubmitBtn.attr('lay-filter',eventName.insertDict);
        $('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/dict/delete/' + id,
                    success: function () {
                        layer.msg("删除成功");
                        entityAddBtn.click();
                        //  刷新树形字典
                        refreshTreeDictFn();
                    }
                });
            });
        } 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 '名称不能全为数字';
            }
        },
    });

});
