request.ts 4.19 KB
import axios from 'axios'
import router from './../router/index';
import {loginMain} from './../store/index'
import {storeToRefs} from "pinia";

let loginAct = loginMain()
let {getStoreToken} = storeToRefs(loginAct)

import {setToken, getToken, removeToken} from '../utils/auth'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',// 所有的请求地址前缀部分(没有后端请求不用写)
  timeout: 120000, // 请求超时时间(毫秒)
  withCredentials: true,// 异步请求携带cookie
  // headers: {
  // 设置后端需要的传参类型
  // 'Content-Type': 'application/json',
  // 'token': x-auth-token',//一开始就要token
  // 'X-Requested-With': 'XMLHttpRequest',
  // },
})

// request拦截器
request.interceptors.request.use((config: object) => {
    // 如果你要去localStor获取token
    // let token = localStorage.getItem("x-auth-token");
    if (getToken()) {
      //添加请求头
      config.headers["authorization"] = getToken()
    }
    return config
  },
  (error: any) => {
    // 对请求错误做些什么
    Promise.reject(error)
  }
)

// response 拦截器
request.interceptors.response.use((response: any) => {
    // 对响应数据做点什么
    if (response.status === 200) {
      const code = response.data && response.data.code;
      const msg = response.data ? response.data.msg : '系统错误';
      if (code === 200) {
        // success
        console.log(response.data)
        return response.data
      } else if (code === 4001 || code === 4002) {
        // notoken error
        loginAct.removeUserInfo()
        router.push("/login")
        return Promise.reject(new Error(msg))
      } else if (code === 5000 || code === 6000 || code === 500) {
        // error
        ElMessage.error(msg)
        return Promise.reject(new Error(msg))
      } else if (code === 2010) {

      } else if (code === 4003 || code === 3001) {
        return response.data
      } else {
        // filter ajaxUrl
        if (response.config.url.indexOf("reportDownload") === 0 && response.config.url.indexOf("downExcel") === 0) {
          ElMessage.error(msg)
          return Promise.reject(new Error(msg))
        } else {
          return response
        }
      }
    } else {
      ElMessage.error('请求超时请稍后重试')
    }
  }, (error: any) => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)
export function downloadFilePost(url: string, params: any) {
  return request.post(url, params, {
    responseType: 'blob',
    timeout: 5*60*1000
  }).then((res: any) => {
    const temp =res.headers["content-disposition"].split(";")[1].split("filename=")[1];
    const fileName = decodeURIComponent(temp)
    const blob = new Blob([res.data])
    if ('download' in document.createElement('a')) {
      const eLink = document.createElement('a')
      eLink.download = fileName
      eLink.style.display = 'none'
      eLink.href = URL.createObjectURL(blob)
      document.body.appendChild(eLink)
      eLink.click()
      URL.revokeObjectURL(eLink.href)
      document.body.removeChild(eLink)
    } else {
      navigator.msSaveBlob(blob, fileName)
    }
  }).catch((r) => {
    console.error(r)
  })
}
export function downloadFileGet(url: string) {
  return request.get(url, {
    responseType: 'blob'
  }).then((res: any) => {
    const temp =res.headers["content-disposition"].split(";")[1].split("filename=")[1];
    const fileName = decodeURIComponent(temp)
    const blob = new Blob([res.data])
    if ('download' in document.createElement('a')) {
      const eLink = document.createElement('a')
      eLink.download = fileName
      eLink.style.display = 'none'
      eLink.href = URL.createObjectURL(blob)
      document.body.appendChild(eLink)
      eLink.click()
      URL.revokeObjectURL(eLink.href)
      document.body.removeChild(eLink)
    } else {
      navigator.msSaveBlob(blob, fileName)
    }

    /*let url = window.URL.createObjectURL(new Blob([data]));
    let link = document.createElement("a");
    link.href = url;
    link.download = "11.xlxs";
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link); // 释放掉blob对象*/
  }).catch((res: any) => {
    console.error(res)
  })
}

export default request