UNPKG

tian-yan-yan

Version:

一套不算好用的组件

165 lines (131 loc) 4.55 kB
/* * 数据请求 * @author 张文 * @date 2022-02-10 * */ import Axios from 'axios' import {ApiUtils} from "./ApiUtils"; import {Warehouse} from "./Warehouse"; import {tyShowErrorMsg} from "../components/ErrorMsg"; import {tyShowLoading, tyCloseLoading} from "../components/Loading"; import {Language} from "./Language"; import {LocalStorage} from "./LocalStorage"; // 用于自定义处理http报错的问题,为false时候不显示报错信息,直接返回错误信息,通过catch接收 let errGetMe = false const tyAxios = Axios.create({ baseURL: process.env.VUE_APP_BASE_URL, timeout: 1000 * 60 * 30, }) /** * 设置基础 Url 的方法 * @author 张文 * @param url 需要设置的url,修改后将影响所有请求的代理路径 * */ tyAxios.setBaseUrl = url => tyAxios.defaults.baseURL = url tyAxios.setLanguage = lang => tyAxios.defaults.headers['Accept-Language'] = (lang || LocalStorage.get('tyLanguage') || 'zh-CN,zh') tyAxios.setLanguage() /** * 更新请求的 Token,正常情况下无需手动更新token,因为当token发生变化时应当主动触发 tyApiUtils.setToken 方法。从而会自动更新当前token * @author 张文 * @param token 需要更新的token,设置token请使用 tyApiUtils.setToken 方法 * */ tyAxios.updateToken = token => { tyAxios.defaults.headers.common['Authorization'] = token tyAxios.defaults.headers.common['token'] = token } // 是否有用户Token tyAxios.hasToken = () => !!tyAxios.defaults.headers.common['token'] /** * 调用平台接口的方法 * @author 张文 * @param {Object} obj * url-接口, * data-数据, * config-基础配置{loading-是否需要显示加载框(默认开启),errGetMe-是否由请求接口处理错误信息(默认开启)}, * method-请求的方法默认post * @returns Function 异步函数 */ tyAxios.action = ({url, data, config, method = 'post'}) => { const aux = data || {} if (!aux.warehouseId) { aux.warehouseId = Warehouse.get().id } return tyAxios({ method, url: ApiUtils.getApiUrl() + url, data: {aux}, ...config }) } // 请求拦截 tyAxios.interceptors.request.use( config => { let csrf = /XSRF-TOKEN=([\w-]+)/.test(document.cookie) && RegExp.$1 if (csrf) { config.headers['X-XSRF-TOKEN'] = csrf } // 判断是否显示加载框 if (config.loading || config.loading === undefined){ tyShowLoading() } // 记录当前请求是否需要手动处理报错 errGetMe=config.errGetMe return config }, error => { tyCloseLoading() console.error('请求异常: ', error) return Promise.reject(error) } ) // 响应拦截 tyAxios.interceptors.response.use( response => { tyCloseLoading() let result = response.data if (!result || !['none', 'success'].includes(result.code)) { throw Error({ response }) } // 更新 token if (result && result.renewedToken) { ApiUtils.setToken(result.renewedToken) } if (typeof response.config['map'] === 'function') { return response.config['map'](result.data) } return result.data }, error => { tyCloseLoading() console.error('接口返回异常: ', error) let resp = error.response if (errGetMe){ errGetMe = false return Promise.reject(resp) } if (resp){ if (resp.status === 401) { ApiUtils.setToken(undefined) tyShowErrorMsg({ message: Language.get('wms_project.pda.utils.axios.loginOvertime', '登录超时,请重新登录') }) ApiUtils.delToken() history.go(0) return Promise.reject(resp) } if (resp.status === 404){ tyShowErrorMsg({ message: Language.get('wms_project.pda.utils.axios.serveError', '请求失败,接口路径错误(404)') }) return Promise.reject(resp) } if (resp.data) { tyShowErrorMsg({ message: resp.data && resp.data.message ? resp.data.message : Language.get('wms_project.pda.utils.axios.unknownError', '未知错误(可能是系统正在升级或异常)请稍后再试') }) return Promise.reject(resp) } } tyShowErrorMsg({message: Language.get('wms_project.pda.utils.axios.network', '请求失败,请检查网络连接')}) return Promise.reject(resp) } ) export default tyAxios