fix some bugs

This commit is contained in:
2026-06-27 13:49:00 +03:30
parent c3b47e33e1
commit 4d004c3515
13 changed files with 331 additions and 57 deletions
+69 -16
View File
@@ -3,6 +3,7 @@ import { baseURL as fallbackBaseURL } from '@/themeConfig'
import type {AxiosRequestConfig, AxiosResponse} from 'axios'
import axios from 'axios'
import {getToken, removeToken} from "@/utils";
import { findStoredAuthToken } from '@/utils/authToken';
import router from "@/router";
import {get} from 'lodash'
import {message} from "ant-design-vue";
@@ -25,6 +26,58 @@ const _axios = axios.create({
headers,
})
let sessionVerifyTimer: ReturnType<typeof setTimeout> | null = null
let sessionVerifyInFlight = false
function requestPath(config: { url?: string; baseURL?: string } | undefined): string {
const raw = String(config?.url ?? '')
if (raw.startsWith('http')) {
try {
return new URL(raw).pathname
} catch {
return raw
}
}
return raw
}
async function logoutToLogin() {
removeToken()
if (router.currentRoute.value.name !== 'login') {
await router.push({ name: 'login' })
}
}
function scheduleSessionVerify() {
if (sessionVerifyTimer) {
return
}
sessionVerifyTimer = setTimeout(async () => {
sessionVerifyTimer = null
if (sessionVerifyInFlight) {
return
}
const token = findStoredAuthToken()
if (!token) {
return
}
sessionVerifyInFlight = true
try {
await _axios.get('/customer/me', {
headers: { Authorization: `Bearer ${token}` },
meta: { errorMessage: 'none' },
})
} catch {
await logoutToLogin()
} finally {
sessionVerifyInFlight = false
}
}, 2000)
}
_axios.interceptors.request.use(
(config) => {
const runtimeBaseURL = getConfigApp('node_server')
@@ -54,24 +107,24 @@ _axios.interceptors.response.use(
return response.data
},
async function (error) {
console.log('this is axios error', error)
if (error.response.data && error.response.data.message) {
checkStatus(error.response.data.message, error.response.status, error.config)
const response = error.response
const config = error.config
if (response?.data?.message && response.status !== 401) {
checkStatus(response.data.message, response.status, config)
}
//console.log('this is error on interceptors.response', error.config.meta)
/* if (error.response && (error.response.status == 401 || error.response.status == 400)) {
//debugger
removeToken()
router.push({ name: 'login' })
}*/
if (error.response && error.response.status == 401) {
///removeToken()
console.log('error')
removeToken()
// router.push({ name: 'login' })
await router.push({name: 'login'})
} else if (error.response && error.response.status == 403) {
if (response?.status === 401) {
const hadAuth = Boolean(config?.headers?.Authorization)
if (hadAuth) {
const path = requestPath(config)
if (path.includes('/customer/me')) {
await logoutToLogin()
} else {
scheduleSessionVerify()
}
}
} else if (response?.status === 403) {
message.error('شما دسترسی لازم برای انجام این عملیات را ندارید')
} else if (error.response && error.response.status == 422) {
// message.error(error.response.data?.message)