diff --git a/src/apis/client.ts b/src/apis/client.ts index 333d2df..795d8cb 100644 --- a/src/apis/client.ts +++ b/src/apis/client.ts @@ -40,15 +40,6 @@ export const userClient = new Request({ export const ndmClient = new Request({ requestInterceptor: async (config) => { - // 当OCC的token失效时,虽然不会影响车站请求,但是需要重新登录,所以在车站请求之前需要校验OCC的登录状态 - const [err] = await userClient.post(`/api/ndm/ndmKeepAlive/verify`, {}, { timeout: 5000 }); - if (err) { - window.$message.error('登录超时,请重新登录'); - const userStore = useUserStore(); - userStore.resetStore(); - router.push('/login'); - return Promise.reject(err); - } const userStore = useUserStore(); const { lampAuthorization, lampClientId, lampClientSecret } = getAppEnvConfig(); const newAuthorization = window.btoa(`${lampClientId}:${lampClientSecret}`); diff --git a/src/composables/query/station/use-station-list-query.ts b/src/composables/query/station/use-station-list-query.ts index 3afac7a..f22e553 100644 --- a/src/composables/query/station/use-station-list-query.ts +++ b/src/composables/query/station/use-station-list-query.ts @@ -1,3 +1,4 @@ +import { userClient } from '@/apis/client'; import type { Station } from '@/apis/domains'; import { ndmVerify } from '@/apis/requests'; import { STATION_LIST_QUERY_KEY } from '@/constants'; @@ -22,6 +23,12 @@ export function useStationListQuery() { enabled: computed(() => pollingEnabled.value), refetchInterval: getAppEnvConfig().requestInterval * 1000, queryFn: async () => { + // 主动登录校验 + const [err] = await userClient.post(`/api/ndm/ndmKeepAlive/verify`, {}, { timeout: 5000 }); + if (err) { + throw err; + } + const { data: ndmStationList } = await axios.get<{ code: string; name: string }[]>(`/minio/ndm/ndm-stations.json?_t=${dayjs().unix()}`); let stations = ndmStationList.map((station) => ({ diff --git a/src/router/index.ts b/src/router/index.ts index 0e73202..13dc275 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -49,22 +49,34 @@ const router = createRouter({ ], }); -const whiteList = ['/login', '/debug']; +const whiteList = ['/debug']; router.beforeEach((to, from, next) => { const userStore = useUserStore(); - if (userStore.userLoginResult?.token) { - if (to.path === '/login') { + const isAuthed = !!userStore.userLoginResult?.token; + + // 放行白名单 + const inWhiteList = whiteList.some((path) => to.path.startsWith(path)); + if (inWhiteList) { + next(); + return; + } + + // 已登录用户不允许进入登录页(手动访问 /login 会重定向到首页) + if (to.path === '/login') { + if (isAuthed) { next({ path: '/' }); } else { next(); } + return; + } + + // 其它路由按登录态控制 + if (!isAuthed) { + next('/login'); } else { - if (whiteList.includes(to.path)) { - next(); - } else { - next('/login'); - } + next(); } });