settledIn/src/api/request.js

83 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import axios from 'axios'
import store from '@/store'
import SettingMer from '@/libs/settingMer'
const instance = axios.create({
baseURL: SettingMer.https,
timeout: 60000
})
const defaultOpt = {login: true}
function baseRequest(options) {
const token = store.getters.token
const headers = options.headers || {}
if (token) {
headers['X-Token'] = token
options.headers = headers
}
return new Promise((resolve, reject) => {
instance(options).then(res => {
const data = res.data || {}
if (res.status !== 200) {
return reject({message: '请求失败', res, data})
}
if ([410000, 410001, 410002, 40000].indexOf(data.status) !== -1) {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
} else if (data.status === 200) {
return resolve(data, res)
} else {
return reject({message: data.message, res, data})
}
}).catch(message => reject({message}));
})
}
/**
* http 请求基础类
* 参考文档 https://www.kancloud.cn/yunye/axios/234845
*
*/
const request = ['post', 'put', 'patch', 'delete'].reduce((request, method) => {
/**
*
* @param url string 接口地址
* @param data object get参数
* @param options object axios 配置项
* @returns {AxiosPromise}
*/
request[method] = (url, data = {}, options = {}) => {
return baseRequest(
Object.assign({url, data, method}, defaultOpt, options)
)
}
return request
}, {});
['get', 'head'].forEach(method => {
/**
*
* @param url string 接口地址
* @param params object get参数
* @param options object axios 配置项
* @returns {AxiosPromise}
*/
request[method] = (url, params = {}, options = {}) => {
return baseRequest(
Object.assign({url, params, method}, defaultOpt, options)
)
}
})
export default request