You've already forked guangan-mp
118 lines
3.7 KiB
JavaScript
118 lines
3.7 KiB
JavaScript
import ajax from '@/uni_modules/uni-ajax/js_sdk/index.js';
|
|
import {
|
|
TaCache
|
|
} from './cache';
|
|
import {
|
|
TaToast
|
|
} from './toast';
|
|
import {
|
|
objectHasKey
|
|
} from './util';
|
|
|
|
// 执行队列
|
|
let _tasks = []
|
|
let _status = true
|
|
|
|
export const baseUrl = 'https://www.gafzgc.com/'
|
|
// export const baseUrl = 'http://127.0.0.1:8000/'
|
|
|
|
// 创建请求实例,检查登录状态及业务异常,返回 Body 内容( 建议使用 TaPost 处理)
|
|
const TaHttp = ajax.create({
|
|
baseURL: baseUrl
|
|
})
|
|
|
|
// 创建请求实例,不检查登录状态及业务异常,返回 Body 内容
|
|
export const TaAjax = ajax.create({
|
|
baseURL: baseUrl
|
|
})
|
|
|
|
// 通用 POST 提交,检查登录状态及业务异常,返回 Body 内容,可中断请求
|
|
export function TaPost(uri, data = {}, load = '', options = {}) {
|
|
load.length > 0 && TaToast.loading(load)
|
|
return new Promise((resolve, reject) => {
|
|
if (_status) {
|
|
_tasks.push(options.fetcher = new ajax.Fetcher())
|
|
TaHttp.post(uri, data, options).then((ret) => {
|
|
ret.code === 1 ? resolve(ret) : reject(ret)
|
|
}).finally(() => {
|
|
load.length > 0 && TaToast.loadhide()
|
|
_tasks.splice(_tasks.indexOf(options.fetcher), 1)
|
|
})
|
|
} else {
|
|
load.length > 0 && TaToast.loadhide()
|
|
reject({
|
|
code: 0,
|
|
info: '请求已被阻止!'
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
// 阻止 POST 请求 ( 20毫秒内阻止请求 )
|
|
export function TaPostAbort() {
|
|
_status = false;
|
|
_tasks.forEach((x, i) => (x.abort(), _tasks.splice(i, 1)))
|
|
return new Promise(resolve => setTimeout(() => resolve(_status = true), 20))
|
|
}
|
|
|
|
// 添加请求拦截器
|
|
TaHttp.interceptors.request.use(useRequestInterceptor, error => Promise.reject(error))
|
|
TaAjax.interceptors.request.use(useRequestInterceptor, error => Promise.reject(error))
|
|
|
|
// 添加响应拦截器
|
|
TaHttp.interceptors.response.use(response => useResponseInterceptor(response, true), error => Promise.reject(error))
|
|
TaAjax.interceptors.response.use(response => useResponseInterceptor(response, false), error => Promise.reject(error))
|
|
|
|
// 定义请求拦截函数
|
|
function useRequestInterceptor(config) {
|
|
// 检查是否有 Api-Token 配置,没有则自动追加配置
|
|
let token = TaCache.get('auth.token')
|
|
if (token) config.header['Api-Token'] = token
|
|
// 检查是否有 Content-Type 配置,没有则自动追加配置
|
|
if (!objectHasKey(config.header, 'content-type')) {
|
|
config.header['Content-Type'] = 'application/x-www-form-urlencoded'
|
|
}
|
|
return config
|
|
}
|
|
|
|
// 定义结果拦截函数
|
|
function useResponseInterceptor(response, checkAuth) {
|
|
// 获取返回的数据
|
|
let body = response.data || {
|
|
code: 0,
|
|
info: 'unknow',
|
|
data: {}
|
|
}
|
|
// 网络请求异常处理
|
|
if (response.statusCode === 404) {
|
|
TaToast.error(body.info || '资源不存在!')
|
|
return Promise.reject(body)
|
|
} else if (response.statusCode === 500) {
|
|
TaToast.error(body.info || '服务异常!')
|
|
return Promise.reject(body)
|
|
} else if (response.statusCode !== 200) {
|
|
TaToast.error(body.info || '请求异常!' + body.code)
|
|
return Promise.reject(body)
|
|
}
|
|
// 接口返回异常处理
|
|
if (checkAuth) {
|
|
if (body.code === 402) {
|
|
TaPostAbort(), TaToast.error(body.info || '请完善资料!').then(() => uni.navigateTo({
|
|
url: '/pages/user/bind/bind'
|
|
}))
|
|
return Promise.reject(body)
|
|
} else if ((body.code === 401 || body.code === 403)) {
|
|
TaPostAbort(), TaToast.error(body.info || '需要登录授权!').then(() => DataUser.logout())
|
|
return Promise.reject(body)
|
|
} else if (body.code !== 1) {
|
|
body.info && TaToast.error(body.info)
|
|
return Promise.reject(body)
|
|
}
|
|
}
|
|
// 任何请求,如果有返回 Token 都进行保存授权令牌
|
|
if (body.data && typeof body.data.token === 'string') {
|
|
TaCache.set('auth.token', body.data.token)
|
|
}
|
|
// 返回主体内容
|
|
return Promise.resolve(body);
|
|
} |