Skip to content

useRequest统一处理http请求 、文件读取、资源下载

上次更新 2024年10月11日星期五 8:56:56 字数 0 字 时长 0 分钟

javascript

import axios from 'axios'
import { ElMessage } from 'element-plus'
// import { useAuthStore } from '@/stores/auth'

export default function useRequest() {
  const request = axios.create({
    baseURL: '/svc'
  })

  request.interceptors.request.use((config) => config)
  request.interceptors.response.use(
    (response) => {
      // 对响应数据做点什么
      if (response.status === 200) {
        if (response.data.success) {
          return response.data
        } else {
          ElMessage.error(response.data.msg)
          console.error(response.data.msg)
          return Promise.reject(response)
        }
      }
      return Promise.reject(response)
    },
    (error) => {
      if (error && error.response && error.response.status === 401) {
        if (
          import.meta.env.MODE === 'development' &&
          import.meta.env.VITE_APP_PERMISSION_ENABLE === 'false'
        ) {
        } else {
          const casLoginUrl = new URL(error.response.data.data)
          window.location.href = `${casLoginUrl.origin + casLoginUrl.pathname}?service=${encodeURIComponent(`${window.origin}/svc/sys/redirect?url=${encodeURIComponent(window.location.origin)}`)}`
        }
      } else {
        ElMessage.error('后台服务异常,请稍后再试')
      }
      return Promise.reject(error)
    }
  )

  /**
   * @description: 用于下载文件
   * @param {String} url
   * @param {*} title
   * @return {*}
   */
  function download(url, title = '文件名字') {
    const a = document.createElement('a')
    a.href = url // 下载地址
    a.download = title // 所下载文件名字
    document.body.appendChild(a)
    a.style.display = 'none'
    a.click()
    document.body.removeChild(a)
  }

  /**
   * @description: 读取文件内容
   * @param {*} path
   * @return {*}
   */
  async function readFile(path) {
    try {
      const { data } = await axios.get(path)
      return data
    } catch (error) {
      console.warn(error)
      ElMessage.error(error.message)
    }
  }

  return { request, download, readFile }
}