/** 
 | 
 * ajax请求的代理类 1、系统在一般情况都使用本类进行ajax请求不在使用原生的或者jQuery的ajax 原因: 
 | 
 * 1、本类对异常信息,错误信息进行了信息提示处理 2、本类与服务器端的AjaxResult.java 对应,接收的数据格式是AjaxResult.java 
 | 
 * 的json格式数据 
 | 
 * 
 | 
 * author :姜友瑶; 2016-06-02 
 | 
 */ 
 | 
  
 | 
  
 | 
  
 | 
var AjaxProxy = { 
 | 
  
 | 
    requst: function (option) { 
 | 
        // 是否开启遮罩 
 | 
        var params = { 
 | 
            url: '', 
 | 
            type: 'post', 
 | 
            dataType: 'json', 
 | 
            data: {}, 
 | 
            cache: false, 
 | 
            async: true, 
 | 
            callback: null, 
 | 
            fail:null, 
 | 
            contentType: 'application/json;charset=utf-8', 
 | 
            processData: true, 
 | 
            showLoad: true, 
 | 
            showLoadTip: '提交中', 
 | 
            app: {},//vue实例 
 | 
        }; 
 | 
  
 | 
        params = $.extend(params, option); 
 | 
        if (params.contentType && params.contentType.indexOf('application/json') > -1 && params.type == 'post') { 
 | 
            params.data = JSON.stringify(params.data) 
 | 
        } 
 | 
        let loading = {}; 
 | 
        if (params.showLoad) { 
 | 
            loading = params.app.$loading({ 
 | 
                lock: true, 
 | 
                text: 'Loading', 
 | 
                spinner: 'el-icon-loading', 
 | 
                background: 'rgba(0, 0, 0, 0.7)' 
 | 
            }); 
 | 
        } 
 | 
  
 | 
        return xhr = $.ajax({ 
 | 
            url: params.url, 
 | 
            type: params.type, 
 | 
            data: params.data, 
 | 
            dataType: params.dataType, 
 | 
            contentType: params.contentType, 
 | 
            processData: params.processData, 
 | 
            async: params.async, 
 | 
            success: function (data) { 
 | 
                if (params.showLoad) { 
 | 
                    loading.close(); 
 | 
                } 
 | 
                if (data.status && data.status != '200') { 
 | 
                    if (data.info) { 
 | 
                        params.app.$message({ 
 | 
                            message: data.info, 
 | 
                            type: 'warning' 
 | 
                        }); 
 | 
                    } 
 | 
                    params.fail && params.fail(data); 
 | 
                } else { 
 | 
                    params.callback && params.callback(data); 
 | 
                } 
 | 
            }, 
 | 
            error: function (XMLHttpRequest, textStatus, errorThrown) { 
 | 
                console.log(XMLHttpRequest, textStatus, errorThrown); 
 | 
                params.app.$message.error('网络连接失败,请稍后重试!'); 
 | 
                if (params.showLoad) { 
 | 
                    loading.close(); 
 | 
                } 
 | 
            }, 
 | 
            /*complete:function(XMLHttpRequest,status){ //请求完成后最终执行参数 
 | 
                if(status=='timeout'){//超时,status还有success,error等值的情况 
 | 
                    xhr.abort(); 
 | 
                    $.hideLoading() 
 | 
                    $.toast("网络请求超时,请检查网络后再试"); 
 | 
                } 
 | 
            }*/ 
 | 
        }); 
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
function uploadForImage(url, data, callback, token) {//data是文件对象 
 | 
    let xhr = new XMLHttpRequest(); 
 | 
    let form = new FormData(); 
 | 
    form.append('file', data); 
 | 
  
 | 
    function uploadProgress(e) { 
 | 
        if (e.lengthComputable) { 
 | 
            let progress = Math.round((e.loaded / e.total) * 100); 
 | 
            callback(progress); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /* 
 | 
    * 监听请求的进度并在回调中传入进度参数*/ 
 | 
    xhr.upload.addEventListener('progress', uploadProgress, false);  // 第三个参数为useCapture?,是否使用事件捕获/冒泡 
 | 
    /* 
 | 
    * 监听readyState的变化,完成时回调后端返回的response 
 | 
    * */ 
 | 
    xhr.addEventListener('readystatechange', function (e) { 
 | 
        console.log(e); 
 | 
        let response = e.currentTarget.response ? JSON.parse(e.currentTarget.response) : null; 
 | 
        if (e.currentTarget.readyState === 4 && response) { 
 | 
            callback(100, response); 
 | 
            xhr.upload.removeEventListener('progress', uploadProgress, false) 
 | 
        } 
 | 
    }, false); 
 | 
  
 | 
    xhr.open('POST', url, true);  // 第三个参数为async?,异步/同步 
 | 
    xhr.setRequestHeader("accessToken", token); 
 | 
    xhr.send(form); 
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
var MTools = { 
 | 
    /** 返回一个随机字符串 */ 
 | 
    uuid : function() { 
 | 
  
 | 
            function S4() { 
 | 
                return (((1+Math.random())*0x10000)|0).toString(16).substring(1); 
 | 
            } 
 | 
            return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); 
 | 
  
 | 
    }, 
 | 
  
 | 
    padLeftZero: function (str) { 
 | 
        return ('00' + str).substr(str.length) 
 | 
    }, 
 | 
  
 | 
     isRealNum:function(val){ 
 | 
        // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除, 
 | 
  
 | 
        if(val === "" || val ==null){ 
 | 
            return false; 
 | 
        } 
 | 
        if(!isNaN(val)){ 
 | 
            //对于空数组和只有一个数值成员的数组或全是数字组成的字符串,isNaN返回false,例如:'123'、[]、[2]、['123'],isNaN返回false, 
 | 
            //所以如果不需要val包含这些特殊情况,则这个判断改写为if(!isNaN(val) && typeof val === 'number' ) 
 | 
            return true; 
 | 
        } 
 | 
  
 | 
        else{ 
 | 
            return false; 
 | 
        } 
 | 
    }, 
 | 
  
 | 
    formatDate: function (date, fmt) { 
 | 
        var date = new Date(date); 
 | 
        if (/(y+)/.test(fmt)) { 
 | 
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) 
 | 
        } 
 | 
        let o = { 
 | 
            'M+': date.getMonth() + 1, 
 | 
            'd+': date.getDate(), 
 | 
            'h+': date.getHours(), 
 | 
            'm+': date.getMinutes(), 
 | 
            's+': date.getSeconds() 
 | 
        } 
 | 
        for (let k in o) { 
 | 
            if (new RegExp(`(${k})`).test(fmt)) { 
 | 
                let str = o[k] + '' 
 | 
                fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str)) 
 | 
            } 
 | 
        } 
 | 
        return fmt 
 | 
    }, 
 | 
  
 | 
    /** 
 | 
    * 字符串转数组 
 | 
     */ 
 | 
    strToArray:function(str,patten,needToNum){ 
 | 
        let arr=new Array(); 
 | 
        if(str && str.trim().length>0){ 
 | 
            arr=str.split(patten) 
 | 
            if(needToNum){ 
 | 
                let arrNum=new Array(); 
 | 
                arr.forEach(item => { 
 | 
                    arrNum.push(parseInt(item)); 
 | 
                }); 
 | 
                arr=arrNum; 
 | 
            } 
 | 
        } 
 | 
        return arr; 
 | 
    }, 
 | 
  
 | 
    isNotBlank:function(str){ 
 | 
        return  str !== undefined && str !== null &&  str !== '' 
 | 
    }, 
 | 
  
 | 
    isBlank:function(str){ 
 | 
        return  str == undefined || str == null ||  str == '' 
 | 
    }, 
 | 
  
 | 
    /** 页面定向 */ 
 | 
    redirect : function(url) { 
 | 
        window.location.href = url; 
 | 
    }, 
 | 
  
 | 
  
 | 
    createTreeModel : function(datas, seting) { 
 | 
        // 配置对象 
 | 
        var _seting = { 
 | 
            id : "id",        // 选项的值 
 | 
            parent : "parentId",// 父节点值 
 | 
        } 
 | 
        var _seting = $.extend(_seting, seting); 
 | 
        // 用每一个节点的id标识一个节点对象,这里是所有对象的map集合 
 | 
        var _datas = {}; 
 | 
        var nodeNength = datas.length; 
 | 
        for (var i = 0; i < nodeNength; i++) { 
 | 
            // 用id来唯一标识这个节点 
 | 
            _datas[datas[i][_seting.id]] = datas[i]; 
 | 
        } 
 | 
        // 构建树模型 root 是这课树的集合 
 | 
        var root = {}; 
 | 
        root.children = []; 
 | 
        for (var i = 0; i < nodeNength; i++) { 
 | 
            var node = datas[i]; 
 | 
            // _datas中 如果存在 datas 对应的 父节,把当前的节点放入父节点 
 | 
            if (_datas[node[_seting.parent]]) { 
 | 
                var parent = _datas[node[_seting.parent]]; 
 | 
                if (parent.children) { 
 | 
                    parent.children.push(_datas[node[_seting.id]]); 
 | 
                } else { 
 | 
                    parent.children = []; 
 | 
                    parent.children.push(_datas[node[_seting.id]]); 
 | 
                } 
 | 
            } else {// 如果不存在父节点就放入根节点中 
 | 
                root.children.push(_datas[node[_seting.id]]); 
 | 
            } 
 | 
        } 
 | 
      return root.children; 
 | 
    }, 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
} 
 |