| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import axios from 'axios'
- import { deleteToken, getToken } from '@/utils/auth'
- import qs from 'qs'
- import router from '@/router'
- import { blobToJson } from '@/utils'
- const service = axios.create({
- baseURL: process.env.VUE_APP_BASE_API,
- timeout: 120000 // request timeout
- })
- // request interceptor
- // 发送请求拦截器
- service.interceptors.request.use(
- config => {
- const token = getToken()
- if (token) config.headers.Authorization = `Bearer ${token}`
- return config
- },
- error => {
- return Promise.reject(error)
- }
- )
- // response interceptor
- // 请求返回之后的拦截器
- service.interceptors.response.use(
- async response => {
- const res = response.data
- if (response.request.responseType === 'blob') {
- // 返回的文件流当报错时转化成json
- if (response.headers['content-type'] === 'application/json') {
- try {
- const result = await blobToJson(res)
- return Promise.reject(result.msg)
- } catch (error) {
- return Promise.reject(error)
- }
- }
- const name = response.headers['content-disposition']
- return {
- data: res,
- name: name ? decodeURI(name.replace('attachment;filename=', '')) : '未命名'
- }
- }
- // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
- if ([50008, 50012, 50014, 402000, 401].includes(res.code)) {
- deleteToken()
- const redirect = router.currentRoute.fullPath
- router.push({ path: '/login-local', query: { redirect } })
- return Promise.reject(res.message)
- }
- // 登录验证码过期
- if (res.code === 60902) {
- return Promise.reject(res)
- }
- if (res.code !== 200) {
- if (res.data && Object.keys(res.data)?.length) {
- return Promise.reject(res)
- }
- return Promise.reject(res.message)
- }
- return res
- },
- error => {
- if (error.response && error.response.status === 401) {
- deleteToken()
- const redirect = router.currentRoute.fullPath
- if (router.currentRoute.path !== '/login-local') {
- router.push({ path: '/login-local', query: { redirect } })
- }
- }
- return Promise.reject(error.message || error)
- }
- )
- // 请求方法
- const http = {
- post (url, params, config = {}) {
- return service.post(url, params, {
- transformRequest: [(params) => {
- return JSON.stringify(params)
- }],
- headers: {
- 'Content-Type': 'application/json'
- },
- ...config
- })
- },
- get (url, params) {
- return service.get(url, {
- params: params,
- paramsSerializer: (params) => {
- return qs.stringify(params)
- }
- })
- },
- put (url, params) {
- return service.put(url, {
- ...params
- })
- },
- del (url, params) {
- return service.delete(url, {
- params: params
- })
- },
- formData (url, params) {
- return service.post(url, params, {
- timeout: 600000,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- })
- },
- upload (url, params) {
- return service.post(url, params, {
- timeout: 600000,
- headers: {
- 'Content-Type': 'multipart/form-data'
- }
- })
- },
- download (url, params) {
- return service.post(url, params, {
- timeout: 10000,
- headers: {
- 'Content-Type': 'application/json'
- },
- responseType: 'blob'
- })
- },
- getDownload (url, params) {
- return service.get(url, {
- params,
- timeout: 10000,
- responseType: 'blob'
- })
- }
- }
- export default http
|