| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /* eslint-disable no-console */
- import axios from 'axios'
- import cookie from 'vue-cookies'
- import { ElMessage } from 'element-plus'
- import router from '@/router'
- const http = axios.create({
- timeout: 1000 * 30,
- withCredentials: true,
- headers: {
- 'Content-Type': 'application/json; charset=utf-8'
- }
- })
- // 请求拦截
- http.interceptors.request.use(
- config => {
- // 语言类型
- config.headers.locale = cookie.get('bbcLanguage') || 'zh_CN'
- config.headers.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || 'Asia/Shanghai'
- if (config.url === '/p/user/recentBrowse') {
- config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
- } else {
- config.headers['Content-Type'] = 'application/json; charset=utf-8'
- }
- const token = cookie.get('bbcToken')
- if (token && (config.url.indexOf('/p/') === 0 || config.url === '/user/registerOrBindUser' || config.url === '/prod/prodInfo' || config.url === '/seckill/prod')) {
- config.headers.Authorization = token
- }
- config.url = import.meta.env.VITE_APP_BASE_API + config.url
- return config
- },
- error => {
- return Promise.reject(error)
- }
- )
- // 响应拦截
- http.interceptors.response.use(
- response => {
- const responseData = response.data
- // 已登录但没有用户信息时更新用户信息
- if (response.config.url.includes('/p/') && responseData.code !== 'A00004' && !useUserStore().nickName) {
- useUserStore().initUser()
- }
- if (responseData.success && responseData.code === '00000') {
- return Promise.resolve(responseData)
- } else if (responseData.code === 'A00002') {
- return Promise.resolve(responseData)
- } else {
- // 未授权
- if (responseData.code === 'A00004') {
- const showLogin = !response.config.dontShowLogin
- cookie.remove('bbcToken')
- // 清除用户信息
- useUserStore().resetUser()
- if (location.pathname.indexOf('user') > -1 || location.pathname.indexOf('order') > -1) {
- router.push('/login')
- } else {
- bus.emit('showLogin', showLogin) // 全局事件
- }
- } else if (responseData.code === 'A00001') {
- if (response.config.hasCatch) return Promise.reject(response) // 自定义处理提示信息
- // 订单接口错误不显示提示
- if (response.config.url.includes('/p/myOrder/orderDetail')) {
- return Promise.reject(response)
- }
- // A00001 用于直接显示提示用户的错误,内容由输入内容决定
- ElMessage({
- message: responseData.msg || 'Error',
- type: 'error',
- duration: 1500
- })
- return Promise.reject(response)
- } else if (responseData.code === 'A00005') {
- // 出小差
- ElMessage({
- message: $t('serviceError'),
- type: 'error',
- duration: 1500
- })
- console.error('============== 请求异常 ==============')
- console.log('接口地址: ', response.config.url.replace(import.meta.env.VITE_APP_BASE_APIpath, ''))
- console.log('异常信息: ', responseData)
- console.error('============== 请求异常 end ==========')
- }
- return Promise.reject(response)
- }
- },
- error => {
- console.log('error', error)
- }
- )
- const uploadFile = function (url, file) {
- return axios.put(url, file)
- }
- export default http
- export { uploadFile }
|