Zlpt_Portal/src/http/index.ts

208 lines
5.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//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)
})
})
}