123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import axios from '@/utils/request/axios'
- import qs from 'qs'
- import { storage } from '@/utils'
- import { ubmsConfig } from './config'
- import { PendingManager } from './pendingManager'
- const pendingManager = new PendingManager()
- /**
- * 创建 axios 实例
- */
- const instance = axios.create({
- baseURL: ubmsConfig.baseURL,
- timeout: 5000,
- })
- /**
- * 请求拦截器
- */
- instance.interceptors.request.use((request) => {
- const accessToken = storage.get(`${ubmsConfig.storagePrefixKey}accessToken`, '')
- request.headers.deviceid = 'unknown'
- request.headers.Authorization = `Bearer ${accessToken}`
- return request
- })
- /**
- * 响应拦截器
- */
- instance.interceptors.response.use(
- (response) => {
- if (Number(response.status) === 200) {
- const result = response.data
- result.msg = result.message // message
- if (Number(result.code) === 0) {
- return result
- } else {
- uni.showToast({
- icon: 'none',
- title: `${result.msg || result.code || 'Result Error'}`,
- duration: 3 * 1000,
- })
- return Promise.reject(result)
- }
- } else {
- httpErrorHandle(response)
- return Promise.reject(response)
- }
- },
- async (error) => {
- if (error.response.status === 410) {
- if (!pendingManager.isRefreshing) {
- pendingManager.isRefreshing = true
- await refreshAccessToken()
- pendingManager.isRefreshing = false
- pendingManager.removeAllPending()
- return instance(error.config)
- }
- return new Promise((resolve) => {
- pendingManager.addPending(() => {
- resolve(instance(error.config))
- })
- })
- } else {
- httpErrorHandle(error)
- }
- return Promise.reject(error)
- },
- )
- /**
- * HTTP 错误
- */
- export function httpErrorHandle(error) {
- // console.log('[httpErrorHandle]', error)
- let msg = ''
- if (error.response && error.response.data) {
- const { code, message: msg } = error.response.data
- uni.showToast({
- icon: 'none',
- title: msg || code,
- duration: 3 * 1000,
- })
- return
- }
- if (msg) {
- uni.showToast({
- icon: 'none',
- title: '当前网络不可用,请检查你的网络设置',
- duration: 3 * 1000,
- })
- }
- }
- /**
- * 刷新AccessToken,通过登录接口
- */
- async function refreshAccessToken() {
- try {
- const params = {
- username: ubmsConfig.username,
- password: ubmsConfig.password,
- }
- const response = await axios({
- url: `${ubmsConfig.baseURL}/ubms-foreign/authorize/login`,
- method: 'post',
- data: qs.stringify(params),
- headers: {
- deviceid: 'unknown',
- Authorization: ubmsConfig.authorization,
- },
- })
- const data = response.data
- const { access_token } = data
- storage.set(`${ubmsConfig.storagePrefixKey}accessToken`, access_token)
- return data
- } catch (error) {
- console.error('Failed to refresh access token:', error)
- throw error
- }
- }
- export default instance
|