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 @@