"use strict";
layui.define(['jquery','layer','form'],function (exports) {
    var $ = layui.jquery;
    var layer =layui.layer;
    var form = layui.form;

    //  Ajax全局配置
    var layerIndex = undefined;
    $.ajaxSetup({
        //  发送请求前运行
        beforeSend  :   function () {
            //layerIndex = layer.load(1);
        },
        //  返回数据过滤
        dataFilter  :   function (data) {
            var result = $.parseJSON(data);
            switch (result.code) {
                case '200':
                    break;
                case '401':
                    layer.alert(result.msg, function (index) {
                        layer.close(index);
                        window.location.href = '/permissions/authentication/login';
                    });
                    break;
                case '403':
                    layer.alert("没有访问权限");
                    break;
                default:
                    layer.alert(result.msg);
                    return '';
            }
            //  防止xss攻击
            return filterXSS(data);
        },
        // error   :   (xhr, status, e) => {
        //     console.log(e)
        //     // layer.alert(e);
        // },
        //  请求结束时运行
        complete    :   function () {
            layer.close(layerIndex);
        }
    });

    //字典list
    // let dictList = JSON.parse(window.localStorage.getItem("dictList"));

    //  禁止input类型为number时,输入E
    $(document).on('keypress','input[type=number]',function (e) {
        if (!String.fromCharCode(e.keyCode).match(/[0-9\.]/)) {
            return false;
        }
    });

    /**
     * 定义公共的方法
     * @type {{}}
     */
    var common = {
        //  发送请求
        'sendRequest'       :   function(url,type,async,data,callbackFn,errorFn){
            $.ajax({
                'url'       :   url,
                'type'      :   type,
                'data'      :   data,
                'async'     :   async,
                'success'   :   function(result){
                    if (result.code === '200'){
                        //  请求成功
                        callbackFn(result);
                    }else if (errorFn){
                        //  执行异常回调
                        errorFn(result);
                    } else {
                        //  其他
                        layer.msg(result.msg);
                    }
                },
                'error'     :   function(xhr, status, e){
                    console.log(status);
                    console.log(e);
                }
            });
        },
        //  发送异步请求
        'sendAsyncRequest'   :   function(url,type,data,callbackFn,errorFn){
            common.sendRequest(url,type,true,data,callbackFn,errorFn);
        },
        //  发送同步请求
        'sendSyncRequest'   :   function(url,type,data,callbackFn,errorFn){
            common.sendRequest(url,type,false,data,callbackFn,errorFn)
        },
        //  Layui表格
        'layuiTable'        :   {
            //  渲染表格
            render  :   function(table,options){
                //  小尺寸表格
                // options.size = 'sm';
                //  开启分页
                options.page = true;
                //  是否显示加载条
                options.loading = true;
                //  没有数据时的提示信息
                options.text = {
                    none: '暂无相关数据'
                };
                //  用于对分页请求的参数
                options.request =  {
                    //  页码的参数名称
                    pageName: 'current'
                    //  每页数据量的参数名
                    ,limitName: 'size'
                };
                //  重新规定返回的数据格式
                options.response = {
                    //  规定成功的状态码
                    statusCode: '200'
                };
                if (!options.defaultToolbar){
                    options.defaultToolbar = [];
                }
                //  数据预解析回调函数
                options.parseData = function(result){
                    var data = {
                        //  解析接口状态
                        "code": result.code,
                        //  解析提示文本
                        "msg": result.msg
                    };
                    //  判断是否请求成功
                    if(result.code === options.response.statusCode){
                        data.count = result.data.total;
                        data.data = result.data.records;
                    }
                    return data;
                };
                return table.render(options);
            }
        },

        //  打开图片
        'openImage'             :   function (options) {
            var $img = options.$img;
            layer.open({
                type    :   1,
                title   :   false,
                shade   :   0.9,
                area: function(){
                    var imgarea = [$img.width, $img.height];
                    var winarea = [$(window).width() - 100, $(window).height() - 100];
                    //如果 实际图片的宽或者高比 屏幕大（那么进行缩放）
                    if((imgarea[0]>winarea[0]||imgarea[1]>winarea[1])){
                        var wh = [imgarea[0]/winarea[0],imgarea[1]/winarea[1]];//取宽度缩放比例、高度缩放比例
                        if(wh[0] > wh[1]){//取缩放比例最大的进行缩放
                            imgarea[0] = imgarea[0]/wh[0];
                            imgarea[1] = imgarea[1]/wh[0];
                        } else if(wh[0] < wh[1]){
                            imgarea[0] = imgarea[0]/wh[1];
                            imgarea[1] = imgarea[1]/wh[1];
                        }
                    }
                    return [imgarea[0]+'px', imgarea[1]+'px'];
                }(),
                anim    :   options.anim,
                shadeClose  :   options.shadeClose,
                content :   '<div class="layui-layer-phimg"><img style="width: auto" src="'+ $img.attr("src") +'" alt="'+ $img.attr("alt") +'" ></div>'
            });
        },
        //  打开一个最大化的Iframe弹窗
        'openMaxIframe'         :   function (options) {
            layer.open({
                //  0（信息框，默认）1（页面层）2（iframe层）3（加载层）4（tips层）
                type    :   2,
                //  宽高
                area    :   ['100%', '100%'],
                //  禁用最大最小化
                maxmin  :   false,
                //  禁用拖拽
                move    :   false,
                //  弹窗标题
                title   :   options.title,
                //  打开内容
                content :   options.content,
                //  关闭回调
                cancel :   options.cancel
            });
        },
        //  打开一个默认大小Iframe弹窗
        'openDefaultIframe'         :   function (options) {
            layer.open({
                //  0（信息框，默认）1（页面层）2（iframe层）3（加载层）4（tips层）
                type    :   2,
                //  宽高
                area    :   ['80%','80%'],
                //  禁用最大最小化
                maxmin  :   true,
                //  禁用拖拽
                move    :   false,
                //  弹窗标题
                title   :   options.title,
                //  打开内容
                content :   options.content,
                //  关闭回调
                cancel :   options.cancel
            });
        },

        //禁止重复提交
        'timer' : function (btn) {
            btn.addClass('layui-btn-disabled');
            btn.attr('disabled','disabled');
            setTimeout(function(){
                btn.removeClass('layui-btn-disabled');
                btn.removeAttr('disabled','disabled');
            },2000);
        },

        //字典返回value
        'getDictValue' : function (dictCode,dictKey){
            this.sendRequest("/permissions/dict/getByCode/" + dictCode, 'GET', false, {}, function (result) {
                let dictList = result.list;
                for (let i = 0; i < dictList.length; i ++){
                    if (dictKey == dictList[i].dictKey){
                        return dictList[i].dictValue;
                    }
                }
            });
        }

    };

    //表单验证
    form.verify({
        //替换系统必填验证
        required: function(value, item){
            if(!value){
                return '请填写所有必选项';
            }
        },
        //选择方式必填验证
        selectRequired: function(value, item){
            if(!value){
                return '请选择所有必选项';
            }
        }
    });

    //输出test接口
    exports('common', common);
});
