美文网首页
请求配置

请求配置

作者: 好多柱 | 来源:发表于2023-03-23 16:33 被阅读0次

base.json
{
"getUserInfo":{
"url":"/rd-service/rest/v1/excel/getUserInfo",
"method":"post",
"desc":"索取用户权限"
}
}

index.js

import axios from 'axios'
import { ElMessage } from 'element-plus'
import Qs from 'qs'
import BaseApi from './base.json';
//请求取消
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
export const isCredPlat = () => true;
export const platform = 'credible'
//实例化
const url = import.meta.env.VITE_APP_HOST
const instance = axios.create(
    {
        baseUrl: url,
        timeout: 100000,// 超时
        withCredentials: true,
        cancelToken: source.token,
        // paramsSerializer: function (params) {
        //     return Qs.stringify(params, {
        //         arrayFormat: 'brackets'
        //     });
        // }
    });
//请求拦截
instance.interceptors.request.use((config) => {
    if (config.option && config.option.mock) {
        config.baseURL = process.env.VUE_APP_BASE_API;
    }
    config.headers.currenturl = window.location.href;
    return config;
});

// 响应拦截
instance.interceptors.response.use(
    (response) => {
        const { data, status, statusText } = response;
        let dataCode = data.code || data.status
        let message = data.msg || data.message
        if (status !== 200) {
            ElMessage({
                title: '网络错误',
                type: 'error',
                message: statusText
            });
            return Promise.reject(new Error(data.data));
        } else if (dataCode !== undefined && (dataCode !== '200' || dataCode === 'error')) {
            //未登录
            if (dataCode == 401) {
                window.location.href = data.data.redireactUrl;
            } else {
                ElMessage({
                    title: '错误提示',
                    type: 'error',
                    message
                });
            }
            return Promise.reject(new Error(data.data));
        } else {
            return Promise.resolve(data.data);
        }
    }, //请求失败
    (error) => {
        const { response } = error;
        if (response) {
            // 请求已发出,但是不在2xx范围
            ElMessage({
                title: '错误提示',
                type: 'error',
                message: '服务器错误,请稍后再试~'
            });
        } else {
            ElMessage({
                title: '错误提示',
                type: 'error',
                message: '网络错误,请检查网络~'
            });
        }
        return Promise.reject(new Error());
    }
);
export default instance;

export const fileHttp = axios.create(
{
  responseType:'blob',
  timeout:3000,//超时
  withCredentials:true,
   cancelToken:source.token//取消请求
}
 )

fileHttp.interceptiors.request.use(config=>
   return config;
 )

const AllApis = { ...BaseApi }

export const requestApi = function (apiName, apiParams = null, config = {}) {
    if (typeof apiName === 'string' && AllApis[apiName]) {
        let apiParameters = {};
        const api = AllApis[apiName] 
        if (apiParams !== null) {
            let method = api.method.toLowerCase();
            if (method === 'get' || method === 'delete') {
                apiParameters.params = apiParams
            } else {
                apiParameters.data = apiParams
            }
        }
        return instance.request({
            ...api,
            ...apiParameters,
            ...config
        });
    } else if (typeof apiName == 'object') {
        return instance.request(apiName);
    } else {
        return null
    }
}

// instance.requestApi = requestApi

//使用
import {requestApi} from '@/http/index'
const getA =()=>{
requestApi('aa',params).then(res=>

});
}

//文件下载
requestApi('download',request,{responseType:'blob',timeout:200000})
.then((data) =>
{
const blob = new Blob([data.data]);
blob.text().then((result => {
try {
const jsonData= JSON.parsr(result);
if(jsonData.code =='500'){
console.log('下载错误')
}
}catch (err) => {
if(type== 'excel'){
fileName = window.decodeURI(
data.headers['content-dusposition'].split('=')[1],'UTF-8')
)
}else{
fileName ='xxx' +'.zip'
}
commonFunction.downloadFile(data.data,fileName);
}
}

downloadFile(resp , fileName) {
let data = resp
let url = window.URL.createObjectURL(new Blob([data]));
let link = document.createElement('a')
link.style.display = 'none'
link.href= url
// 文件名在后端设置
link.setAttribute('download',fileName);
documenr.body.appendChild(link);
link.click();
}

相关文章

网友评论

      本文标题:请求配置

      本文链接:https://www.haomeiwen.com/subject/wjnstdtx.html