useRequest
统一处理http请求 、文件读取、资源下载
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 }
}