import axios from "axios"; import type { AxiosRequestConfig, AxiosResponse } from "axios"; import { StorageEnum, RequestEnum } from "@/enums"; import { getLocalStorage,getToken } from "@/utils"; import UtilVar from "../config/UtilVar"; let baseUrl = window.baseURL; const CancelToken = axios.CancelToken; export { baseUrl }; // axios.defaults.withCredentials = true; // 添加请求拦截器 axios.interceptors.request.use( function (config: AxiosRequestConfig): any { // 在发送请求之前做些什么 传token // let token: any = getLocalStorage(StorageEnum.GB_TOKEN_STORE); let token: any = getToken() || 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA4ZGI3NTE5LTMxOGUtNDE0My04MDhjLWVmYTI3YmZkZWUyOCIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlRlYWNoZXIiLCJ1c2VyaW5mbyI6IntcIklkXCI6XCIwOGRiNzUxOS0zMThlLTQxNDMtODA4Yy1lZmEyN2JmZGVlMjhcIixcIk5hbWVcIjpcImFkbWluXCIsXCJQd2RcIjpcIlwiLFwiUGhvbmVOdW1iZXJcIjpcIjE1OTcyMTc4NDQ1XCIsXCJQZXJzb25uZWxUeXBlXCI6MSxcIlVzZXJUeXBlXCI6MCxcIlJlcG9ydGluZ1Byb2Nlc3NcIjowLFwiSGVhZFNjdWxwdHVyZVVybFwiOm51bGwsXCJTZXhcIjowLFwiVGVhY2hlckNsYXNzSWRzXCI6bnVsbCxcIklzU3VydmV5XCI6ZmFsc2UsXCJTdHVkZW50SWRcIjpcIlwiLFwiV2VsY29tZVllYXJcIjowLFwiSURDYXJkXCI6bnVsbCxcIkV4YW1pbmVlTnVtYmVyXCI6bnVsbCxcIk5vdGlmaWNhdGlvbk51bWJlclwiOm51bGwsXCJFZHVjYXRpb25hbExldmVsXCI6MCxcIlBob3RvUmV2aWV3U3RhdGVcIjowLFwiQ29sbGVnZU5hbWVcIjpudWxsLFwiRW5kVGltZVwiOlwiMDAwMS0wMS0wMVQwMDowMDowMFwiLFwiQWxsRGF0YVBlcm1pc3Npb25cIjowLFwiUm9sZXNcIjpudWxsLFwiUmV2aWV3ZWRTdGF0ZVwiOm51bGx9IiwibmJmIjoxNzE3MDMwNTkyLCJleHAiOjE3MTcwMzQxOTIsImlzcyI6InprSXNzdWVyIUAjJCVeJioiLCJhdWQiOiJ6a0F1ZGllbmNlIUAjJCVeJioifQ.AyTB_XsJbLCh9u3vOgbQknWCr1suOJj62LtbcRZdAUI'; if (token) { // @ts-ignore // config.headers.common[RequestEnum.GB_TOKEN_KEY] = token; config.headers['Authorization'] = token } // @ts-ignore config.headers["Content-Type"] = "application/json;charset=utf-8"; return config; }, function (error: any) { // 对请求错误做些什么 console.log(error); return Promise.reject(error); } ); export type Params = { [key: string]: string | number }; export type FileConfig = { setCancel?: Function; onProgress?: Function; [key: string]: any; }; /** * @响应拦截 */ axios.interceptors.response.use( (response: AxiosResponse) => { // console.log("response", response); if (response.status !== 200) { return Promise.reject(response); } /** * @code 登录过期 token验证失败 根据后端调-----放错地方了? */ /* if (response.data.code == UtilVar.code) { // router.push("/login") window.location.href = 'http://nclg.yx.zheke.com/#/login'; return Promise.resolve(response); } */ return Promise.resolve(response); }, (error: any) => { console.log("error", error); /** * @code 登录过期 token验证失败 根据后端调 */ if (error.response.status == UtilVar.code) { // router.push("/login") // 目前放测试地址 发布后放到正是地址---待修改 // window.location.href = 'http://nclg.yx.zheke.com/#/login'; window.location.href = window.location.origin + '/#/login'; return Promise.resolve(response); } let err = { success: false, msg: "未知异常,请联系管理员!", code: 400, }; if (JSON.stringify(error).indexOf("Network Error") != -1) { err.msg = "网络错误或服务错误!"; } if (error.message == "canceled") { err.msg = "取消请求"; err.code = 488; } // console.log(err); return Promise.reject(err); } ); //判断是否是加密参数,是的话处理 let isEncryptionParam = (params: Params) => { return params; }; /** * @description: get 请求方法 * @param {string} url 请求地址 * @param {Params} params 请求参数 * @return {*} */ export const GET = async (url: string, params: Params): Promise => { try { params = isEncryptionParam(params); const data = await axios.get(`${baseUrl}${url}`, { params: params, }); return data.data; } catch (error: any) { return Promise.reject(error.msg); } }; /** * @description: post请求方法 * @param {any} url * @param {any} params * @return {any} */ export const POST = async (url: string, params: Params): Promise => { try { params = isEncryptionParam(params); const data = await axios.post(`${baseUrl}${url}`, params); return data.data; } catch (error) { return Promise.reject(error); } }; /** * @description: 没有基地址 访问根目录下文件 * @param {string} url * @param {Params} params * @return {*} */ export const GETNOBASE = async (url: string, params?: Params): Promise => { try { const data = await axios.get(url, { params: params, }); return data.data; } catch (error) { return Promise.reject(error); } }; // 定义文件类型提交方法 interface fileconfigs { [headers: string]: { "Content-Type": string; }; } let configs: fileconfigs = { headers: { "Content-Type": "multipart/form-data" }, }; /** * @description: @文件类型提交方法 * @param {string} url * @param {Params} params * @param {FileConfig} config * @return {*} */ export const FILEPOST = async (url: string, params: Params, config: FileConfig = {}): Promise => { try { const data = await axios.post(`${baseUrl}${url}`, params, { ...configs, cancelToken: new CancelToken(function executor(c: any) { config.setCancel && config.setCancel(c); }), // 上传进度 onUploadProgress: (e: any) => { if (e.total > 0) { e.percent = (e.loaded / e.total) * 100; } config.onProgress && config.onProgress(e); }, }); return data; } catch (error) { return Promise.reject(error); } }; /** * 下载文档流 * @param {config.responseType} 下载文件流根据后端 配置 arraybuffer || blod */ export const FILE = async (config: FileConfig = {}) => { try { const data = await axios({ method: config.method || "get", url: `${baseUrl}${config.url}`, data: config.body || {}, params: config.param || {}, responseType: config.responseType || "blod", onDownloadProgress: (e: any) => { // console.log(e,e.currentTarget) // if (e.currentTarget.response.size > 0) { // e.percent = e.loaded / e.currentTarget.response.size * 100; // } // event.srcElement.getResponseHeader('content-length') config.onProgress && config.onProgress(e); }, }); return data; } catch (error) { return Promise.reject(error); } }; export const PUT = async (url: string, params: Params) => { try { params = isEncryptionParam(params); const data = await axios.put(`${baseUrl}${url}`, params); return data.data; } catch (error) { return Promise.reject(error); } }; export const DELETE = async (url: string, params: Params) => { // console.log(params) try { params = isEncryptionParam(params); const data = await axios.delete(`${baseUrl}${url}`, { data: params }); return data.data; } catch (error) { return Promise.reject(error); } }; // switch (error.response?.status) { // case 400: // error.message = '请求错误(400)'; // break; // case 401: // error.message = '未授权(401)'; // break; // case 403: // error.message = '拒绝访问(403)'; // break; // case 404: // error.message = '请求出错(404)'; // break; // case 408: // error.message = '请求超时(408)'; // break; // case 500: // error.message = '服务器错误(500)'; // break; // case 501: // error.message = '服务未实现(501)'; // break; // case 502: // error.message = '网络错误(502)'; // break; // case 503: // error.message = '服务不可用(503)'; // break; // case 504: // error.message = '网络超时(504)'; // break; // case 505: // error.message = 'HTTP版本不受支持(505)'; // break; // default: // error.message = `连接出错(${error.response?.status})!`; // }