vue网络请求

post网络请求

import axios from 'axios'
import {ElMessage, ElLoading} from "element-plus"
import { nextTick } from "vue"
import JSONbig from 'json-bigint'
import { userToken } from "@/constants/Constant.js";

const defaultConfig = {
    baseURL: import.meta.env.VITE_BASE_URL,
    timeout: 2 * 60 * 1000,
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
    },
    transitional: {
        forcedJSONParsing: false
    },
    transformResponse: (data) => {
        try {
            return JSONbig.parse(data)
        } catch (err) {
            return data
        }
    }
};

const instance = axios.create({
    ...defaultConfig,
})

instance.interceptors.request.use((config) => {
    // 实时动态设置登陆用户token
    config.headers.Authorization = userToken();
    return config;
});

export async function postReq(path, param, config, success, fail) {
    return await instance.post(
        path,
        param || {},
        config,
    ).then(success, fail)
}

/**
 * 
 * @param {*} callback 只返回成功后的数据
 */
export function basePostReq(path, param, callback) {
    sendPostReq(path, param, null, true, true, true, callback)
}

/**
 * 
 * @param {*} isShowLoading 是否显示loading
 * @param {*} isShowError 是否显示报错
 * @param {*} isOnlyData 是否只返回有用的数据
 * @param {*} callback 只返回成功后的数据
 */
export function sendPostReq(path, param, config, isShowLoading, isShowError, isOnlyData, callback) {
    var loading = null
    if (isShowLoading) {
        loading = ElLoading.service({
            lock: true,
            text: '请稍等...',  
            background: 'rgba(0, 0, 0, 0.7)'
        })
    }
    postReq(path, param, config, (res)=> {
        if (loading) {
            nextTick(() => {
                loading.close()
            })
        }
        if (res.data instanceof Blob) {
            if (res.data.type == 'application/json') {
                const reader = new FileReader()
                reader.readAsText(res.data, 'utf-8')
                reader.onload = function() {
                    try {
                        const blobData = JSON.parse(reader.result)
                        if (!blobData.code || blobData.code != 200) {
                            if (isShowError) {
                                ElMessage({
                                    showClose: true,
                                    message: blobData.message || '请求失败',
                                    duration: 0,
                                    type: 'error'
                                })
                            }
                            return
                        }
                        if (isOnlyData && blobData) {
                            if (callback) {
                                callback(blobData.data)
                            }
                        } else {
                            if (callback) {
                                callback(blobData)
                            }
                        }
                    } catch (e) {
                        ElMessage({
                            showClose: true,
                            message: "json解析失败:" + e.toString(),
                            duration: 0,
                            type: 'error'
                        })
                    }
                }
            } else {
                if (callback) {
                    callback(res.data)
                }
            }
            return
        }
        if (!res.data.code || res.data.code != 200) {
            if (isShowError) {
                ElMessage({
                    showClose: true,
                    message: res.data.message || '请求失败',
                    duration: 0,
                    type: 'error'
                })
            }
            return
        }
        if (isOnlyData && res.data) {
            if (callback) {
                callback(res.data.data)
            }
        } else {
            if (callback) {
                callback(res.data)
            }
        }
    }, (err)=> {
        if (loading) {
            nextTick(() => {
                loading.close()
            })
        }
        ElMessage({
            showClose: true,
            message: err.code +', ' + err.message,
            duration: 0,
            type: 'error'
        })
    })
}
相关推荐
工业互联网专业28 分钟前
毕业设计选题:基于ssm+vue+uniapp的校园水电费管理小程序
vue.js·小程序·uni-app·毕业设计·ssm·源码·课程设计
豆豆42 分钟前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
计算机学姐1 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
twins35202 小时前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky2 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~2 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
杨荧3 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。3 小时前
案例-任务清单
前端·javascript·css