Files
GamePortrait/src/plugins/axios.config.js
T
testadmin 833d76e88c feat: 登录失效统一弹框 + 筹码越南K格式持久化 + play.vue 优化
- axios.config: 拦截登录过期响应,统一弹框后清除用户信息,防多次弹框
- app.js: chooseChip 改为越南 K 格式默认 10k,支持 localStorage 恢复
- bettingChips.js: 移除(逻辑已合并)
2026-04-20 10:55:51 +08:00

181 lines
4.3 KiB
JavaScript

import axios from "axios"
import $store from "@/store"
import { encrypt, decrypt } from "@/utils/secret"
import { showDialog, closeDialog } from "vant"
let api = ""
// 登录失效统一处理(防止多 API 同时失败弹多个框)
let _authExpiredHandling = false
const handleAuthExpired = (res) => {
const msg = res && res.Msg
const isAuthExpired =
res &&
res.Success == 0 &&
(msg === "获取信息失败" ||
msg === "登录已过期" ||
msg === "token失效" ||
msg === "请重新登录")
if (!isAuthExpired) return false
if (_authExpiredHandling) return true
_authExpiredHandling = true
const cfg = $store.state.config
const Lang = cfg.$lang && cfg.$Type ? cfg.$lang[cfg.$Type] : {}
const title = Lang.tips || "提示"
const message = Lang.login_expired || "登录已过期,请重新登录"
let autoClose = null
showDialog({ title, message })
.then(() => {
clearTimeout(autoClose)
_authExpiredHandling = false
$store.commit("app/removeUserInfo")
})
.catch(() => {
_authExpiredHandling = false
$store.commit("app/removeUserInfo")
})
autoClose = setTimeout(() => {
closeDialog()
_authExpiredHandling = false
$store.commit("app/removeUserInfo")
}, 4000)
return true
}
const instance = axios.create({
timeout: 6000,
headers: {
"Content-Type": "application/json;charset=UTF-8"
}
})
//请求拦截器
instance.interceptors.request.use(
(config) => {
return config
},
(error) => {
return Promise.reject(error)
}
)
//响应拦截器
instance.interceptors.response.use(
(response) => {
return response.data
},
(error) => {
console.log(error)
if (error.response) {
switch (error.response.status) {
case 401:
error.message = "未登录"
break
case 400:
error.message = "请求错误"
break
case 403:
error.message = "拒绝访问"
break
case 404:
error.message = `请求地址出错: ${error.response.config.url}`
break
case 408:
error.message = "请求超时"
break
case 500:
error.message = "服务器内部错误"
break
case 501:
error.message = "服务未实现"
break
case 502:
error.message = "网关错误"
break
case 503:
error.message = "服务不可用"
break
case 504:
error.message = "网关超时"
break
case 505:
error.message = "HTTP版本不受支持"
break
default:
error.message = "连接服务器异常"
}
} else {
error.message = "连接服务器失败"
}
return Promise.reject(error.message)
}
)
const config = (url) => {
instance.defaults.baseURL = url
return new Promise((resolve, reject) => {
instance
.get()
.then((res) => {
api = res.apiUrl
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
// 封装get
const get = (url, params, option = {}) => {
instance.defaults.baseURL = api || $store.state.config.apiUrl
if (option.responseType) {
instance.defaults.responseType = option.responseType
}
return new Promise((resolve, reject) => {
const language = $store.state.config.$Type
const encryptData = encrypt(
JSON.stringify({ ...params, language })
).toString()
instance
.get(url, {
encryptData
})
.then((res) => {
handleAuthExpired(res)
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
// 封装post
const post = (url, params, option = {}) => {
instance.defaults.baseURL = api || $store.state.config.apiUrl
if (option.responseType) {
instance.defaults.responseType = option.responseType
}
const language = $store.state.config.$Type
const encryptData = encrypt(
JSON.stringify({ ...params, language })
).toString()
return new Promise((resolve, reject) => {
instance
.post(url, {
encryptData
})
.then((res) => {
res.Data = res.Data ? JSON.parse(decrypt(res.Data)) : {}
handleAuthExpired(res)
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
export { get, post, config }