zhizhijie
9 天以前 654556a05394481b138b1070d83a22dbf311e94b
traffic-audit-web/src/views/ReportExport.vue
@@ -171,13 +171,13 @@
            <p class="task-meta" v-if="taskInfo.period">报表期 {{ taskInfo.period }} {{ taskInfo.fromCache ? '上次生成用时' : '已用' }} {{ (taskInfo.elapsedMs / 1000).toFixed(1) }} 秒</p>
            <p class="task-meta" v-if="taskInfo.fromCache">本次直接使用 {{ taskCacheTime }} 生成的结果(10 分钟内且期间没有新导入数据)。如需按最新数据重算,请点「重新生成」。</p>
            <p class="task-done" v-if="taskDownloaded">
              已自动下载:<b>{{ taskFileName }}</b><span v-if="taskFileSize">({{ taskFileSizeText }})</span><br>
              浏览器没弹出下载时可点「再次下载」——用本地缓存保存,不会重新请求服务器。
              已自动下载:<b>{{ taskFileName }}</b><span v-if="taskFileSize">({{ taskFileSizeText }})</span>,文件在浏览器默认下载目录。
            </p>
            <p class="task-error" v-else-if="taskDone">自动下载没成功,可点「保存文件」再存一次。</p>
            <p class="task-error" v-if="taskInfo.status === 'FAILED'">{{ taskInfo.error }}</p>
          </div>
          <span slot="footer">
            <el-button size="small" :disabled="!taskDone" @click="downloadTaskFile()">{{ taskDownloaded ? '再次下载' : (taskInfo.fromCache ? '下载' : '保存文件') }}</el-button>
            <el-button size="small" v-if="taskDone && !taskDownloaded" @click="downloadTaskFile()">保存文件</el-button>
            <el-button size="small" :disabled="taskRunning" @click="restartTask">重新生成</el-button>
            <el-button size="small" v-if="taskRunning" @click="minimizeTask">后台运行</el-button>
            <el-button size="small" v-else type="primary" @click="closeTask">关闭</el-button>
@@ -216,11 +216,10 @@
      taskVisible: false,
      taskInfo: {},
      taskTimer: null,
      // 进度弹窗:完成后会自动下载一次,这里记录「已下载」与文件信息(重复点击走本地缓存,不再请求后端)
      // 进度弹窗:完成后会自动下载一次,这里记录「是否已下载」与文件信息(已下载就不再显示下载按钮)
      taskDownloaded: false,
      taskFileName: '',
      taskFileSize: 0,
      taskBlob: null,
      taskKey: 'summaryWorkbook',
      modules: [
        {
@@ -548,7 +547,6 @@
      this.taskDownloaded = false
      this.taskFileName = ''
      this.taskFileSize = 0
      this.taskBlob = null
      this.loading = 'gen-' + this.curModule.key
      const params = Object.assign({}, this.buildParams(), { refresh: refresh ? 'true' : 'false' })
      api.get('/report/exportTask/summaryWorkbook', { params, timeout: 60000 })
@@ -612,15 +610,8 @@
      if (!id) return
      const name = this.taskInfo.fileName || ('生成_道路运输量汇总表_' + this.period + '.xlsx')
      this.taskFileName = name
      // 已经下载过:直接用内存里的 Blob 再存一次,不再请求后端(避免同一份文件重复拉取 1MB+)
      if (this.taskBlob) {
        this.downloadBlob(this.taskBlob, name)
        this.$message.success('已从本地缓存保存:' + name)
        return
      }
      api.get('/report/exportTask/' + id + '/file', { responseType: 'blob', timeout: 120000 })
        .then(res => {
          this.taskBlob = res
          this.taskFileSize = (res && res.size) || 0
          this.taskDownloaded = true
          this.downloadBlob(res, name)