From 49fea21571a4060aa8570cbf220088352e2ccf15 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 16 九月 2026 17:33:01 +0800
Subject: [PATCH] docs(工作日结): 补记 2026-09-16 收工记录(origin 已推 80e0879、gitea 仍不通、未提交项与明日计划)
---
traffic-audit-web/src/views/ReportExport.vue | 64 ++++++++++++++++++++++++++-----
1 files changed, 53 insertions(+), 11 deletions(-)
diff --git a/traffic-audit-web/src/views/ReportExport.vue b/traffic-audit-web/src/views/ReportExport.vue
index 54f5513..bf645b9 100644
--- a/traffic-audit-web/src/views/ReportExport.vue
+++ b/traffic-audit-web/src/views/ReportExport.vue
@@ -99,12 +99,14 @@
</div>
</el-alert>
</div>
- <el-dialog :title="'棰勮鏁版嵁 - ' + previewModule + '锛�' + previewPeriod + '锛�'" :visible.sync="previewVisible" width="760px">
+ <el-dialog :title="'棰勮鏁版嵁 - ' + previewModule + '锛�' + previewPeriod + '锛�'" :visible.sync="previewVisible" width="760px"
+ top="5vh" custom-class="pv-dialog" v-dialog-drag>
<div class="preview-body">
<div v-for="it in previewItems" :key="it.key" class="preview-item">
<div class="preview-head">
<span class="preview-name">{{ it.label }}</span>
- <span class="preview-rows">鍏� {{ it.rowCount || 0 }} 琛�</span>
+ <span class="preview-rows" v-if="it.key === 'summaryWorkbook'">鎸囨爣 {{ (it.summary || []).length }} 椤�</span>
+ <span class="preview-rows" v-else>鍏� {{ it.rowCount || 0 }} 琛屾槑缁�</span>
</div>
<div class="preview-coverage">
<span class="cov-label">鏈堝害瑕嗙洊锛�</span>
@@ -114,7 +116,7 @@
</div>
<table class="preview-summary wb-table" v-if="it.key === 'summaryWorkbook' && it.summary && it.summary.length">
<thead>
- <tr><th style="width:44%">鎸囨爣</th><th style="width:30%">鏁版嵁</th><th>鍚屾瘮</th></tr>
+ <tr><th style="width:12%">鍒嗙被</th><th style="width:40%">鎸囨爣</th><th style="width:28%">鏁版嵁</th><th>鍚屾瘮</th></tr>
</thead>
<tbody>
<template v-for="(sec, si) in wbRows(it.summary)">
@@ -130,7 +132,7 @@
<div v-if="it.key === 'summaryWorkbook' && wbMissing(it.summary)" class="wb-note">
閮ㄥ垎鎸囨爣缂哄皯涓婂勾鍚屾湡锛坽{ wbPrevYear() }}锛夊熀鏈熸暟鎹紝鍚屾瘮鏆傛湭璁$畻
</div>
- <table class="preview-summary" v-else-if="it.summary && it.summary.length">
+ <table class="preview-summary" v-if="it.key !== 'summaryWorkbook' && it.summary && it.summary.length">
<tbody>
<tr v-for="(s, i) in it.summary" :key="i">
<td>{{ s.label }}</td>
@@ -388,7 +390,7 @@
this.previewVisible = true
this.loading = ''
})
- .catch(err => this.failWith(err))
+ .catch(err => this.failWith(err, '棰勮'))
},
fmtVal(v) {
if (v === null || v === undefined || v === '') return '鈥�'
@@ -505,13 +507,45 @@
})
.catch(() => doExport())
},
- failWith(err) {
+ // 棰勮/瀵煎嚭澶辫触缁熶竴鎻愮ず锛氬尯鍒嗏�滆繛涓嶄笂鏈嶅姟鍣ㄢ�濅笌鈥滃悗绔繑鍥炵殑閿欒鍘熷洜鈥濄��
+ // 瀵煎嚭鎺ュ彛鐢� responseType: 'blob'锛屾姤閿欐椂 data 涔熸槸 Blob锛屽繀椤诲厛璇绘枃鏈啀瑙f瀽锛�
+ // 鍚﹀垯鎷夸笉鍒板悗绔湡瀹炲師鍥狅紝鍙細鏄剧ず绗肩粺鐨勨�滆纭宸插鍏ュ搴旀暟鎹�濄��
+ failWith(err, action) {
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
- this.$message.error('瀵煎嚭澶辫触锛�' + (msg || '璇风‘璁ゅ凡瀵煎叆瀵瑰簲鏁版嵁锛屾垨鏌ョ湅鍚庣鏃ュ織'))
- this.loading = ''
+ const act = action || '瀵煎嚭'
+ const finish = (reason) => {
+ this.$message.error(act + '澶辫触锛�' + reason)
+ this.loading = ''
+ }
+ if (!err || !err.response) {
+ if (err && err.code === 'ECONNABORTED') { finish('璇锋眰瓒呮椂锛岃绋嶅悗閲嶈瘯'); return }
+ finish('鏃犳硶杩炴帴鏈嶅姟鍣紝璇锋鏌ョ綉缁滆繛鎺ワ紝鎴栫‘璁ゅ悗绔湇鍔℃槸鍚﹀凡鍚姩')
+ return
+ }
+ const d = err.response.data
+ const fallback = '璇风‘璁ゅ凡瀵煎叆瀵瑰簲鏁版嵁锛屾垨鏌ョ湅鍚庣鏃ュ織'
+ if (d && typeof d.text === 'function') {
+ Promise.resolve(d.text()).then(txt => finish(this.errReason(txt) || fallback)).catch(() => finish(fallback))
+ return
+ }
+ finish(this.errReason(typeof d === 'string' ? d : (d && d.message)) || fallback)
+ },
+ // 鍚庣寮傚父鍝嶅簲鍙兘鏄� JSON/HTML/绾枃鏈紝灏介噺鎻愬彇鍑哄彲璇荤殑鍘熷洜
+ errReason(raw) {
+ if (!raw) return ''
+ let text = String(raw).trim()
+ if (text.charAt(0) === '{' || text.charAt(0) === '[') {
+ try {
+ const j = JSON.parse(text)
+ if (j && j.message) return j.message
+ } catch (e) { /* 闈� JSON锛屾寜绾枃鏈鐞� */ }
+ }
+ text = text.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim()
+ // 寮�鍙戜唬鐞�/缃戠粶灞傛姤閿欒浆鎴愪汉璇濓紝閬垮厤鐩存帴鎶� ECONNREFUSED 涔嬬被鎶涚粰鐢ㄦ埛
+ if (/ECONNREFUSED|ECONNRESET|Proxy error|socket hang up|Network Error|Failed to fetch/i.test(text)) {
+ return '鏃犳硶杩炴帴鏈嶅姟鍣紝璇锋鏌ョ綉缁滆繛鎺ワ紝鎴栫‘璁ゅ悗绔湇鍔℃槸鍚﹀凡鍚姩'
+ }
+ return text.length > 200 ? text.slice(0, 200) + '鈥�' : text
},
downloadBlob(res, fileName) {
const isZip = /\.zip$/.test(fileName)
@@ -579,3 +613,11 @@
.wb-yoy.yoy-empty { color:#C0C4CC; }
.wb-note { color:#E6A23C; font-size:12px; margin:2px 0 8px; }
</style>
+
+<style>
+/* 棰勮鏁版嵁寮圭獥锛氬渾瑙� + 鍙�氳繃鏍囬鏍忔嫋鍔紙v-dialog-drag 鎸囦护锛夈��
+ 涓嶈兘鍐欒繘 scoped锛歟l-dialog 榛樿 append-to-body锛孌OM 鎸傚湪 body 涓婏紝scoped 閫夋嫨鍣ㄥ尮閰嶄笉鍒般�� */
+.pv-dialog { border-radius: 10px; overflow: hidden; }
+.pv-dialog .el-dialog__header { cursor: move; user-select: none; -webkit-user-select: none; }
+.pv-dialog .el-dialog__headerbtn { cursor: pointer; }
+</style>
\ No newline at end of file
--
Gitblit v1.9.1