logwire-wms-ui-test
Version:
运匠科技wms-PDA基础组件库
195 lines (155 loc) • 5.18 kB
JavaScript
/*
* 数据请求
* @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