fix: 修复退出登录后定时器依然执行的问题

This commit is contained in:
Charles7c 2023-11-04 00:13:58 +08:00
parent dd47265e97
commit bc4d7e0dc1
4 changed files with 18 additions and 6 deletions
continew-admin-ui/src
components/navbar
store/modules/user
utils

View File

@ -190,7 +190,7 @@
</template>
<script lang="ts" setup>
import { computed, ref, inject, watchEffect } from 'vue';
import { computed, ref, inject } from 'vue';
import { useDark, useToggle, useFullscreen } from '@vueuse/core';
import { useAppStore, useUserStore } from '@/store';
import { countUnread } from '@/api/system/message';
@ -200,6 +200,7 @@
import Menu from '@/components/menu/index.vue';
import getAvatar from '@/utils/avatar';
import getFile from '@/utils/file';
import { setTimer } from '@/utils/auth';
import MessageBox from '../message-box/index.vue';
const appStore = useAppStore();
@ -234,7 +235,7 @@
unReadMessageCount.value = res.data.total;
}
getUnreadCount();
setInterval(getUnreadCount, 10000);
setTimer(setInterval(getUnreadCount, 10000));
const handleToggleTheme = () => {
toggleTheme();

View File

@ -11,7 +11,7 @@ import {
getUserInfo,
} from '@/api/auth';
import { getImageCaptcha as getCaptcha } from '@/api/common/captcha';
import { setToken, clearToken } from '@/utils/auth';
import { setToken, clearToken, clearTimer } from '@/utils/auth';
import { removeRouteListener } from '@/utils/route-listener';
import { UserState } from './types';
import useAppStore from '../app';
@ -102,6 +102,7 @@ const useUserStore = defineStore('user', {
const appStore = useAppStore();
this.resetInfo();
clearToken();
clearTimer();
removeRouteListener();
appStore.clearServerMenu();
},

View File

@ -1,3 +1,4 @@
const TIMER_KEY = 'timer';
const TOKEN_KEY = 'token';
const isLogin = () => {
@ -16,4 +17,13 @@ const clearToken = () => {
localStorage.removeItem(TOKEN_KEY);
};
export { isLogin, getToken, setToken, clearToken };
const setTimer = (timer: number) => {
localStorage.setItem(TIMER_KEY, String(timer));
};
const clearTimer = () => {
clearInterval(Number(localStorage.getItem(TIMER_KEY)));
localStorage.removeItem(TIMER_KEY);
};
export { isLogin, getToken, setToken, clearToken, setTimer, clearTimer };

View File

@ -51,6 +51,8 @@ axios.interceptors.response.use(
return res;
}
if ([401].includes(res.code) && response.config.url !== '/auth/user/info') {
const userStore = useUserStore();
userStore.logout();
modalErrorWrapper({
title: '确认退出',
content: res.msg,
@ -58,8 +60,6 @@ axios.interceptors.response.use(
escToClose: false,
okText: '重新登录',
async onOk() {
const userStore = useUserStore();
await userStore.logout();
window.location.reload();
},
});