| /** | 
|  * 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; | 
|     }, | 
|   | 
|     /** json对象转Url参数**/ | 
|     jsonToUrlParam:function(obj){ | 
|         let str=""; | 
|         for(item in obj){ | 
|             if(obj[item]){ | 
|                 str+=item+"="+obj[item]+"&" | 
|             } | 
|         } | 
|         return str; | 
|     } | 
|   | 
|   | 
|   | 
| } |