zhanghua
6 天以前 396b9a06392db5736eb5a7d485879174d73bb39a
src/utils/request.ts
@@ -1,6 +1,6 @@
import axios, { AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import { useUserStore } from '@/store/modules/user';
import { getToken } from '@/utils/auth';
import { getToken, getPlat } from '@/utils/auth';
import { tansParams, blobValidate } from '@/utils/ruoyi';
import cache from '@/plugins/cache';
import { HttpStatus } from '@/enums/RespEnum';
@@ -11,6 +11,8 @@
import { encryptBase64, encryptWithAes, generateAesKey } from '@/utils/crypto';
import { encrypt } from '@/utils/jsencrypt';
import router from "@/router";
import { ElLoading, ElMessage, ElNotification } from "element-plus";
import { el } from 'element-plus/es/locale';
let downloadLoadingInstance: LoadingInstance;
// 是否显示重新登录
@@ -46,13 +48,14 @@
    }
    // get请求映射params参数
    if (config.method === 'get' && config.params) {
      console.log(config.params, '请求参数');
      let url = config.url + '?' + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put' || config.method === 'get')) {
      const requestObj = {
        url: config.url,
        data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
@@ -65,7 +68,7 @@
        const s_url = sessionObj.url; // 请求地址
        const s_data = sessionObj.data; // 请求数据
        const s_time = sessionObj.time; // 请求时间
        const interval = 500; // 间隔时间(ms),小于此时间视为重复提交
        const interval = 5; // 间隔时间(ms),小于此时间视为重复提交
        if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
          const message = '数据正在处理,请勿重复提交';
          console.warn(`[${s_url}]: ` + message);
@@ -76,7 +79,8 @@
      }
    }
    // 当开启参数加密
    if (isEncrypt && (config.method === 'post' || config.method === 'put')) {
    if (isEncrypt && (config.method === 'post' || config.method === 'put' || config.method === 'get')) {
      console.log('开启了参数加密');
      // 生成一个 AES 密钥
      const aesKey = generateAesKey();
      config.headers['encrypt-key'] = encrypt(encryptBase64(aesKey));
@@ -89,12 +93,12 @@
    return config;
  },
  (error: any) => {
    console.log(error);
    console.log(error, 'wcs');
    return Promise.reject(error);
  }
);
const userStore = useUserStore();
// 响应拦截器
service.interceptors.response.use(
  async (res: AxiosResponse) => {
@@ -107,35 +111,23 @@
      return res.data;
    }
    if (code === 401) {
      const userStore = useUserStore();
      await userStore.logout()
      console.log(code, 'code==============');
      router.push({ path: '/login' });
      // prettier-ignore
      // if (!isRelogin.show) {
      //   // isRelogin.show = true;
      //   isRelogin.show = true;
      //   ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
      //     confirmButtonText: '重新登录',
      //     cancelButtonText: '取消',
      //     type: 'warning'
      //   }).then(() => {
      //     isRelogin.show = false;
      //     useUserStore().logout().then(() => {
      //         location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
      //       });
      //   }).catch(() => {
      //     isRelogin.show = false;
      //   });
      // }
      // return Promise.reject('无效的会话,或者会话已过期,请重新登录。');
      if (getPlat() === 'dingding')
        await router.push({ path: '/login' });
      else
        await router.push({ path: '/rzt_login' });
      return
    } else if (code === HttpStatus.SERVER_ERROR) {
      console.log(msg);
      ElMessage({ message: msg, type: 'error' });
      return Promise.reject(new Error(msg));
      return Promise.reject(new Error('系统内部错误'));
    } else if (code === HttpStatus.WARN) {
      ElMessage({ message: msg, type: 'warning' });
      return Promise.reject(new Error(msg));
      return Promise.reject(new Error('系统警告消息'));
    } else if (code !== HttpStatus.SUCCESS) {
      ElNotification.error({ title: msg });
      return Promise.reject('error');
@@ -161,30 +153,30 @@
  downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
  // prettier-ignore
  return service.post(url, params, {
      transformRequest: [
        (params: any) => {
          return tansParams(params);
        }
      ],
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      responseType: 'blob'
    }).then(async (resp: any) => {
      const isLogin = blobValidate(resp);
      if (isLogin) {
        const blob = new Blob([resp]);
        FileSaver.saveAs(blob, fileName);
      } else {
        const resText = await resp.data.text();
        const rspObj = JSON.parse(resText);
        const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
        ElMessage.error(errMsg);
    transformRequest: [
      (params: any) => {
        return tansParams(params);
      }
      downloadLoadingInstance.close();
    }).catch((r: any) => {
      console.error(r);
      ElMessage.error('下载文件出现错误,请联系管理员!');
      downloadLoadingInstance.close();
    });
    ],
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    responseType: 'blob'
  }).then(async (resp: any) => {
    const isLogin = blobValidate(resp);
    if (isLogin) {
      const blob = new Blob([resp]);
      FileSaver.saveAs(blob, fileName);
    } else {
      const resText = await resp.data.text();
      const rspObj = JSON.parse(resText);
      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
      ElMessage.error(errMsg);
    }
    downloadLoadingInstance.close();
  }).catch((r: any) => {
    console.error(r);
    ElMessage.error('下载文件出现错误,请联系管理员!');
    downloadLoadingInstance.close();
  });
}
// 导出 axios 实例
export default service;