ty-mobile-uni
Version:
uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
99 lines (93 loc) • 2.6 kB
JavaScript
import uni_request from './uni_request.js'
import { getToken } from './auth.js'
import { showFullScreenLoading, tryHideFullScreenLoading } from './loading'
import Vue from 'vue'
const request = uni_request({
timeout: 10000, // 超时时间
header: {
'x-custom-header': 'x-custom-header',
}, // 设置请求头,建议放在请求拦截器中
statusCode: [200, 401], // 服务器相应状态码为 200/401 时,网络请求不会 reject
})
// 请求失败统一处理方法
request.onerror = async (...args) => {
//console.log('网络请求失败了', `url为${args[1]}`)
tryHideFullScreenLoading()
}
//请求拦截器
request.interceptors.request.use(
(config, ...args) => {
var token = getToken()
if (token) {
config.header.Authorization = token
}
var obj = {
contractRoot: {
svcCont: {
requestObject: config.body,
},
tcpCont: {
appKey: 'string',
dstSysId: 'string',
reqTime: 0,
rspTime: 0,
sign: 'string',
svcCode: 'string',
transactionId: 'string',
version: 'string',
},
},
}
if (config.body && args[0] != 'get') {
config.body = obj
}
if (!config.hideLoading) {
//全局加载
showFullScreenLoading()
}
return config
},
(error) => {
tryHideFullScreenLoading()
return Promise.reject(error)
}
)
//响应拦截器
request.interceptors.response.use(
(response, ...args) => {
// 响应拦截器(可以设置多个, 同时可以也可以使用异步方法)
//关闭loading
tryHideFullScreenLoading()
var resData =
typeof response.data === 'string'
? JSON.parse(response.data)
: response.data
var info = resData.contractRoot.svcCont
if (info.resultCode == '0000') {
return info.responseObject
} else if (info.resultCode == '10015') {
setTimeout(() => {
if (Vue.prototype.tokenInvalidCallback) {
Vue.prototype.tokenInvalidCallback()
}
}, 1000)
uni.showToast({
icon: 'none',
title: 'token无效,请重新登录!',
duration: 2000,
})
} else {
uni.showToast({
icon: 'none',
title: info.resultMsg || '请求异常!',
duration: 2000,
})
}
return Promise.reject(info)
},
(error) => {
tryHideFullScreenLoading()
return Promise.reject(error)
}
)
export default request