|
|
@@ -38,19 +38,23 @@ async function handleTokenExpiry() {
|
|
|
|
|
|
// 清空用户信息
|
|
|
const useUserInfoStore = useUserInfo();
|
|
|
- await useUserInfoStore.updateToken('');
|
|
|
+ try {
|
|
|
+ const tokenStore = tokenInfo();
|
|
|
+ tokenStore.clearToken();
|
|
|
+ } catch (e) {
|
|
|
+ await useUserInfoStore.updateToken('');
|
|
|
+ }
|
|
|
await useUserInfoStore.updateUserInfo({});
|
|
|
|
|
|
- // 跳转到首页
|
|
|
+ // 跳转到首页(在会话存储中标记需要显示登录框)
|
|
|
try {
|
|
|
+ sessionStorage.setItem('NEED_LOGIN_MODAL', '1');
|
|
|
window.location.href = '/'
|
|
|
console.log('Token失效:已跳转到首页');
|
|
|
} catch (error) {
|
|
|
console.error('Token失效:跳转到首页失败:', error);
|
|
|
}
|
|
|
-
|
|
|
- // 显示登录弹窗
|
|
|
- useUserInfoStore.updateLoginShow(true);
|
|
|
+ // 刷新后在 main.ts 中处理显示登录弹窗
|
|
|
} catch (error) {
|
|
|
console.error('Token失效处理失败:', error);
|
|
|
}
|
|
|
@@ -84,9 +88,10 @@ service.interceptors.request.use(
|
|
|
|
|
|
// 在发送请求之前做些什么,例如添加 token
|
|
|
const tokenInfoStore = tokenInfo();
|
|
|
- const token = tokenInfoStore.getToken; // 使用 getToken() 获取 token
|
|
|
- if (token) {
|
|
|
- config.headers['Authorization'] = `Bearer ${token}`;
|
|
|
+ const token = tokenInfoStore.getToken; // computed ref
|
|
|
+ const tokenValue = typeof token === 'object' && token !== null && 'value' in token ? (token as any).value : token as any;
|
|
|
+ if (tokenValue) {
|
|
|
+ config.headers['Authorization'] = `Bearer ${tokenValue}`;
|
|
|
}
|
|
|
|
|
|
// 如果配置中启用了加载动画,则显示加载动画
|
|
|
@@ -127,11 +132,14 @@ service.interceptors.response.use(
|
|
|
if (res.code !== 0) {
|
|
|
switch (res.code) {
|
|
|
case 401:
|
|
|
- Message({
|
|
|
- message: '登录状态已失效,请重新登录',
|
|
|
- type: 'error',
|
|
|
- duration: 3 * 1000,
|
|
|
- });
|
|
|
+ setTimeout(()=>{
|
|
|
+
|
|
|
+ Message({
|
|
|
+ message: '登录状态已失效,请重新登录',
|
|
|
+ type: 'error',
|
|
|
+ duration: 3 * 1000,
|
|
|
+ });
|
|
|
+ },1000)
|
|
|
// 处理token失效
|
|
|
handleTokenExpiry();
|
|
|
break;
|