/**
|
* 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 = {
|
closeIframe: function () {
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
},
|
|
/** 返回一个随机字符串 */
|
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;
|
}
|
|
|
|
}
|