208 lines
5.9 KiB
TypeScript
208 lines
5.9 KiB
TypeScript
//http.ts
|
||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||
import axios from 'axios'
|
||
import NProgress from 'nprogress'
|
||
// import { mainStore } from 'store/main'
|
||
import { ElMessage } from "element-plus";
|
||
import { saveAs } from 'file-saver'
|
||
import router from "@/router"
|
||
// const store = mainStore()
|
||
|
||
// const CancelToken = axios.CancelToken
|
||
// const source = CancelToken.source()
|
||
const baseUrl = import.meta.env.VITE_API_URL
|
||
const VITE_token = import.meta.env.VITE_token
|
||
const VITE_LocalFlag = import.meta.env.VITE_LocalFlag
|
||
|
||
const VITE_ENV = import.meta.env.VITE_ENV
|
||
|
||
const service = axios.create({
|
||
baseURL: baseUrl,
|
||
timeout: 60000
|
||
})
|
||
|
||
|
||
service.interceptors.request.use(
|
||
(config) => {
|
||
config.headers['Authorization'] = localStorage.getItem('tokenNew')
|
||
return config
|
||
},
|
||
(error) => {
|
||
return error
|
||
}
|
||
)
|
||
// 响应拦截
|
||
service.interceptors.response.use(
|
||
(res) => {
|
||
ElMessage.closeAll()
|
||
const { data } = res
|
||
if (data.code == '200') {
|
||
return data
|
||
} else if (data.code == '403') {
|
||
ElMessage.error('请重新登录')
|
||
router.push('/login')
|
||
} else if (data.code == '401') {
|
||
ElMessage.error(data.msg)
|
||
router.push('/login')
|
||
} else if (data.code == '500') {
|
||
ElMessage({
|
||
type: 'error',
|
||
message: data.msg,
|
||
duration: 1000,
|
||
})
|
||
}
|
||
else {
|
||
return data
|
||
}
|
||
},
|
||
(error) => {
|
||
// ElMessage.error('请求失败')
|
||
// console.log('error-异常', error)
|
||
}
|
||
)
|
||
|
||
export function get(url: string, params: any) {
|
||
return new Promise((resolve, reject) => {
|
||
// NProgress.start()
|
||
service
|
||
.get(url, { params })
|
||
.then((res: any) => {
|
||
NProgress.done()
|
||
if (res.code == '200') {
|
||
resolve(res)
|
||
} else {
|
||
reject(res)
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
// NProgress.done()
|
||
reject(err.data)
|
||
})
|
||
})
|
||
}
|
||
export function post(url: string, params: any) {
|
||
return new Promise((resolve, reject) => {
|
||
// NProgress.start()
|
||
service
|
||
.post(url, params, {
|
||
headers: { 'Content-Type': 'application/json; charset=utf-8' }
|
||
})
|
||
.then((res: any) => {
|
||
NProgress.done()
|
||
if (res.code == '200') {
|
||
resolve(res)
|
||
} else {
|
||
reject(res)
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
// NProgress.done()
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
export function upload(url: string, params: any) {
|
||
const formData = new FormData()
|
||
for (const key in params) {
|
||
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
||
formData.append(key, params[key])
|
||
}
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
NProgress.start()
|
||
service
|
||
.post(url, formData, {
|
||
headers: { 'Content-Type': 'multipart/form-data' }
|
||
})
|
||
.then((res: any) => {
|
||
NProgress.done()
|
||
if (res.code == '200') {
|
||
resolve(res)
|
||
} else {
|
||
reject(res)
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
NProgress.done()
|
||
reject(err.data)
|
||
})
|
||
})
|
||
}
|
||
export function download(url: string, params: any, fileName: string = 'downloaded_file') {
|
||
return new Promise((resolve, reject) => {
|
||
NProgress.start(); // 开始进度条
|
||
|
||
service
|
||
.post(url, params, {
|
||
headers: {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
},
|
||
responseType: 'blob' // 请求返回数据类型为 Blob(二进制流)
|
||
})
|
||
.then((res: any) => {
|
||
NProgress.done(); // 结束进度条
|
||
|
||
// 判断返回的内容类型是否是 Blob
|
||
const contentType = res.headers['content-type'] || '';
|
||
if (!contentType.includes('application/octet-stream') && !contentType.includes('application/pdf')) {
|
||
reject('文件类型不正确');
|
||
return;
|
||
}
|
||
|
||
// 处理文件下载
|
||
const blob = new Blob([res.data], { type: contentType });
|
||
|
||
// 使用 file-saver 保存文件
|
||
saveAs(blob, fileName);
|
||
|
||
resolve('文件下载成功');
|
||
})
|
||
.catch((err) => {
|
||
NProgress.done(); // 结束进度条
|
||
reject(err?.data || '下载失败');
|
||
});
|
||
});
|
||
}
|
||
|
||
export function put(url: string, params: any) {
|
||
return new Promise((resolve, reject) => {
|
||
NProgress.start()
|
||
service
|
||
.put(url, params, {
|
||
headers: { 'Content-Type': 'application/json; charset=utf-8' }
|
||
})
|
||
.then((res: any) => {
|
||
NProgress.done()
|
||
if (res.code == '200') {
|
||
resolve(res)
|
||
} else {
|
||
reject(res)
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
NProgress.done()
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
|
||
export function detele(url: string, params: any) {
|
||
return new Promise((resolve, reject) => {
|
||
NProgress.start()
|
||
service
|
||
.delete(url, { params })
|
||
.then((res: any) => {
|
||
NProgress.done()
|
||
if (res.code == '200') {
|
||
resolve(res)
|
||
} else {
|
||
reject(res)
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
NProgress.done()
|
||
reject(err.data)
|
||
})
|
||
})
|
||
}
|