From f0597c28b7d722301f2177e3ef46d2ce6e95b102 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期一, 31 八月 2026 09:15:07 +0800
Subject: [PATCH] docs: 崩溃根因实锤更新——el-tabs 布局无限循环(684da41),sessionStorage 强制登录完成(c62a61c),4 个菜单问题全部闭环

---
 traffic-audit-web/src/views/ReportExport.vue |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/traffic-audit-web/src/views/ReportExport.vue b/traffic-audit-web/src/views/ReportExport.vue
index ca276fb..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')
     },
     // ==================== 鏌ヨ鏉′欢涓庣姸鎬佸埛鏂� ====================
@@ -304,7 +304,7 @@
       const m = this.curModule
       if (!m || !this.period) return
       const params = Object.assign(this.buildParams(), { types: m.items.map(i => i.key).join(',') })
-      api.get('/report/ready', { params })
+      api.get('/report/ready', { params, timeout: 60000 })
         .then(res => {
           const list = (res && res.data && res.data.items) || []
           list.forEach(r => {
@@ -349,7 +349,7 @@
       if (!items.length) { this.$message.warning('璇烽�夋嫨瑕侀瑙堢殑鎶ヨ〃'); return }
       this.loading = 'preview-' + m.key
       const params = Object.assign(this.buildParams(), { types: items.map(i => i.key).join(',') })
-      api.get('/report/preview', { params })
+      api.get('/report/preview', { params, timeout: 60000 })
         .then(res => {
           const list = (res && res.data && res.data.items) || []
           this.previewItems = list.map(it => {
@@ -387,18 +387,18 @@
       const params = this.buildParams()
       const doExport = () => {
         if (items.length === 1) {
-          api.get('/report/export/' + items[0].key, { params, responseType: 'blob' })
+          api.get('/report/export/' + items[0].key, { params, responseType: 'blob', timeout: 120000 })
             .then(res => { this.downloadBlob(res, items[0].fileName); this.$message.success('鎶ヨ〃瀵煎嚭鎴愬姛'); this.loading = '' })
             .catch(err => this.failWith(err))
           return
         }
         const zipParams = Object.assign({}, params, { types: items.map(i => i.key).join(',') })
-        api.get('/report/export/selected', { params: zipParams, responseType: 'blob' })
+        api.get('/report/export/selected', { params: zipParams, responseType: 'blob', timeout: 120000 })
           .then(res => { this.downloadBlob(res, '鐢熸垚_鎵�閫夋姤琛╛' + this.period + '.zip'); this.$message.success('宸插鍑� ' + items.length + ' 寮犳姤琛紙zip锛�'); this.loading = '' })
           .catch(err => this.failWith(err))
       }
       const readyParams = Object.assign({}, params, { types: items.map(i => i.key).join(',') })
-      api.get('/report/ready', { params: readyParams })
+      api.get('/report/ready', { params: readyParams, timeout: 60000 })
         .then(rd => {
           const list = (rd && rd.data && rd.data.items) || []
           const missing = list.filter(i => !i.ready)
@@ -420,6 +420,7 @@
         .catch(() => doExport())
     },
     failWith(err) {
+      if (err && err._toast) { this.loading = ''; return }
       let msg = ''
       const d = err && err.response && err.response.data
       if (d && typeof d === 'object' && d.message) msg = d.message

--
Gitblit v1.9.1