From 92528d903854b02ba8eb3986006a8d0858481b5e Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期二, 01 九月 2026 08:53:16 +0800
Subject: [PATCH] fix: 数据导入页模板名/下载路径对齐实际模板文件(.xls→.xlsx、补个体客运模板下载路径)

---
 traffic-audit-web/src/views/ReportExport.vue |   41 +++++++++++++++++++++--------------------
 1 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/traffic-audit-web/src/views/ReportExport.vue b/traffic-audit-web/src/views/ReportExport.vue
index bcfd56b..ba187d1 100644
--- a/traffic-audit-web/src/views/ReportExport.vue
+++ b/traffic-audit-web/src/views/ReportExport.vue
@@ -1,9 +1,9 @@
 <template>
-  <el-container>
-    <el-header>浜ら�氱粺璁℃姤琛ㄥ鏍哥郴缁� - 鎶ヨ〃鐢熸垚</el-header>
+  <el-container direction="vertical">
+    <app-header title="浜ら�氱粺璁℃姤琛ㄥ鏍哥郴缁� - 鎶ヨ〃鐢熸垚"></app-header>
     <el-container>
       <el-aside width="200px">
-        <el-menu router :default-active="activeMenu">
+        <el-menu ref="sideMenu" router :default-active="$route.path" @select="onMenuSelect">
           <el-menu-item index="/dashboard">宸ヤ綔鍙�</el-menu-item>
           <el-menu-item index="/import">鏁版嵁瀵煎叆</el-menu-item>
           <el-menu-item index="/data">鏁版嵁鏌ョ湅</el-menu-item>
@@ -12,7 +12,6 @@
           <el-menu-item index="/report">鎶ヨ〃鐢熸垚</el-menu-item>
           <el-menu-item index="/rules">瑙勫垯绠$悊</el-menu-item>
           <el-menu-item index="/users">鐢ㄦ埛绠$悊</el-menu-item>
-          <el-menu-item index="/login" @click="logout">閫�鍑虹櫥褰�</el-menu-item>
         </el-menu>
       </el-aside>
       <el-main>
@@ -26,12 +25,12 @@
             </div>
           </div>
 
-          <!-- 绗簩琛岋細鎶ヨ〃绫诲瀷 Tab锛堣揣杩� / 鏃呭 / 鎶曡祫 / 鑳借�� / 鍩庡競瀹㈣繍锛� -->
-          <el-tabs v-model="activeKey" class="module-tabs">
-            <el-tab-pane v-for="m in modules" :key="m.key" :name="m.key">
-              <span slot="label">{{ m.title }}<el-tag v-if="m.tag" size="mini" :type="m.tagType || 'info'" style="margin-left:6px">{{ m.tag }}</el-tag></span>
-            </el-tab-pane>
-          </el-tabs>
+          <!-- 绗簩琛岋細鎶ヨ〃绫诲瀷鍒囨崲锛堣揣杩� / 鏃呭 / 鎶曡祫 / 鑳借�� / 鍩庡競瀹㈣繍锛夛紱el-radio-group 鏇夸唬 el-tabs锛岃閬� el-tabs 甯冨眬鏃犻檺寰幆锛堜笌 /import 淇涓�鑷达級 -->
+          <el-radio-group v-model="activeKey" class="module-tabs">
+            <el-radio-button v-for="m in modules" :key="m.key" :label="m.key">
+              {{ m.title }}<el-tag v-if="m.tag" size="mini" :type="m.tagType || 'info'" style="margin-left:6px">{{ m.tag }}</el-tag>
+            </el-radio-button>
+          </el-radio-group>
 
           <!-- 绗笁琛岋細鏌ヨ鏉′欢鍖猴紙鍛ㄦ湡 + 鏈堜唤 + 鏌ヨ锛� -->
           <section class="query-panel">
@@ -146,14 +145,15 @@
 </template>
 
 <script>
+import AppHeader from '@/components/AppHeader.vue'
 import api from '@/api'
 
 export default {
+  components: { AppHeader },
   name: 'ReportExport',
   data() {
     return {
       loading: '',
-      activeMenu: '/report',
       activeKey: '',
       updatedAt: '',
       // 鏌ヨ鏉′欢锛歝ycle 鍛ㄦ湡锛坢onth 鏈堟姤 / quarter 瀛f姤 / year 骞存姤锛夛紝period 鎶ヨ〃鏈燂紙鏈堜唤 yyyy-MM 鎴栧勾浠� yyyy锛�
@@ -210,10 +210,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)
     },
@@ -263,7 +263,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')
     },
     // ==================== 鏌ヨ鏉′欢涓庣姸鎬佸埛鏂� ====================
@@ -303,7 +303,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 => {
@@ -348,7 +348,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 => {
@@ -386,18 +386,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)
@@ -419,6 +419,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