From 7a17662bdadf36c4e30bd53b896571612d48abbb Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 09 九月 2026 11:17:38 +0800
Subject: [PATCH] fix: 4项整改——审核结果按模板双Sheet导出(仅核实型+状态筛选)/明细表格化、数据查看分组选择与隐藏三列、报表页隐藏货运旅客城市客运小表、整本预览展示货运城市客运中口径当月累计同比 + 测试报告与工作日结

---
 traffic-audit-web/src/views/AuditResult.vue |  100 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 64 insertions(+), 36 deletions(-)

diff --git a/traffic-audit-web/src/views/AuditResult.vue b/traffic-audit-web/src/views/AuditResult.vue
index 7c510d5..f4b7278 100644
--- a/traffic-audit-web/src/views/AuditResult.vue
+++ b/traffic-audit-web/src/views/AuditResult.vue
@@ -59,6 +59,19 @@
               <el-option v-for="rn in ruleOptions" :key="rn" :label="rn" :value="rn"></el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="闂绫诲瀷">
+            <el-radio-group v-model="issueScope" size="small" @change="updateBatchSelection">
+              <el-radio-button label="verify">鏍稿疄鍨�</el-radio-button>
+              <el-radio-button label="all">鍏ㄩ儴</el-radio-button>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="鐘舵��">
+            <el-select v-model="statusScope" style="width:110px" @change="updateBatchSelection">
+              <el-option label="鍏ㄩ儴" value="all"></el-option>
+              <el-option label="寰呭鐞�" value="pending"></el-option>
+              <el-option label="宸插鐞�" value="handled"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="瑙嗗浘">
             <el-radio-group v-model="viewMode">
               <el-radio label="detail">鎸夋潯鏄庣粏</el-radio>
@@ -98,45 +111,52 @@
           鍏� {{ results.length }} 鏉¢棶棰橈紝{{ mergedResults.length }} 瀹朵紒涓�
         </div>
         <div class="table-area" style="flex:1;min-height:0">
-        <!-- 鏄庣粏瑙嗗浘锛氫竴鏉¢棶棰樹竴寮犲崱鐗� -->
+        <!-- 鏄庣粏瑙嗗浘锛氫竴鏉¢棶棰樹竴琛岋紙涓庡鍑烘ā鏉� Sheet鈥滃鏍哥粨鏋溾�濆悓娆撅級 -->
         <div v-if="viewMode === 'detail'" class="detail-cards-wrap" v-loading="loading">
           <div class="detail-toolbar">
             <el-checkbox :value="allSelected" :indeterminate="someSelected" @change="toggleSelectAll">鍏ㄩ�夊綋鍓� {{ filteredResults.length }} 鏉�</el-checkbox>
             <span class="toolbar-tip">鍕鹃�夊悗鍙壒閲忕‘璁� / 蹇界暐</span>
           </div>
-          <div v-for="row in filteredResults" :key="row.id" class="detail-card"
-               :class="{ 'card-red': row.alertLevel === 'RED', 'card-yellow': row.alertLevel === 'YELLOW', 'card-done': row.status !== 'PENDING' }">
-            <div class="card-head">
-              <el-checkbox v-model="row._selected" @change="updateBatchSelection"></el-checkbox>
-              <div class="card-ent">
-                <div class="ent-name">{{ row.enterpriseName || row.city || '鏈煡浼佷笟' }}</div>
-                <div class="ent-sub">{{ row.reportPeriod }}</div>
-              </div>
-              <el-tag :type="row.alertLevel === 'RED' ? 'danger' : 'warning'" size="small" effect="dark">{{ row.alertLevel }}</el-tag>
-              <el-tag :type="statusType(row.status)" size="small" effect="plain" class="status-tag">
-                <i :class="statusIcon(row.status)"></i> {{ statusText(row.status) }}
-              </el-tag>
-              <span class="spacer"></span>
-              <el-link v-if="dataType(reportType)" type="primary" :underline="false" size="mini" @click="openMonthReport(row)">鏁版嵁</el-link>
-              <el-button v-if="row.status === 'PENDING'" size="mini" type="success" icon="el-icon-check" round @click="review(row, 'CONFIRMED')">纭</el-button>
-              <el-button v-if="row.status === 'PENDING'" size="mini" type="info" icon="el-icon-close" round plain @click="review(row, 'IGNORED')">蹇界暐</el-button>
-              <span v-else class="done-text">宸插鐞�</span>
+          <el-table :data="filteredResults" border stripe height="100%"
+            :header-cell-style="{ background: '#F5F7FA', color: '#303133', fontWeight: 600 }">
+            <el-table-column width="40">
+              <template slot-scope="{ row }">
+                <el-checkbox v-model="row._selected" @change="updateBatchSelection"></el-checkbox>
+              </template>
+            </el-table-column>
+            <el-table-column prop="reportPeriod" label="鎶ヨ〃鏈�" width="90"></el-table-column>
+            <el-table-column label="浼佷笟/甯傚窞" min-width="200" show-overflow-tooltip>
+              <template slot-scope="{ row }">{{ row.enterpriseName || row.city || '鏈煡浼佷笟' }}</template>
+            </el-table-column>
+            <el-table-column prop="ruleCode" label="瑙勫垯缂栫爜" width="100"></el-table-column>
+            <el-table-column prop="ruleName" label="瀹℃牳瑙勫垯" min-width="150" show-overflow-tooltip></el-table-column>
+            <el-table-column label="绛夌骇" width="76">
+              <template slot-scope="{ row }">
+                <el-tag :type="row.alertLevel === 'RED' ? 'danger' : 'warning'" size="mini">{{ row.alertLevel }}</el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column prop="actualValue" label="瀹為檯鍊�" min-width="230" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="thresholdValue" label="闃堝��/鍩哄噯" min-width="140" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="deviation" label="鍋忓樊璇存槑" min-width="170" show-overflow-tooltip></el-table-column>
+            <el-table-column label="鐘舵��" width="92">
+              <template slot-scope="{ row }">
+                <el-tag :type="statusType(row.status)" size="mini">
+                  <i :class="statusIcon(row.status)"></i> {{ statusText(row.status) }}
+                </el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column label="鎿嶄綔" width="185" align="right">
+              <template slot-scope="{ row }">
+                <el-link v-if="dataType(reportType)" type="primary" :underline="false" size="mini" @click="openMonthReport(row)">鏁版嵁</el-link>
+                <el-button v-if="row.status === 'PENDING'" size="mini" type="success" icon="el-icon-check" round @click="review(row, 'CONFIRMED')">纭</el-button>
+                <el-button v-if="row.status === 'PENDING'" size="mini" type="info" icon="el-icon-close" round plain @click="review(row, 'IGNORED')">蹇界暐</el-button>
+                <span v-else class="done-text">宸插鐞�</span>
+              </template>
+            </el-table-column>
+            <div slot="empty">
+              <el-empty description="褰撳墠绛涢�夋潯浠朵笅娌℃湁闂鏁版嵁"></el-empty>
             </div>
