@huntianning/components
Version:
Custom components for HTN
104 lines (94 loc) • 2.79 kB
JavaScript
import axios from 'axios';
import Message from '@huntianning/components/packages/message';
let instance = null;
function captureBusinessError(error) {
if (error && error.data && error.data.status === 'FAIL') {
const message = error.data.data || error.data.message || '未知异常';
Message.error(message);
}
return Promise.reject(error);
}
export const init = options => {
options = Object.assign({
baseURL: null,
withCredentials: true,
requestInterceptor: null,
responseInterceptor: null
}, options);
instance = axios.create(options);
instance.interceptors.request.use(config => {
if (options.requestInterceptor) {
return options.requestInterceptor(config);
}
return config;
}, error => {
return Promise.reject(error);
});
instance.interceptors.response.use(response => {
if (options.responseInterceptor) {
return options.responseInterceptor(response);
}
return response;
}, error => {
let message = '未知错误';
if (error.response) {
if (error.response.status === 404) {
message = '服务未找到';
} else if (error.response.status === 500) {
message = '服务异常';
} else if (error.response.status === 401) {
message = '登录失效';
}
}
Message.error(message);
return Promise.reject(error);
});
};
export function post(url, data, opts) {
if (!instance) {
throw new Error('[Request] 使用前请先执行init方法初始化');
}
if (data && opts && opts.headers && opts.headers['Content-Type'] === 'multipart/form-data') {
const formData = new FormData();
if (data && typeof data === 'object') {
Object.keys(data).forEach(key => {
formData.append(key, data[key]);
});
}
data = formData;
}
return instance.post(url, data, opts).then(null, captureBusinessError);
}
export function get(url, params) {
if (!instance) {
throw new Error('[Request] 使用前请先执行init方法初始化');
}
return instance.get(url, {
params
}).then(null, captureBusinessError);
}
export function del(url, params) {
if (!instance) {
throw new Error('[Request] 使用前请先执行init方法初始化');
}
return instance.delete(url, {
params
}).then(null, captureBusinessError);
}
export function put(url, data) {
if (!instance) {
throw new Error('[Request] 使用前请先执行init方法初始化');
}
return instance.put(url, data).then(null, captureBusinessError);
}
/**
* 从服务器请求登录用户数据
*/
export function mockGetLoginUser(username) {
return post('/system/user/sendSmsCode', {
username,
type: 'HTN'
}).then(code => {
return post(`/auth/login?code=${code}&type=HTN&username=${username}`);
});
}