2024-12-24 11:28:23 +08:00
|
|
|
|
<script setup>
|
|
|
|
|
import { RouterLink, RouterView } from 'vue-router'
|
2025-01-04 00:38:57 +08:00
|
|
|
|
import WechatOverlay from './components/WechatOverlay.vue';
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
RefreshToken()
|
|
|
|
|
})
|
|
|
|
|
const RefreshToken = async () => {
|
|
|
|
|
const token = localStorage.getItem("token")
|
|
|
|
|
const refreshAfter = localStorage.getItem("refreshAfter")
|
|
|
|
|
const currentTime = new Date().getTime();
|
2024-12-24 11:28:23 +08:00
|
|
|
|
|
2025-01-04 00:38:57 +08:00
|
|
|
|
// 1. 如果没有 token,直接返回
|
|
|
|
|
if (!token) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. 如果有 refreshAfter,检查当前时间是否超过 refreshAfter(refreshAfter 是秒级,需要转换为毫秒级)
|
|
|
|
|
if (refreshAfter) {
|
|
|
|
|
const refreshAfterInMilliseconds = parseInt(refreshAfter) * 1000; // 转换为毫秒级
|
|
|
|
|
if (currentTime < refreshAfterInMilliseconds) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3. 如果没有 refreshAfter 或者时间超过 refreshAfter,执行刷新 token 的请求
|
|
|
|
|
const { data, error } = await useApiFetch("/user/getToken")
|
|
|
|
|
.post()
|
|
|
|
|
.json();
|
|
|
|
|
|
|
|
|
|
if (data.value && !error.value) {
|
|
|
|
|
if (data.value !== 200) {
|
|
|
|
|
localStorage.setItem("token", data.value.data.accessToken);
|
|
|
|
|
localStorage.setItem("refreshAfter", data.value.data.refreshAfter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-24 11:28:23 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
2025-01-04 00:38:57 +08:00
|
|
|
|
<WechatOverlay />
|
2024-12-24 11:28:23 +08:00
|
|
|
|
<RouterView />
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style scoped></style>
|