-            <div class="card-body">
-              <div class="rule-title">
-                <b>{{ row.ruleName }}</b>
-                <span class="rule-code">{{ row.ruleCode }}</span>
-              </div>
-              <div class="card-details">
-                <div class="detail-line"><span class="dt-label">瀹為檯</span><span class="dt-val">{{ row.actualValue }}</span></div>
-                <div class="detail-line"><span class="dt-label">鍩哄噯</span><span class="dt-val">{{ row.thresholdValue }}</span></div>
-                <div class="detail-line"><span class="dt-label">宸紓</span><span class="dt-val dt-warn">{{ row.deviation }}</span></div>
-              </div>
-            </div>
-          </div>
-          <div v-if="!filteredResults.length" class="empty-tip">
-            <el-empty description="褰撳墠绛涢�夋潯浠朵笅娌℃湁闂鏁版嵁"></el-empty>
-          </div>
+          </el-table>
         </div>
         <!-- 鍚堝苟瑙嗗浘 -->
         <el-table v-else :data="mergedResults" border stripe v-loading="loading" height="100%"
@@ -334,7 +354,7 @@
   data() {
     return {
       period: '', reportType: 'H2032', loading: false, marking: false, results: [], ruleStats: [], statsCollapsed: false,
-      enterpriseFilter: '', ruleFilter: '', viewMode: 'merged', batchSelection: [], focusMode: false,
+      enterpriseFilter: '', ruleFilter: '', viewMode: 'detail', issueScope: 'verify', statusScope: 'all', batchSelection: [], focusMode: false,
       explainDrafts: {}, savingExplainId: null, expandedExplain: null,
       monthVisible: false, monthLoading: false, monthType: '', monthPeriod: '', monthKeyword: '', monthRecords: [], monthColumns: []
     }
@@ -364,13 +384,20 @@
       const list = this.filteredResults
       return list.some(r => r._selected) && !this.allSelected
     },
+    isReminderRow(r) {
+      return !!(r && r.ruleCode === 'RULE_004')
+    },
     filteredResults() {
       const kw = (this.enterpriseFilter || '').trim()
       const rule = this.ruleFilter
-      if (!kw && !rule) return this.results
+      const scope = this.issueScope || 'verify'
+      const st = this.statusScope || 'all'
       return this.results.filter(r => {
         if (kw && !(r.enterpriseName || '').includes(kw)) return false
         if (rule && r.ruleName !== rule) return false
+        if (scope === 'verify' && this.isReminderRow(r)) return false
+        if (st === 'pending' && r.status !== 'PENDING') return false
+        if (st === 'handled' && (!r.status || r.status === 'PENDING')) return false
         return true
       })
     },
@@ -577,7 +604,8 @@
     },
     exportExcel() {
       if (!this.period) { this.$message.warning('璇烽�夋嫨鎶ヨ〃鏈�'); return }
-      window.open('/api/audit/export?period=' + this.period + '&reportType=' + this.reportType)
+      const q = 'period=' + this.period + '&reportType=' + this.reportType + '&onlyVerify=' + (this.issueScope !== 'all') + '&status=' + (this.statusScope || 'all')
+      window.open('/api/audit/export?' + q)
     },
     review(row, status) {
       if (status === 'IGNORED') {

--
Gitblit v1.9.1