纸通宝商家版本的小程序,原生微信开发。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

208 lines
4.9 KiB

/**
* Copyright © 2020-present LiuDanYang. All rights Reserved.
*/
import axios from "./axios"
const event = require('../utils/event')
const util = require('../utils/util')
const app = getApp()
/**
* axios defaults 配置
*/
axios.defaults = {
timeout: 60000
}
/**
* 全局 请求拦截器, 支持添加多个拦截器
* 例如: 配置token、添加一些默认的参数
* `return config` 继续发送请求
*/
axios.interceptors.request.use(
config => {
config.header = {
...config.header,
'X-APP-ID': app.xAppId,
appversion: app.version
}
return config
},
error => {
// 做一些请求错误
console.error(error)
return Promise.reject(error)
}
)
/**
* 全局 响应拦截器, 支持添加多个拦截器
* 例如: 根据状态码选择性拦截、过滤转换数据
* @param {Object} res 请求返回的数据
* @return {Promise<reject>}
*/
axios.interceptors.response.use(
async (res) => {
const { data, statusCode: status } = res
try {
return await handleResponse({ data, status })
} catch (err) {
return Promise.reject(err)
}
},
(err) => {
// 做一些请求错误
return Promise.reject(err)
}
)
/**
* 处理 HTTP 状态码
* @param data {Object} 请求返回的数据
* @param status {String} HTTP状态码
* @returns {Promise<never>|*}
*/
function handleResponse({ data, status }) {
if(!data){
return Promise.reject('服务器错误')
}
const STATUS = {
"200"() {
if (data.code === 0) {
return Promise.resolve(data)
}
if (data.code === 401 && app.globalData.token) {
app.globalData.token = null
app.userInfo = null
wx.removeStorageSync('Authorization')
event.emit('EventMessage', { what: 888, desc: 'Logout' })
let pages = getCurrentPages() //当前页面栈
let prevPage = pages[pages.length - 1] //当前页面
if (prevPage.route != 'pages/login/index') {
wx.showModal({
title: '温馨提示',
content: '登录信息已经过期,请重新登录',
showCancel: false,
success: function (res) {
if (res.confirm) {
wx.reLaunch({ url: '/pages/login/index' })
}
}
})
}
var message = ''
if (data.message) {
message = data.message
}
return Promise.reject(message)
}
var message = '数据错误'
if (data.message) {
message = data.message
}
return Promise.reject(message)
},
"400"() {
return Promise.reject('请求错误')
},
"401"() {
return Promise.reject('请求未授权')
},
"403"() {
return Promise.reject('拒绝请求')
},
"404"() {
return Promise.reject('URL错误')
},
"500"() {
return Promise.reject('服务器错误')
}
}
// 有状态码但不在这个封装的配置里,就直接返回错误
return STATUS[status] ? STATUS[status]() : Promise.reject('请求错误')
}
export default axios
/**
* get 请求方式
* @param url {String} 接口地址
* @param params {Object} 接口参数
* @returns {AxiosPromise}
* @constructor
*/
export function mGet(url, params, config) {
return new Promise((resolve, reject) => {
axios.get(url, params, config).then((res) => {
resolve(res)
}).catch(err => {
reject(err)
})
})
}
/**
* post 请求方式
* @param url {String} 接口地址
* @param data {Object} 接口参数
* @returns {AxiosPromise}
* @constructor
*/
export function mPost(url, data, config) {
return new Promise((resolve, reject) => {
axios.post(url, data, config).then((res) => {
resolve(res)
}).catch((err) => {
reject(err)
})
})
}
/**
* put 请求方式-用于修改全部数据
* @param url {String} 接口地址
* @param data {Object} 接口参数
* @returns {AxiosPromise}
* @constructor
*/
export function mPut(url, data, config) {
return new Promise((resolve, reject) => {
axios.put(url, data, config).then((res) => {
resolve(res)
}).catch((err) => {
reject(err)
})
})
}
/**
* patch 请求方式-用于修改单项或多项数据
* @param url {String} 接口地址
* @param data {Object} 接口参数
* @returns {AxiosPromise}
* @constructor
*/
export function mPatch(url, data, config) {
return new Promise((resolve, reject) => {
axios.patch(url, data, config).then((res) => {
resolve(res)
}).catch((err) => {
reject(err)
})
})
}
/**
* delete 请求方式
* @param url {String} 接口地址
* @param params {Object} 接口参数
* @returns {AxiosPromise}
*/
export function mDelete(url, params, config) {
return new Promise((resolve, reject) => {
axios.delete(url, params, config).then((res) => {
resolve(res)
}).catch((err) => {
reject(err)
})
})
}