diff --git a/dist.zip b/dist.zip deleted file mode 100644 index ee80cbe..0000000 Binary files a/dist.zip and /dev/null differ diff --git a/src/utils/http.js b/src/utils/http.js index f7774b8..c1a62a3 100644 --- a/src/utils/http.js +++ b/src/utils/http.js @@ -3,17 +3,15 @@ import cache from "./cache" import { ElMessage } from "element-plus" import router from "@/router" import { useLoginStore } from "@/store/authentication/index" - +// 创建axios实例 const service = axios.create({ - baseURL: import.meta.env.VITE_APP_BASE_API, - timeout: 10000, + baseURL: import.meta.env.VITE_APP_BASE_API, // 从环境变量获取基础URL + timeout: 10000, // 请求超时时间 withCredentials: true }) //白名单 const excludePath = new Set(["/auth/login", "/auth/refresh"]) - -//请求拦截器 service.interceptors.request.use( (config) => { const token = cache.getItem("token") @@ -27,49 +25,43 @@ service.interceptors.request.use( } ) -//响应拦截器 service.interceptors.response.use( async (response) => { const res = response.data const loginStore = useLoginStore() - - if (res.code == 200) { - return res - } - - //500会抛出该错 - if (res.code !== 401 && res.code !== 403) { - ElMessage.error(res.message || "Error") - } - - //res.code != 200 && res.code == 401 || res.code == 403的情况如下 - try { - // 尝试刷新token - const refreshed = await loginStore.loginForRefreshToken() - if (!refreshed) { - throw new Error("Refresh token failed") - } - // 刷新成功,更新请求头中的accessToken并重新发送请求 - const updateConfig = { - ...response.config, - headers: { - ...response.config.headers, - Authorization: `Bearer ${loginStore.token}` - } - } - return service(updateConfig) //使用新请求头重新发送原始请求 - } catch (refreshError) { + if (res.code !== 200) { ElMessage({ - message: "会话已过期,请重新登录!", + message: res.message || "Error", type: "error", duration: 5 * 1000 }) - cache.removeItem("token") - router.push("/login") - return Promise.reject(refreshError) + + if (res.code === 401 || res.code === 403) { + try { + // 若token过期,或者token无效,或者未找到token,对页面中需要认证的接口都有效,使得重新登录 + const refreshed = await loginStore.loginForRefreshToken() + if (refreshed) { + // 刷新成功,更新请求头中的accessToken + response.config.headers.Authorization = `Bearer ${loginStore.token}` + return service(response.config) // 重新发送失败的请求 + } + } catch (refreshError) { + ElMessage({ + message: "会话已过期,请重新登录!", + type: "error", + duration: 5 * 1000 + }) + cache.removeItem("token") + router.push("/login") + return Promise.reject(new Error("Refresh token failed")) + } + } + return Promise.reject(new Error(res.message || "Error")) + } else { + return res } }, - (error) => { + async (error) => { ElMessage({ message: error.message, type: "error", diff --git a/src/views/LinkPrediction/characterInteraction/index.vue b/src/views/LinkPrediction/characterInteraction/index.vue index 8bd3686..df2ec16 100644 --- a/src/views/LinkPrediction/characterInteraction/index.vue +++ b/src/views/LinkPrediction/characterInteraction/index.vue @@ -127,9 +127,12 @@ import userPanelTitleImg from "@/assets/images/linkPrediction/title/user-title.p import graphTitleImg from "@/assets/images/linkPrediction/title/graph1-title.png" import analysisTitleImg from "@/assets/images/linkPrediction/title/analysis-title.png" import { getAvatarUrl } from "@/utils/transform" +import { storeToRefs } from "pinia" const interactionStore = useCharacterInteractionStore() +const { communityNodeList } = storeToRefs(interactionStore) + // 控制个人信息弹窗 const userInfoDialog = ref(false) const curSelectedUser = ref(null) @@ -159,7 +162,7 @@ onMounted(() => { interactionStore.initGraphStatistics() //初始化所有社团状态统计 interactionStore.initInteractionPostList("106888") //初始贴文列表 }) -provide("communityNodeList", interactionStore.communityNodeList) // 提供数据 +provide("communityNodeList", communityNodeList) // 提供响应式数据 provide("statisticsList", interactionStore.statisticsList) diff --git a/src/views/LinkPrediction/charactersHiddenInteraction/index.vue b/src/views/LinkPrediction/charactersHiddenInteraction/index.vue index d4c4665..c466d2b 100644 --- a/src/views/LinkPrediction/charactersHiddenInteraction/index.vue +++ b/src/views/LinkPrediction/charactersHiddenInteraction/index.vue @@ -126,8 +126,11 @@ import { useCharacterHiddenStore } from "@/store/linkPrediction/index" import userPanelTitleImg from "@/assets/images/linkPrediction/title/user-title.png" import graphTitleImg from "@/assets/images/linkPrediction/title/graph1-title.png" import analysisTitleImg from "@/assets/images/linkPrediction/title/analysis-title.png" +import { storeToRefs } from "pinia" const characterHiddenStore = useCharacterHiddenStore() + +const { communityNodeList } = storeToRefs(characterHiddenStore) // 控制个人信息弹窗 const userInfoDialog = ref(false) const curSelectedUser = ref(null) @@ -157,7 +160,7 @@ onMounted(() => { characterHiddenStore.initGraphCommunityNode() //初始化社团节点 characterHiddenStore.initGraphStatistics() //初始化社团统计 }) -provide("communityNodeList", characterHiddenStore.communityNodeList) // 提供数据 +provide("communityNodeList", communityNodeList) // 提供响应式数据 provide("statisticsList", characterHiddenStore.statisticsList) diff --git a/src/views/LinkPrediction/components/communityNode.vue b/src/views/LinkPrediction/components/communityNode.vue index c8f5cf1..8c8669c 100644 --- a/src/views/LinkPrediction/components/communityNode.vue +++ b/src/views/LinkPrediction/components/communityNode.vue @@ -12,7 +12,7 @@ diff --git a/src/views/LinkPrediction/socialGroups/components/communityNode.vue b/src/views/LinkPrediction/socialGroups/components/communityNode.vue index 205d09b..635f39f 100644 --- a/src/views/LinkPrediction/socialGroups/components/communityNode.vue +++ b/src/views/LinkPrediction/socialGroups/components/communityNode.vue @@ -12,7 +12,7 @@