import {
|
useUserStore
|
} from "@/store"
|
import storage from "@/utils/storage"
|
import {
|
showMessage
|
} from "./status"
|
import website from '@/config/website'
|
import {
|
Base64
|
} from 'js-base64'
|
|
// 防止重复提交
|
const repeatSubmit = config => {
|
const requestObj = {
|
url: config.url,
|
data: typeof config.data === "object" ?
|
JSON.stringify(config.data) : config.data,
|
time: new Date().getTime()
|
}
|
const sessionObj = storage.getJSON("sessionObj")
|
if (!sessionObj) {
|
storage.setJSON("sessionObj", requestObj)
|
} else {
|
const s_url = sessionObj.url // 请求地址
|
const s_data = sessionObj.data // 请求数据
|
const s_time = sessionObj.time // 请求时间
|
const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交
|
if (
|
s_data === requestObj.data &&
|
requestObj.time - s_time < interval &&
|
s_url === requestObj.url
|
) {
|
const message = "数据正在处理,请勿重复提交"
|
console.warn(`[${s_url}]: ${message}`)
|
return Promise.reject(new Error(message))
|
} else {
|
storage.setJSON("sessionObj", requestObj)
|
}
|
}
|
}
|
|
// 请求拦截器
|
function requestInterceptors(http) {
|
|
http.interceptors.request.use((config) => {
|
const {detail} = useUserStore().$state?.userInfo || {}
|
// 假设有token值需要在头部需要携带
|
let accessToken = useUserStore()?.$state?.userInfo?.access_token;
|
if (accessToken) {
|
config.header['Blade-Auth'] = 'bearer ' + accessToken;
|
}
|
if (detail?.areaCode) {
|
config.header['areaCode'] = detail.areaCode
|
}
|
// 安全请求header
|
config.header['Blade-Requested-With'] = 'BladeHttpRequest';
|
// 客户端认证参数
|
config.header['Authorization'] = 'Basic ' + Base64.encode(website.clientId + ':' + website.clientSecret);
|
return config
|
}, config => { // 可使用async await 做异步操作
|
return Promise.reject(config)
|
})
|
}
|
|
// 响应拦截器
|
function responseInterceptors(http) {
|
http.interceptors.response.use((response) => {
|
let res = response
|
const status = res.data.error_code || res.data.code || res.statusCode
|
const message = res?.data?.msg || res?.data?.error_description || res?.data?.message || '系统错误'
|
if (status !== 200) {
|
uni.showToast({title: message, icon: 'none'});
|
return Promise.reject(response);
|
}
|
return response;
|
}, (response) => {
|
let res = response
|
const message = res?.data?.msg || res?.data?.error_description || res?.data?.message || '系统错误'
|
/* 对响应错误做点什么 (statusCode !== 200)*/
|
uni.showToast({title: message, icon: 'none'});
|
if (response.statusCode === 401) {
|
const pages = getCurrentPages()
|
const currentPage = pages[pages.length - 1]
|
uni.reLaunch({
|
url: `/pages/login/index?redirect=/${currentPage.route}`
|
})
|
}
|
return Promise.reject(response)
|
})
|
}
|
|
export {
|
requestInterceptors,
|
responseInterceptors
|
}
|