export default class Ajax {
constructor(Dcat) {
this.dcat = Dcat;
Dcat.handleAjaxError = this.handleAjaxError.bind(this);
Dcat.handleJsonResponse = this.handleJsonResponse.bind(this);
this.init(Dcat)
}
init(Dcat) {
$.get = function (url, data, success, dataType) {
let options = {
type: 'GET',
url: url,
};
if (typeof data === 'function') {
dataType = success;
success = data;
data = null
}
if (typeof success === 'function') {
options.success = success;
}
if (typeof data === 'object') {
options.data = data
}
if (dataType) {
options.dataType = dataType;
}
return $.ajax(options)
};
$.post = function (options) {
options.type = 'POST';
return $.ajax(options);
};
$.delete = function (options) {
options.type = 'POST';
options.data = {_method: 'DELETE'};
return $.ajax(options);
};
$.put = function (options) {
options.type = 'POST';
Object.assign(options.data, {_method: 'PUT'});
return $.ajax(options);
};
}
handleAjaxError(xhr, text, msg) {
let Dcat = this.dcat,
json = xhr.responseJSON || {},
_msg = json.message;
Dcat.NP.done();
Dcat.loading(false);// 关闭所有loading效果
$('.btn-loading').buttonLoading(false);
switch (xhr.status) {
case 500:
return Dcat.error(_msg || (Dcat.lang['500'] || 'Server internal error.'));
case 403:
return Dcat.error(_msg || (Dcat.lang['403'] || 'Permission deny!'));
case 401:
if (json.login) {
return location.href = json.login;
}
return Dcat.error(Dcat.lang['401'] || 'Unauthorized.');
case 419:
return Dcat.error(Dcat.lang['419'] || 'Sorry, your page has expired.');
case 422:
if (json.errors) {
try {
var err = [], i;
for (i in json.errors) {
err.push(json.errors[i].join('
'));
}
Dcat.error(err.join('
'));
} catch (e) {}
return;
}
}
Dcat.error(_msg || (xhr.status + ' ' + msg));
}
// 处理接口返回数据
handleJsonResponse(response, options) {
let Dcat = this.dcat,
data = response.data;
if (! response) {
return;
}
if (typeof response !== 'object') {
return Dcat.error('error', 'Oops!');
}
var then = function (then) {
switch (then.action) {
case 'refresh':
Dcat.reload();
break;
case 'download':
window.open(then.value, '_blank');
break;
case 'redirect':
Dcat.reload(then.value || null);
break;
case 'location':
setTimeout(function () {
if (then.value) {
window.location = then.value;
} else {
window.location.reload();
}
}, 1000);
break;
case 'script':
(function () {
eval(then.value);
})();
break;
}
};
if (typeof response.html === 'string' && response.html && options.target) {
if (typeof options.html === 'function') {
// 处理api返回的HTML代码
options.html(options.target, response.html, response);
} else {
$(target).html(response.html);
}
}
let message = data.message || response.message;
// 判断默认弹窗类型.
if (! data.type) {
data.type = response.status ? 'success' : 'error';
}
if (typeof message === 'string' && data.type && message) {
if (data.alert) {
Dcat.swal[data.type](message, data.detail);
} else {
Dcat[data.type](message, null, data.timeout ? {timeOut: data.timeout*1000} : {});
}
}
if (data.then) {
then(data.then);
}
}
}