通常项目中会创建一个Axios实例并设置默认超时(如30秒):

// utils/request.js

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 默认30秒超时

timeout: 30000
})

 导出excel动作

    /** 导出按钮操作 */
    handleExport() {
      this.download('mes/rpDaily/export', {
        ...this.queryParams
      }, `rpDaily_${new Date().getTime()}.xlsx`)
    }

import {download} from '@/utils/request'

// 全局方法挂载
Vue.prototype.download = download

// 通用下载方法
export function download(url, params, filename) {
  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
  return service.post(url, params, {
    transformRequest: [(params) => { return tansParams(params) }],
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    responseType: 'blob'
  }).then(async (data) => {
    const isLogin = await blobValidate(data);
    if (isLogin) {
      const blob = new Blob([data])
      saveAs(blob, filename)
    } else {
      const resText = await data.text();
      const rspObj = JSON.parse(resText);
      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
      Message.error(errMsg);
    }
    downloadLoadingInstance.close();
  }).catch((r) => {
    console.error(r)
    Message.error('下载文件出现错误,请联系管理员!')
    downloadLoadingInstance.close();
  })
}

 

// 在导出功能的具体位置调用
export function exportData(params) {
  return instance.post('/export', params, {
    timeout: 60000, // 单独设置为60秒
    responseType: 'blob', // 若为文件下载,可能需要此配置
  });
}
posted on 2025-04-28 16:56  Gu  阅读(87)  评论(0)    收藏  举报