212 lines
3.9 KiB
JavaScript
212 lines
3.9 KiB
JavaScript
// #ifdef H5
|
|
// h5端
|
|
import Fly from 'flyio/dist/npm/fly'
|
|
// #endif
|
|
|
|
// #ifdef APP-PLUS
|
|
// app端
|
|
import Fly from 'flyio/dist/npm/wx'
|
|
// #endif
|
|
|
|
// #ifdef MP-WEIXIN
|
|
import Fly from 'flyio/dist/npm/wx'
|
|
// #endif
|
|
|
|
import {
|
|
handleLoginFailure
|
|
} from '@/utils'
|
|
import {
|
|
isWeixin
|
|
} from '@/utils/util'
|
|
import {
|
|
VUE_APP_API_URL,
|
|
TENANT_ID
|
|
} from '@/config'
|
|
import cookie from '@/utils/cookie'
|
|
import {
|
|
replace
|
|
} from '@/utils/router'
|
|
|
|
const fly = new Fly()
|
|
fly.config.baseURL = VUE_APP_API_URL
|
|
|
|
fly.interceptors.response.use(
|
|
response => {
|
|
// console.log('response0099991:',response)
|
|
// 定时刷新access-token
|
|
return response
|
|
},
|
|
error => {
|
|
|
|
console.log('response008:', error)
|
|
if (error.toString() == 'Error: Network Error') {
|
|
handleLoginFailure()
|
|
return Promise.reject({
|
|
msg: '未登录',
|
|
toLogin: true
|
|
})
|
|
}
|
|
if (error.status == 401) {
|
|
handleLoginFailure()
|
|
return Promise.reject({
|
|
msg: '未登录',
|
|
toLogin: true
|
|
})
|
|
}
|
|
if (error.response.data.status == 5109) {
|
|
uni.showToast({
|
|
title: error.response.data.msg,
|
|
icon: 'none',
|
|
duration: 2000,
|
|
})
|
|
}
|
|
return Promise.reject(error)
|
|
}
|
|
)
|
|
|
|
const defaultOpt = {
|
|
login: true
|
|
}
|
|
|
|
function baseRequest(options) {
|
|
const token = cookie.get('accessToken')
|
|
// console.log('--> % token % token:\n', token)
|
|
|
|
options.headers = {
|
|
...options.headers,
|
|
}
|
|
|
|
// if (options.login === true) {
|
|
options.headers = {
|
|
...options.headers,
|
|
Authorization: 'Bearer ' + token,
|
|
'tenant-id': TENANT_ID,
|
|
}
|
|
// }
|
|
|
|
// 结构请求需要的参数
|
|
const {
|
|
url,
|
|
params,
|
|
data,
|
|
login,
|
|
...option
|
|
} = options
|
|
|
|
// 发起请求
|
|
return fly
|
|
.request(url, params || data, {
|
|
...option,
|
|
})
|
|
.then(res => {
|
|
|
|
const data = res.data || {}
|
|
//console.log('res.status:',res)
|
|
// console.log('res.code:',res.code)
|
|
// #ifdef H5
|
|
if (res.data.code == 1004004002) {
|
|
if (isWeixin()) {
|
|
const url = cookie.get('index_url')
|
|
//console.log('redirect_uri:',url)
|
|
//const url = `${location.origin}/h5/#/pages/index/index`
|
|
location.href = url
|
|
return
|
|
}
|
|
}
|
|
// #endif
|
|
|
|
if (res.status !== 200) {
|
|
return Promise.reject({
|
|
msg: '请求失败',
|
|
res,
|
|
data
|
|
})
|
|
}
|
|
|
|
|
|
if (data.code == 401) {
|
|
uni.hideLoading()
|
|
handleLoginFailure()
|
|
uni.showToast({
|
|
title: data.msg,
|
|
icon: 'none',
|
|
duration: 2000,
|
|
})
|
|
return Promise.reject({
|
|
msg: data.msg,
|
|
res,
|
|
data
|
|
})
|
|
}
|
|
|
|
if (data.code != 0) {
|
|
uni.showToast({
|
|
title: data.msg,
|
|
icon: 'none',
|
|
duration: 2000,
|
|
})
|
|
return Promise.reject({
|
|
data,
|
|
res
|
|
})
|
|
}
|
|
|
|
|
|
return Promise.resolve(data.data, res)
|
|
|
|
// if ([401, 403].indexOf(data.status) !== -1) {
|
|
// handleLoginFailure()
|
|
// return Promise.reject({ msg: res.data.msg, res, data, toLogin: true })
|
|
// } else if (data.status === 200) {
|
|
// return Promise.resolve(data, res)
|
|
// } else if (data.status == 5101) {
|
|
// return Promise.reject({ msg: res.data.msg, res, data })
|
|
// } else {
|
|
// return Promise.reject({ msg: res.data.msg, res, data })
|
|
// }
|
|
})
|
|
}
|
|
|
|
/**
|
|
* http 请求基础类
|
|
* 参考文档 https://www.kancloud.cn/yunye/axios/234845
|
|
*
|
|
*/
|
|
const request = ['post', 'put', 'patch'].reduce((request, method) => {
|
|
/**
|
|
*
|
|
* @param url string 接口地址
|
|
* @param data object get参数
|
|
* @param options object axios 配置项
|
|
* @returns {AxiosPromise}
|
|
*/
|
|
request[method] = (url, data = {}, options = {}) => {
|
|
console.log(url, data)
|
|
return baseRequest(Object.assign({
|
|
url,
|
|
data,
|
|
method
|
|
}, defaultOpt, options))
|
|
}
|
|
return request
|
|
}, {})
|
|
|
|
;
|
|
['get', 'delete', '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 |