crm-uniapp/api/api.js
2024-11-21 18:19:27 +08:00

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