From 12e3bf620b7f47c4ca94ade78aa36462b2575822 Mon Sep 17 00:00:00 2001 From: xieyonghong <18010623010@163.com> Date: Fri, 24 Mar 2023 15:52:37 +0800 Subject: [PATCH] fix: bug#10667 --- src/utils/request.ts | 249 +++++++++++++++++++++---------------------- 1 file changed, 124 insertions(+), 125 deletions(-) diff --git a/src/utils/request.ts b/src/utils/request.ts index b9861801..f75a739d 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,22 +1,22 @@ import axios from 'axios' -import {BASE_API_PATH, TOKEN_KEY} from '@/utils/variable' -import { notification as Notification } from 'ant-design-vue' +import { BASE_API_PATH, TOKEN_KEY } from '@/utils/variable' +import { notification as Notification } from 'ant-design-vue' import router from '@/router' import { LoginPath } from '@/router/menu' -import {LocalStore} from "@/utils/comm"; +import { cleanToken, getToken, LocalStore } from '@/utils/comm' import type { AxiosInstance, AxiosResponse } from 'axios' interface AxiosResponseRewrite extends AxiosResponse { - result: T - success: boolean + result: T + success: boolean } export const SUCCESS_CODE = 200 // 成功代码 export const request = axios.create({ - withCredentials: false, - baseURL: BASE_API_PATH, - timeout: 1000 * 60 * 5 + withCredentials: false, + baseURL: BASE_API_PATH, + timeout: 1000 * 60 * 5 }) /** @@ -30,15 +30,15 @@ export const request = axios.create({ } * @returns {AxiosInstance} */ -export const post = function(url: string, data = {}, params = {}, ext={}) { - ext = typeof ext === 'string' ? { responseType: ext } : ext - return request>({ - ...ext, - params, - method: 'POST', - url, - data - }) +export const post = function (url: string, data = {}, params = {}, ext = {}) { + ext = typeof ext === 'string' ? { responseType: ext } : ext + return request>({ + ...ext, + params, + method: 'POST', + url, + data + }) } /** @@ -47,12 +47,12 @@ export const post = function(url: string, data = {}, params = {}, ext={}) { * @param {Object} [data] * @returns {AxiosInstance} */ -export const put = function(url: string, data = {},) { - return request>({ - method: 'PUT', - url, - data - }) +export const put = function (url: string, data = {}) { + return request>({ + method: 'PUT', + url, + data + }) } /** @@ -61,12 +61,12 @@ export const put = function(url: string, data = {},) { * @param {Object} [data] * @returns {AxiosInstance} */ -export const patch = function(url: string, data = {}) { - return request>({ - method: 'PATCH', - url, - data - }) +export const patch = function (url: string, data = {}) { + return request>({ + method: 'PATCH', + url, + data + }) } /** * GET method request @@ -75,13 +75,13 @@ export const patch = function(url: string, data = {}) { * @param {Object} [ext] 扩展参数 * @returns {AxiosInstance} */ -export const get = function(url: string, params = {}, ext?: any) { - return request>({ - method: 'GET', - url, - params, - ...ext - }) +export const get = function (url: string, params = {}, ext?: any) { + return request>({ + method: 'GET', + url, + params, + ...ext + }) } /** @@ -91,13 +91,13 @@ export const get = function(url: string, params = {}, ext?: any) { * @param {Object} [ext] 扩展参数 * @returns {AxiosInstance} */ -export const remove = function(url: string, params = {}, ext?: any) { - return request>({ - method: 'DELETE', - url, - params, - ...ext - }) +export const remove = function (url: string, params = {}, ext?: any) { + return request>({ + method: 'DELETE', + url, + params, + ...ext + }) } /** @@ -107,25 +107,25 @@ export const remove = function(url: string, params = {}, ext?: any) { * @return {*} */ export const getStream = function(url: string, params = {}) { - return get(url, params, { - responseType: 'arraybuffer' // 设置请求数据类型,返回blob可解析类型 - }) + return get(url, params, { + responseType: 'arraybuffer' // 设置请求数据类型,返回blob可解析类型 + }) } -export const postStream = function(url: string, data={}, params = {}) { - return post(url, data, params, { - responseType: 'arraybuffer' // 设置请求数据类型,返回blob可解析类型 - }) +export const postStream = function(url: string, data = {}, params = {}) { + return post(url, data, params, { + responseType: 'arraybuffer' // 设置请求数据类型,返回blob可解析类型 + }) } -const showNotification = ( message: string, description: string, key?: string, show: boolean = true ) => { - if (show) { - Notification.error({ - key, - message, - description - }) - } +const showNotification = (message: string, description: string, key?: string, show: boolean = true) => { + if (show) { + Notification.error({ + key, + message, + description + }) + } } /** @@ -134,87 +134,86 @@ const showNotification = ( message: string, description: string, key?: string, s * @returns {Promise} */ const errorHandler = (error: any) => { - if (error.response) { - const data = error.response.data - const status = error.response.status - if (status === 403) { - showNotification( 'Forbidden', (data.message + '').substr(0, 90), '403') - } else if (status === 500) { - showNotification( 'Server Side Error', (data.message + '').substr(0, 90), '500') - } else if (status === 400) { - showNotification( 'Request Error', (data.message + '').substr(0, 90), '400') - } else if (status === 401) { - showNotification( 'Unauthorized', '用户未登录', '401') - console.log('showNotification') - setTimeout(() => { - location.href = `/#${LoginPath}` - }, 0) - } - } else if (error.response === undefined) { - showNotification( error.message, (error.stack + '').substr(0, 90), undefined) + if (error.response) { + const data = error.response.data + const status = error.response.status + if (status === 403) { + showNotification('Forbidden', (data.message + '').substr(0, 90), '403') + } else if (status === 500) { + showNotification('Server Side Error', (data.message + '').substr(0, 90), '500') + } else if (status === 400) { + showNotification('Request Error', (data.message + '').substr(0, 90), '400') + } else if (status === 401) { + showNotification('Unauthorized', '用户未登录', '401') + setTimeout(() => { + cleanToken() + router.replace({ + path: LoginPath + }) + }, 0) } - return Promise.reject(error) + } else if (error.response === undefined) { + showNotification(error.message, (error.stack + '').substr(0, 90), undefined) + } + return Promise.reject(error) } // request interceptor request.interceptors.request.use(config => { - // 如果 token 存在 - // 让每个请求携带自定义 token 请根据实际情况自行修改 - const token = LocalStore.get(TOKEN_KEY) - // const token = store.$state.tokenAlias - if (!token) { - // setTimeout(() => { - // router.replace({ - // path: LoginPath - // }) - // }, 0) - setTimeout(() => { - location.href = `/#${LoginPath}` - }, 0) - return config - } - - config.headers![TOKEN_KEY] = token - + // 如果 token 存在 + // 让每个请求携带自定义 token 请根据实际情况自行修改 + const token = getToken() + if (!token) { + setTimeout(() => { + cleanToken() + router.replace({ + path: LoginPath + }) + }, 0) return config + } + + config.headers![TOKEN_KEY] = token + + return config }, errorHandler) /** * response interceptor */ request.interceptors.response.use(response => { - if (response.data instanceof ArrayBuffer) { - return response - } else { - const { status, message } = response.data - // 增加业务接口处理成功判断方式,只需要判断返回参数包含:success为true - if (typeof response.data === 'object' && typeof response.data.success === 'undefined') { - response.data.success = status === SUCCESS_CODE - } - - // 统一显示异常业务信息 - if (status !== SUCCESS_CODE && message) { - Notification.error({ - message: 'Server Errors: ' + status, - description: message - }) - } - // 如果返回的的是文件流,那么return值则为response - if (response.headers['content-type'] === 'application/octet-stream; charset=UTF-8' || response.headers['content-type'] === 'application/vnd.ms-excel;charset=UTF-8') { - return response.data - } else { - return response.data - } + if (response.data instanceof ArrayBuffer) { + return response + } else { + const { status, message } = response.data + // 增加业务接口处理成功判断方式,只需要判断返回参数包含:success为true + if (typeof response.data === 'object' && typeof response.data.success === 'undefined') { + response.data.success = status === SUCCESS_CODE } + + // 统一显示异常业务信息 + if (status !== SUCCESS_CODE && message) { + Notification.error({ + message: 'Server Errors: ' + status, + description: message + }) + } + // 如果返回的的是文件流,那么return值则为response + if (response.headers['content-type'] === 'application/octet-stream; charset=UTF-8' || response.headers['content-type'] === 'application/vnd.ms-excel;charset=UTF-8') { + return response.data + } else { + return response.data + } + } }, errorHandler) export default { - request: axios, - post, - get, - patch, - put, - remove, - getStream, - postStream + request: axios, + post, + get, + patch, + put, + remove, + getStream, + postStream } \ No newline at end of file