From c62a61cfdba5cf60f59e7e79432150e479155da4 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期一, 31 八月 2026 09:01:12 +0800
Subject: [PATCH] feat: 关闭标签页/浏览器后强制重新登录——认证信息(token/username/realName/modules)改存 sessionStorage,目录记忆/备注草稿等偏好仍存 localStorage

---
 traffic-audit-web/src/views/ReportExport.vue   |    8 ++++----
 traffic-audit-web/src/router/index.js          |    2 +-
 traffic-audit-web/src/views/Login.vue          |    8 ++++----
 traffic-audit-web/src/main.js                  |    8 ++++----
 traffic-audit-web/src/api/index.js             |    4 ++--
 traffic-audit-web/src/components/AppHeader.vue |    8 +++++---
 6 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/traffic-audit-web/src/api/index.js b/traffic-audit-web/src/api/index.js
index bc8a6c6..1a262c1 100644
--- a/traffic-audit-web/src/api/index.js
+++ b/traffic-audit-web/src/api/index.js
@@ -7,7 +7,7 @@
 })
 
 api.interceptors.request.use(config => {
-  const token = localStorage.getItem('token')
+  const token = sessionStorage.getItem('token')
   if (token) config.headers.Authorization = 'Bearer ' + token
   return config
 })
@@ -16,7 +16,7 @@
   response => response.data,
   error => {
     if (error.response && error.response.status === 401) {
-      localStorage.removeItem('token')
+      sessionStorage.removeItem('token')
       window.location.href = '/login'
       return Promise.reject(error)
     }
diff --git a/traffic-audit-web/src/components/AppHeader.vue b/traffic-audit-web/src/components/AppHeader.vue
index 09eb2bb..f4e1b04 100644
--- a/traffic-audit-web/src/components/AppHeader.vue
+++ b/traffic-audit-web/src/components/AppHeader.vue
@@ -20,7 +20,7 @@
   },
   computed: {
     username() {
-      return localStorage.getItem('username') || 'admin'
+      return sessionStorage.getItem('username') || 'admin'
     }
   },
   methods: {
@@ -30,8 +30,10 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        localStorage.removeItem('token')
-        localStorage.removeItem('username')
+        sessionStorage.removeItem('token')
+        sessionStorage.removeItem('username')
+        sessionStorage.removeItem('realName')
+        sessionStorage.removeItem('modules')
         this.$message.success('宸查��鍑虹櫥褰�')
         this.$router.push('/login')
       }).catch(() => {})
diff --git a/traffic-audit-web/src/main.js b/traffic-audit-web/src/main.js
index 6ff9576..7aea668 100644
--- a/traffic-audit-web/src/main.js
+++ b/traffic-audit-web/src/main.js
@@ -11,10 +11,10 @@
 Vue.mixin({
   methods: {
     logout() {
-      localStorage.removeItem('token')
-      localStorage.removeItem('username')
-      localStorage.removeItem('realName')
-      localStorage.removeItem('modules')
+      sessionStorage.removeItem('token')
+      sessionStorage.removeItem('username')
+      sessionStorage.removeItem('realName')
+      sessionStorage.removeItem('modules')
       this.$router.push('/login')
     }
   }
diff --git a/traffic-audit-web/src/router/index.js b/traffic-audit-web/src/router/index.js
index 0971ecf..6316dc6 100644
--- a/traffic-audit-web/src/router/index.js
+++ b/traffic-audit-web/src/router/index.js
@@ -19,7 +19,7 @@
 })
 
 router.beforeEach((to, from, next) => {
-  const token = localStorage.getItem('token')
+  const token = sessionStorage.getItem('token')
   if (to.path === '/login') {
     next(token ? '/dashboard' : undefined)
   } else {
diff --git a/traffic-audit-web/src/views/Login.vue b/traffic-audit-web/src/views/Login.vue
index f7dc1a7..19ca936 100644
--- a/traffic-audit-web/src/views/Login.vue
+++ b/traffic-audit-web/src/views/Login.vue
@@ -79,10 +79,10 @@
           this.loggingIn = false
           const d = res.data
           if (d.code === 200) {
-            localStorage.setItem('token', d.data.token)
-            localStorage.setItem('username', d.data.username)
-            localStorage.setItem('realName', d.data.realName || '')
-            localStorage.setItem('modules', d.data.modules || '')
+            sessionStorage.setItem('token', d.data.token)
+            sessionStorage.setItem('username', d.data.username)
+            sessionStorage.setItem('realName', d.data.realName || '')
+            sessionStorage.setItem('modules', d.data.modules || '')
             this.$message.success('鐧诲綍鎴愬姛')
             this.$router.push('/dashboard')
           } else if (d.code === 401) {
diff --git a/traffic-audit-web/src/views/ReportExport.vue b/traffic-audit-web/src/views/ReportExport.vue
index c7935b4..2530d22 100644
--- a/traffic-audit-web/src/views/ReportExport.vue
+++ b/traffic-audit-web/src/views/ReportExport.vue
@@ -211,10 +211,10 @@
     }
   },
   computed: {
-    username() { return localStorage.getItem('username') || '' },
-    realName() { return localStorage.getItem('realName') || '' },
+    username() { return sessionStorage.getItem('username') || '' },
+    realName() { return sessionStorage.getItem('realName') || '' },
     myModules() {
-      const s = localStorage.getItem('modules')
+      const s = sessionStorage.getItem('modules')
       if (!s) return []
       return s.split(',').filter(Boolean)
     },
@@ -264,7 +264,7 @@
       return m ? m.title : key
     },
     logout() {
-      localStorage.removeItem('token'); localStorage.removeItem('username'); localStorage.removeItem('realName'); localStorage.removeItem('modules')
+      sessionStorage.removeItem('token'); sessionStorage.removeItem('username'); sessionStorage.removeItem('realName'); sessionStorage.removeItem('modules')
       this.$router.push('/login')
     },
     // ==================== 鏌ヨ鏉′欢涓庣姸鎬佸埛鏂� ====================

--
Gitblit v1.9.1