import { IHttpResponse, IObject } from '@/types/interface' import router from "@/router"; // import { useRouter, useRoute } from 'vue-router' import axios, { AxiosRequestConfig } from 'axios' import qs from 'qs' import { getToken } from './cache' import { getValueByKeys } from './utils' import { ElMessage } from 'element-plus' import { SM4Util } from '@/utils/sm4' import { sm4Key } from '@/utils/utils' import BaseService from '@/utils/baseService' import { setCache } from '@/utils/cache' // const router = useRouter() const sm4 = new SM4Util() let baseURL = '' console.log(import.meta.env) if (import.meta.env.MODE === 'production') { // 生产环境逻辑 console.log('这是生产环境') baseURL = import.meta.env.VITE_APP_BASE_URL_N } else { // 开发环境逻辑 console.log('这是开发环境') } const httpN = axios.create({ baseURL, timeout: 10 * 1000, }) httpN.interceptors.request.use( function (config: any) { config.headers['X-Requested-With'] = 'XMLHttpRequest' config.headers['Request-Start'] = new Date().getTime() const token = getToken() if (token) { config.headers['Access-Token'] = token } if (config.method?.toUpperCase() === 'GET') { config.params = { ...config.params, _t: new Date().getTime() } } if ( Object.values(config.headers).includes( 'application/x-www-form-urlencoded' ) ) { config.data = qs.stringify(config.data) } return config }, function (error) { return Promise.reject(error) } ) httpN.interceptors.response.use( (response) => { if (response.data.code === 401002) { // redirectLogin() // // 刷新token // BaseService.post('/iaw/portal/phoneLogin', {}).then((res: any) => { // if (res && res.code === 0) { // setCache('refreshCacheAccessToken', res.data, false) // ElMessage.warning('token更新,请重试!') // } else { // ElMessage.error(response.data.message) // redirectLogin() // } // return // }) } else if (response.data.code === 401001) { redirectLogin() } else if ( response.data.code === 403003 || response.data.code === 403001 || response.data.code === 403004 ) { ElMessage.error(response.data.message) } return response }, (error) => { const status = getValueByKeys(error, 'response.status', 500) const httpCodeLabel: IObject = { 400: '请求参数错误', 401: '未授权,请登录', 403: '拒绝访问', 404: `请求地址出错: ${getValueByKeys(error, 'response.config.url', '')}`, 408: '请求超时', 500: 'API接口报500错误', 501: '服务未实现', 502: '网关错误', 503: '服务不可用', 504: '网关超时', 505: 'HTTP版本不受支持', } if (error && error.response) { console.error('请求错误', error.response.data) } if (status === 401) { redirectLogin() } return Promise.reject(new Error(httpCodeLabel[status] || '接口错误')) } ) const redirectLogin = () => { console.log('redirectLogin'); router.push('/login') return } export default (o: AxiosRequestConfig): Promise => { return new Promise((resolve, reject) => { httpN(o) .then((res: any) => { //登录失效 // if(res.data && res.data.statusCode === 401){ // router.push("/login"); // ElMessage.error("登录失效,请重新登录!") // return; // } else if (res.data) { // //解密 // if(res?.data && res.data.statusCode === 0 && res.data.bizContent && (import.meta.env.VITE_APP_BASE_URL.includes('https://qtzl.etcjz.cn') || import.meta.env.VITE_APP_BASE_URL.includes('http://100.65.11.2'))) { // res.data.bizContent = sm4.decryptData_CBC(res.data.bizContent, sm4Key); // if(res && res.data) { // return resolve(res.data); // } else { // ElMessage.error("接口返回解密数据,解密失败!") // } // } else { // return resolve(res.data); // } res.data.statusCode = res.data.code return resolve(res.data) // } }) .catch(reject) }) }