UNPKG

logwire-wms-ui-test

Version:

运匠科技wms-PDA基础组件库

195 lines (155 loc) 5.18 kB
/* * 数据请求 * @author 张文 * @date 2022-02-10 * */ import {axios} from "@bundled-es-modules/axios"; import {ApiUtils} from "./ApiUtils"; import {Warehouse} from "./Warehouse"; import {lwErrMsg} from "../components/ui/ErrorMsg"; import {lwLoading} from "../components/ui/Loading"; import {Language} from "./Language"; import {LocalStorage} from "./LocalStorage"; import {Timezone} from "./Timezone"; // 用于自定义处理http报错的问题,为false时候不显示报错信息,直接返回错误信息,通过catch接收 let errGetMe = false const lwAxios = axios.create({ baseURL: import.meta.env.VITE_APP_BASE_URL, timeout: 1000 * 60 * 30, }) /** * 设置基础 Url 的方法 * @author 张文 * @param url 需要设置的url,修改后将影响所有请求的代理路径 * */ lwAxios.setBaseUrl = url => lwAxios.defaults.baseURL = url /** * 设置语言 * @author 董和春 * @param lang 需要设置的语言 * */ lwAxios.setLanguage = lang => lwAxios.defaults.headers['Accept-Language'] = (lang || LocalStorage.get('lwLanguage') || 'zh-CN,zh') lwAxios.setLanguage() /** * 设置时区 * @author 张文 * @param timezone 需要设置的时区值 * */ lwAxios.setTimezone = timezone => { if (timezone) { lwAxios.defaults.headers['W-TIME-ZONE'] = timezone return } const local = LocalStorage.get('lwTimezone') if (typeof local === 'object'){ lwAxios.defaults.headers['W-TIME-ZONE'] = local.offset return } lwAxios.defaults.headers["W-TIME-ZONE"] = Timezone.getTimezone().offset; } lwAxios.setTimezone() /** * 更新请求的 Token,正常情况下无需手动更新token,因为当token发生变化时应当主动触发 lwApiUtils.setToken 方法。从而会自动更新当前token * @author 张文 * @param token 需要更新的token,设置token请使用 lwApiUtils.setToken 方法 * */ lwAxios.updateToken = token => { lwAxios.defaults.headers.common['Authorization'] = token lwAxios.defaults.headers.common['token'] = token } // 是否有用户Token lwAxios.hasToken = () => !!lwAxios.defaults.headers.common['token'] /** * 调用平台接口的方法 * @author 张文 * @param {Object} obj * url-接口, * data-数据, * config-基础配置{loading-是否需要显示加载框(默认开启),errGetMe-是否由请求接口处理错误信息(默认开启)}, * method-请求的方法默认post * @returns Function 异步函数 */ lwAxios.action = ({url, data, config, method = 'post'}) => { const aux = data || {} if (!aux.warehouseId) { aux.warehouseId = Warehouse.get().id } return lwAxios({ method, url: ApiUtils.getApiUrl() + url, data: {aux}, ...config }) } // 请求拦截 lwAxios.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){ lwLoading.show() } // 记录当前请求是否需要手动处理报错 errGetMe=config.errGetMe return config }, error => { lwLoading.close() console.error('请求异常: ', error) return Promise.reject(error) } ) // 响应拦截 lwAxios.interceptors.response.use( response => { lwLoading.close() 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 => { lwLoading.close() console.error('接口返回异常: ', error) let resp = error.response if (resp){ if (resp.status === 401) { ApiUtils.setToken(undefined) lwErrMsg.show({ message: Language.get('wms_project.pda.utils.axios.loginOvertime', '登录超时,请重新登录') }) ApiUtils.delToken() history.go(0) return Promise.reject(resp) } if (resp.status === 404){ lwErrMsg.show({ message: Language.get('wms_project.pda.utils.axios.serveError', '请求失败,接口路径错误(404)') }) return Promise.reject(resp) } if (errGetMe){ errGetMe = false return Promise.reject(resp) } if (resp.data) { lwErrMsg.show({ message: resp.data && resp.data.message ? resp.data.message : Language.get('wms_project.pda.utils.axios.unknownError', '未知错误(可能是系统正在升级或异常)请稍后再试') }) return Promise.reject(resp) } } lwErrMsg.show({message: Language.get('wms_project.pda.utils.axios.network', '请求失败,请检查网络连接')}) return Promise.reject(resp) } ) export default lwAxios