From d3d2f9861c3d4bccfb9594b7efd76e62d3b44b65 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期三, 03 六月 2026 16:41:31 +0800
Subject: [PATCH] feat: 添加合格率计算及显示功能

---
 src/views/reportAnalysis/reportManagement/index.vue |  758 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 410 insertions(+), 348 deletions(-)

diff --git a/src/views/reportAnalysis/reportManagement/index.vue b/src/views/reportAnalysis/reportManagement/index.vue
index 8cd237f..221ef86 100644
--- a/src/views/reportAnalysis/reportManagement/index.vue
+++ b/src/views/reportAnalysis/reportManagement/index.vue
@@ -1,315 +1,327 @@
 <template>
-  <div class="report-management">
-    <!-- 鍥捐〃鍖哄煙 -->
-    <div class="charts-container">
-      <el-row :gutter="20">
-        <!-- 鍚勭被鍨嬪畬鎴愭暟閲� -->
-        <el-col :span="9">
-          <el-card class="chart-card"
-                   shadow="hover">
-            <template #header>
-              <div class="card-header">
-                <div class="chart-title-line"></div>
-                <span>鍚勭被鍨嬪畬鎴愭暟閲�</span>
-              </div>
-            </template>
-            <div class="top-container">
-              <div class="typeNum">
-                <div class="typeNum-left">
-                  <img src="~@/assets/images/chartCard.svg"
-                       alt="鍥捐〃"
-                       style="width: 40px; height: 40px; object-fit: contain;">
-                  <div class="typeNum-left-text">鍘熸潗鏂�</div>
-                </div>
-                <div class="typeNum-center">
-                  <div class="typeNum-leftLine">-</div>
-                  <div class="typeNum-rightLine"></div>
-                </div>
-                <div class="typeNum-right">
-                  <div class="typeNum-right-top">
-                    <div class="typeNum-right-top-name">鎬绘暟閲�</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(0, 'totalCount') }} <span class="unit">涓�</span></div>
+  <div class="scale-container">
+    <div class="report-management-container"
+         :style="{ transform: `scale(${scaleRatio})` }">
+      <div class="report-management">
+        <!-- 鍥捐〃鍖哄煙 -->
+        <div class="charts-container">
+          <el-row :gutter="20">
+            <!-- 鍚勭被鍨嬪畬鎴愭暟閲� -->
+            <el-col :span="9">
+              <el-card class="chart-card"
+                       shadow="hover">
+                <template #header>
+                  <div class="card-header">
+                    <div class="chart-title-line"></div>
+                    <span>鍚勭被鍨嬪畬鎴愭暟閲�</span>
                   </div>
-                  <div class="typeNum-right-bottom">
-                    <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(0, 'completedCount') }} <span class="unit">涓�</span>
+                </template>
+                <div class="top-container">
+                  <div class="typeNum">
+                    <div class="typeNum-left">
+                      <img src="~@/assets/images/chartCard.svg"
+                           alt="鍥捐〃"
+                           style="width: 40px; height: 40px; object-fit: contain;">
+                      <div class="typeNum-left-text">鍘熸潗鏂�</div>
+                    </div>
+                    <div class="typeNum-center">
+                      <div class="typeNum-leftLine">-</div>
+                      <div class="typeNum-rightLine"></div>
+                    </div>
+                    <div class="typeNum-right">
+                      <div class="typeNum-right-top">
+                        <div class="typeNum-right-top-name">鎬绘暟閲�</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(0, 'totalCount') }} <span class="unit">涓�</span></div>
+                      </div>
+                      <div class="typeNum-right-bottom">
+                        <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(0, 'completedCount') }} <span class="unit">涓�</span>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="typeNum">
+                    <div class="typeNum-left">
+                      <img src="~@/assets/images/chartCard2.svg"
+                           alt="鍥捐〃"
+                           style="width: 40px; height: 40px; object-fit: contain;">
+                      <div class="typeNum-left-text"
+                           style="color: #5EB334;">鍗婃垚鍝�</div>
+                    </div>
+                    <div class="typeNum-center">
+                      <div class="typeNum-leftLine2">-</div>
+                      <div class="typeNum-rightLine2"></div>
+                    </div>
+                    <div class="typeNum-right">
+                      <div class="typeNum-right-top">
+                        <div class="typeNum-right-top-name">鎬绘暟閲�</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(1, 'totalCount') }} <span class="unit">涓�</span></div>
+                      </div>
+                      <div class="typeNum-right-bottom">
+                        <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(1, 'completedCount') }} <span class="unit">涓�</span>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="typeNum">
+                    <div class="typeNum-left">
+                      <img src="~@/assets/images/chartCard3.svg"
+                           alt="鍥捐〃"
+                           style="width: 40px; height: 40px; object-fit: contain;">
+                      <div class="typeNum-left-text"
+                           style="color: #8000FF;">鎴愬搧</div>
+                    </div>
+                    <div class="typeNum-center">
+                      <div class="typeNum-leftLine3">-</div>
+                      <div class="typeNum-rightLine3"></div>
+                    </div>
+                    <div class="typeNum-right">
+                      <div class="typeNum-right-top">
+                        <div class="typeNum-right-top-name">鎬绘暟閲�</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(2, 'totalCount') }} <span class="unit">涓�</span></div>
+                      </div>
+                      <div class="typeNum-right-bottom">
+                        <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
+                        <div class="typeNum-right-top-text">{{ getInspectStatValue(2, 'completedCount') }} <span class="unit">涓�</span>
+                        </div>
+                      </div>
                     </div>
                   </div>
                 </div>
-              </div>
-              <div class="typeNum">
-                <div class="typeNum-left">
-                  <img src="~@/assets/images/chartCard2.svg"
-                       alt="鍥捐〃"
-                       style="width: 40px; height: 40px; object-fit: contain;">
-                  <div class="typeNum-left-text"
-                       style="color: #5EB334;">鍗婃垚鍝�</div>
-                </div>
-                <div class="typeNum-center">
-                  <div class="typeNum-leftLine2">-</div>
-                  <div class="typeNum-rightLine2"></div>
-                </div>
-                <div class="typeNum-right">
-                  <div class="typeNum-right-top">
-                    <div class="typeNum-right-top-name">鎬绘暟閲�</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(1, 'totalCount') }} <span class="unit">涓�</span></div>
+              </el-card>
+            </el-col>
+            <!-- 璐ㄦ鍚堟牸鐜� -->
+            <el-col :span="15">
+              <el-card class="chart-card"
+                       shadow="hover">
+                <template #header>
+                  <div class="card-header">
+                    <div class="chart-title-line"></div>
+                    <span>璐ㄦ鍚堟牸鐜�</span>
                   </div>
-                  <div class="typeNum-right-bottom">
-                    <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(1, 'completedCount') }} <span class="unit">涓�</span>
+                </template>
+                <div class="top-container flex-center">
+                  <div class="quality-card blue-card">
+                    <div class="quality-card-title">
+                      <img src="~@/assets/images/chartCard.svg"
+                           alt="鍘熸潗鏂�"
+                           style="width: 24px; height: 24px; margin-right: 8px;">
+                      鍘熸潗鏂欏悎鏍肩巼
+                    </div>
+                    <div class="quality-card-content">
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(0, 'completionRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="materialCompletionChart"></div>
+                      </div>
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label green-label">鍚堟牸鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(0, 'passRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="materialQualityChart"></div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="quality-card green-card">
+                    <div class="quality-card-title">
+                      <img src="~@/assets/images/chartCard2.svg"
+                           alt="鍗婃垚鍝�"
+                           style="width: 24px; height: 24px; margin-right: 8px;">
+                      鍗婃垚鍝佸悎鏍肩巼
+                    </div>
+                    <div class="quality-card-content">
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(1, 'completionRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="semiCompletionChart"></div>
+                      </div>
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label green-label">鍚堟牸鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(1, 'passRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="semiQualityChart"></div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="quality-card purple-card">
+                    <div class="quality-card-title">
+                      <img src="~@/assets/images/chartCard3.svg"
+                           alt="鎴愬搧"
+                           style="width: 24px; height: 24px; margin-right: 8px;">
+                      鎴愬搧鍚堟牸鐜�
+                    </div>
+                    <div class="quality-card-content">
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(2, 'completionRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="finalCompletionChart"></div>
+                      </div>
+                      <div class="quality-item">
+                        <div>
+                          <div class="quality-item-label green-label">鍚堟牸鐜�</div>
+                          <div class="quality-item-tip">鍗犳瘮</div>
+                          <div class="quality-item-value">{{ getPassRateStatValue(2, 'passRate') }}</div>
+                        </div>
+                        <div class="quality-item-chart"
+                             ref="finalQualityChart"></div>
+                      </div>
                     </div>
                   </div>
                 </div>
-              </div>
-              <div class="typeNum">
-                <div class="typeNum-left">
-                  <img src="~@/assets/images/chartCard3.svg"
-                       alt="鍥捐〃"
-                       style="width: 40px; height: 40px; object-fit: contain;">
-                  <div class="typeNum-left-text"
-                       style="color: #8000FF;">鎴愬搧</div>
-                </div>
-                <div class="typeNum-center">
-                  <div class="typeNum-leftLine3">-</div>
-                  <div class="typeNum-rightLine3"></div>
-                </div>
-                <div class="typeNum-right">
-                  <div class="typeNum-right-top">
-                    <div class="typeNum-right-top-name">鎬绘暟閲�</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(2, 'totalCount') }} <span class="unit">涓�</span></div>
+              </el-card>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="charts-container">
+          <el-row :gutter="20">
+            <!-- 璐ㄦ鍚堟牸鐜� -->
+            <el-col :span="24">
+              <el-card class="chart-card"
+                       shadow="hover">
+                <template #header>
+                  <div class="card-header">
+                    <div class="chart-title-line"></div>
+                    <span>璐ㄦ鍚堟牸鐜�</span>
                   </div>
-                  <div class="typeNum-right-bottom">
-                    <div class="typeNum-right-top-name">宸插畬鎴愭暟</div>
-                    <div class="typeNum-right-top-text">{{ getInspectStatValue(2, 'completedCount') }} <span class="unit">涓�</span>
+                </template>
+                <div class="chart-container-line">
+                  <div class="container-line-left">
+                    <div style="height: 100%; width: 100%;"
+                         ref="usageChartRef">
+                    </div>
+                  </div>
+                  <div class="container-line-right">
+                    <div style="height: 80%; width: 100%;"
+                         ref="inspectionChartRef">
+                    </div>
+                    <div class="container-line-right-bottom">
+                      <div class="inspection-chart-box">
+                        <div class="chart-box-title">鍘熸潗鏂欐�绘暟</div>
+                        <div class="chart-box-num">{{ getYearlyStatValue(0, 'totalCount') }}</div>
+                      </div>
+                      <div class="inspection-chart-box">
+                        <div class="chart-box-title">鍗婃垚鍝佹�绘暟</div>
+                        <div class="chart-box-num">{{ getYearlyStatValue(1, 'totalCount') }}</div>
+                      </div>
+                      <div class="inspection-chart-box">
+                        <div class="chart-box-title">鎴愬搧鎬绘暟</div>
+                        <div class="chart-box-num">{{ getYearlyStatValue(2, 'totalCount') }}</div>
+                      </div>
                     </div>
                   </div>
                 </div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-        <!-- 璐ㄦ鍚堟牸鐜� -->
-        <el-col :span="15">
-          <el-card class="chart-card"
-                   shadow="hover">
-            <template #header>
-              <div class="card-header">
-                <div class="chart-title-line"></div>
-                <span>璐ㄦ鍚堟牸鐜�</span>
-              </div>
-            </template>
-            <div class="top-container flex-center">
-              <div class="quality-card blue-card">
-                <div class="quality-card-title">
-                  <img src="~@/assets/images/chartCard.svg"
-                       alt="鍘熸潗鏂�"
-                       style="width: 24px; height: 24px; margin-right: 8px;">
-                  鍘熸潗鏂欏悎鏍肩巼
-                </div>
-                <div class="quality-card-content">
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(0, 'completionRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="materialCompletionChart"></div>
-                  </div>
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label green-label">鍚堟牸鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(0, 'passRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="materialQualityChart"></div>
-                  </div>
-                </div>
-              </div>
-              <div class="quality-card green-card">
-                <div class="quality-card-title">
-                  <img src="~@/assets/images/chartCard2.svg"
-                       alt="鍗婃垚鍝�"
-                       style="width: 24px; height: 24px; margin-right: 8px;">
-                  鍗婃垚鍝佸悎鏍肩巼
-                </div>
-                <div class="quality-card-content">
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(1, 'completionRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="semiCompletionChart"></div>
-                  </div>
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label green-label">鍚堟牸鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(1, 'passRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="semiQualityChart"></div>
-                  </div>
-                </div>
-              </div>
-              <div class="quality-card purple-card">
-                <div class="quality-card-title">
-                  <img src="~@/assets/images/chartCard3.svg"
-                       alt="鎴愬搧"
-                       style="width: 24px; height: 24px; margin-right: 8px;">
-                  鎴愬搧鍚堟牸鐜�
-                </div>
-                <div class="quality-card-content">
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label blue-label">瀹屾垚鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(2, 'completionRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="finalCompletionChart"></div>
-                  </div>
-                  <div class="quality-item">
-                    <div>
-                      <div class="quality-item-label green-label">鍚堟牸鐜�</div>
-                      <div class="quality-item-tip">鍗犳瘮</div>
-                      <div class="quality-item-value">{{ getPassRateStatValue(2, 'passRate') }}</div>
-                    </div>
-                    <div class="quality-item-chart"
-                         ref="finalQualityChart"></div>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="charts-container">
-      <el-row :gutter="20">
-        <!-- 璐ㄦ鍚堟牸鐜� -->
-        <el-col :span="24">
-          <el-card class="chart-card"
-                   shadow="hover">
-            <template #header>
-              <div class="card-header">
-                <div class="chart-title-line"></div>
-                <span>璐ㄦ鍚堟牸鐜�</span>
-              </div>
-            </template>
-            <div class="chart-container-line">
-              <div class="container-line-left">
-                <div style="height: 100%; width: 100%;"
-                     ref="usageChartRef">
-                </div>
-              </div>
-              <div class="container-line-right">
-                <div style="height: 80%; width: 100%;"
-                     ref="inspectionChartRef">
-                </div>
-                <div class="container-line-right-bottom">
-                  <div class="inspection-chart-box">
-                    <div class="chart-box-title">鍘熸潗鏂欐�绘暟</div>
-                    <div class="chart-box-num">{{ getYearlyStatValue(0, 'totalCount') }}</div>
-                  </div>
-                  <div class="inspection-chart-box">
-                    <div class="chart-box-title">鍗婃垚鍝佹�绘暟</div>
-                    <div class="chart-box-num">{{ getYearlyStatValue(1, 'totalCount') }}</div>
-                  </div>
-                  <div class="inspection-chart-box">
-                    <div class="chart-box-title">鎴愬搧鎬绘暟</div>
-                    <div class="chart-box-num">{{ getYearlyStatValue(2, 'totalCount') }}</div>
-                  </div>
-                </div>
-              </div>
-            </div>
-            <!-- </div> -->
-            <!-- <div ref="sampleChartRef"
+                <!-- </div> -->
+                <!-- <div ref="sampleChartRef"
                  class="chart-container"></div> -->
-            <div class="yearchange">
-              <div style="margin-right: 8px;font-size: 14px;">骞翠唤:</div>
-              <el-date-picker v-model="value3"
-                              size="mini"
-                              :clearable="false"
-                              style="width: 60px;"
-                              type="year"
-                              :disabled-date="disabledDate"
-                              placeholder="">
-              </el-date-picker>
-            </div>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="charts-container">
-      <el-row :gutter="20">
-        <!-- 鏍峰搧杩涘害鍥捐〃 -->
-        <el-col :span="12">
-          <el-card class="chart-card"
-                   shadow="hover">
-            <template #header>
-              <div class="card-header">
-                <div class="chart-title-line"></div>
-                <span>璐ㄩ噺瀹屾垚鏄庣粏</span>
-              </div>
-            </template>
-            <div ref="equipmentChartRef"
-                 class="chart-container"></div>
-          </el-card>
-        </el-col>
-        <!-- 璁惧浣跨敤鍥捐〃 -->
-        <el-col :span="12">
-          <el-card class="chart-card"
-                   shadow="hover">
-            <template #header>
-              <div class="card-header">
-                <div class="chart-title-line"></div>
-                <span>妫�娴嬮」鐩垎绫�</span>
-              </div>
-            </template>
-            <div class="chart-container-line">
-              <div class="container-line2-left">
-                <div class="info-box">
-                  <div class="info-box-header">椤圭洰鍒嗗竷</div>
-                  <div class="info-line"
-                       v-for="(item, index) in topParametersData.list"
-                       :key="index">
-                    <div class="info-icon"
-                         :style="{ backgroundColor: getParameterColor(index) }"></div>
-                    <div class="info-line-title">{{ item.name }}</div>
-                    <div class="info-line-value1">{{ item.percentage }}%</div>
-                    <div class="info-line-value2">{{ item.count }}</div>
-                  </div>
+                <div class="yearchange">
+                  <div style="margin-right: 8px;font-size: 14px;">骞翠唤:</div>
+                  <el-date-picker v-model="value3"
+                                  size="mini"
+                                  :clearable="false"
+                                  style="width: 60px;"
+                                  type="year"
+                                  :disabled-date="disabledDate"
+                                  placeholder="">
+                  </el-date-picker>
                 </div>
-              </div>
-              <div ref="sampleChartRef"
-                   style="height: 100%; width: 50%;"
-                   class="chart-container"></div>
-            </div>
-            <!-- Tab 閫夋嫨鍣� -->
-            <div class="tab-selector">
-              <div class="tab-item"
-                   :class="{ active: activeTab === 'raw' }"
-                   @click="activeTab = 'raw'">鍘熸潗鏂�</div>
-              <div class="tab-item"
-                   :class="{ active: activeTab === 'semi' }"
-                   @click="activeTab = 'semi'">鍗婃垚鍝�</div>
-              <div class="tab-item"
-                   :class="{ active: activeTab === 'final' }"
-                   @click="activeTab = 'final'">鎴愬搧</div>
-            </div>
-          </el-card>
-        </el-col>
-      </el-row>
+              </el-card>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="charts-container">
+          <el-row :gutter="20">
+            <!-- 鏍峰搧杩涘害鍥捐〃 -->
+            <el-col :span="12">
+              <el-card class="chart-card"
+                       shadow="hover">
+                <template #header>
+                  <div class="card-header">
+                    <div class="chart-title-line"></div>
+                    <span>璐ㄩ噺瀹屾垚鏄庣粏</span>
+                  </div>
+                </template>
+                <div ref="equipmentChartRef"
+                     class="chart-container"></div>
+              </el-card>
+            </el-col>
+            <!-- 璁惧浣跨敤鍥捐〃 -->
+            <el-col :span="12">
+              <el-card class="chart-card"
+                       shadow="hover">
+                <template #header>
+                  <div class="card-header">
+                    <div class="chart-title-line"></div>
+                    <span>妫�娴嬮」鐩垎绫�</span>
+                  </div>
+                </template>
+                <div class="chart-container-line">
+                  <div class="container-line2-left">
+                    <div class="info-box">
+                      <div class="info-box-header">椤圭洰鍒嗗竷</div>
+                      <div class="info-line"
+                           v-for="(item, index) in topParametersData.list"
+                           :key="index">
+                        <div class="info-icon"
+                             :style="{ backgroundColor: getParameterColor(index) }"></div>
+                        <div class="info-line-title">{{ item.name }}</div>
+                        <div class="info-line-value1">{{ item.percentage }}%</div>
+                        <div class="info-line-value2">{{ item.count }}</div>
+                      </div>
+                    </div>
+                  </div>
+                  <div ref="sampleChartRef"
+                       style="height: 100%; width: 50%;"
+                       class="chart-container"></div>
+                </div>
+                <!-- Tab 閫夋嫨鍣� -->
+                <div class="tab-selector">
+                  <div class="tab-item"
+                       :class="{ active: activeTab === 'raw' }"
+                       @click="activeTab = 'raw'">鍘熸潗鏂�</div>
+                  <div class="tab-item"
+                       :class="{ active: activeTab === 'semi' }"
+                       @click="activeTab = 'semi'">鍗婃垚鍝�</div>
+                  <div class="tab-item"
+                       :class="{ active: activeTab === 'final' }"
+                       @click="activeTab = 'final'">鎴愬搧</div>
+                </div>
+              </el-card>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
     </div>
   </div>
 </template>
 
 <script setup>
-  import { ref, reactive, onMounted, nextTick } from "vue";
+  import {
+    ref,
+    reactive,
+    onMounted,
+    nextTick,
+    onBeforeUnmount,
+    watch,
+  } from "vue";
   import { ElMessage } from "element-plus";
   import * as echarts from "echarts";
   import {
@@ -320,6 +332,48 @@
     getMonthlyCompletionDetails,
     getTopParameters,
   } from "@/api/reportAnalysis/qualityReport";
+
+  // 缂╂斁姣斾緥
+  const scaleRatio = ref(1);
+  // 璁捐灏哄锛堝熀鍑嗗昂瀵革級
+  const designWidth = 1920;
+  const designHeight = 1080;
+
+  // 璁$畻缂╂斁姣斾緥
+  const calculateScale = () => {
+    const container = document.querySelector(".scale-container");
+    if (!container) return;
+
+    // 鑾峰彇瀹瑰櫒鐨勫疄闄呭昂瀵�
+    const containerWidth = container.clientWidth;
+    const containerHeight = container.clientHeight;
+
+    if (containerWidth === 0) {
+      // 濡傛灉杩樻病娓叉煋鍑烘潵锛屽欢杩熶竴涓嬪啀璁$畻
+      setTimeout(calculateScale, 100);
+      return;
+    }
+
+    // 璁$畻瀹藉害缂╂斁姣斾緥锛屼娇鍏跺缁堝崰婊″搴�
+    const scaleX = containerWidth / designWidth;
+    scaleRatio.value = scaleX;
+  };
+
+  // 绐楀彛澶у皬鍙樺寲澶勭悊
+  const handleResize = () => {
+    calculateScale();
+    // 鍚屾椂璋冩暣鍥捐〃
+    sampleChart?.resize();
+    equipmentChart?.resize();
+    inspectionChart?.resize();
+    usageChart?.resize();
+    materialCompletionChartInstance?.resize();
+    materialQualityChartInstance?.resize();
+    semiCompletionChartInstance?.resize();
+    semiQualityChartInstance?.resize();
+    finalCompletionChartInstance?.resize();
+    finalQualityChartInstance?.resize();
+  };
 
   // 鍝嶅簲寮忔暟鎹�
   const filterForm = reactive({
@@ -349,24 +403,24 @@
   };
 
   const getYearlyStatValue = (type, field) => {
-    const stat = yearlyPassRateData.value.find(item => item.inspectType === type);
+    const stat = yearlyPassRateData.value.find(item => item.modelType === type);
     return stat ? stat[field] : 0;
   };
 
   const getInspectStatValue = (type, field) => {
     const stat = inspectStatisticsData.value.find(
-      item => item.inspectType === type
+      item => item.modelType === type
     );
     return stat ? stat[field] : 0;
   };
 
   const getPassRateStatValue = (type, field) => {
     const stat = passRateStatisticsData.value.find(
-      item => item.inspectType === type
+      item => item.modelType === type
     );
     if (stat) {
       if (field === "completionRate" || field === "passRate") {
-        return stat[field] ? Number(stat[field]).toFixed(0) + "%" : "0%";
+        return stat[field] ? parseFloat(stat[field]) + "%" : "0%";
       }
       return stat[field];
     }
@@ -438,15 +492,10 @@
 
   const fetchTopParametersData = async () => {
     try {
-      const typeMap = { raw: 0, semi: 1, final: 2 };
+      const typeMap = { raw: 1, semi: 2, final: 3 };
       const res = await getTopParameters(typeMap[activeTab.value]);
       if (res.code === 200) {
         topParametersData.value = res.data;
-        sumnum.value = topParametersData.value.list.reduce(
-          (acc, cur) => acc + cur.count,
-          0
-        );
-        console.log(sumnum.value);
         initSampleChart();
       }
     } catch (error) {
@@ -471,9 +520,8 @@
     const currentYear = new Date().getFullYear();
     return time.getFullYear() > currentYear;
   };
-  const sumnum = ref(0);
+
   // 鐩戝惉骞翠唤鍙樺寲
-  import { watch } from "vue";
   watch(value3, () => {
     fetchMonthlyPassRateData();
     fetchYearlyPassRateData();
@@ -520,37 +568,29 @@
         title: {
           show: false,
         },
-        // tooltip: {
-        //   trigger: "item",
-        //   formatter: "{a} <br/>{b}: {c} ({d}%)",
+        tooltip: {
+          trigger: "item",
+          formatter: "{a} <br/>{b}: {c} ({d}%)",
+        },
+        // legend: {
+        //   orient: "vertical",
+        //   left: "left",
         // },
         series: [
           {
-            name: "",
+            name: "妫�娴嬮」鐩�",
             type: "pie",
             radius: ["40%", "80%"],
             avoidLabelOverlap: false,
             label: {
-              show: true,
+              show: false,
               position: "center",
-              formatter: function () {
-                return `{a|妫�娴嬫暟閲弣\n{b|${sumnum.value}}`;
-              },
-              disabled: true,
-              rich: {
-                a: {
-                  fontSize: 14,
-                  color: "#606266",
-                  fontWeight: "normal",
-                  lineHeight: 20,
-                },
-                b: {
-                  fontSize: 20,
-                  color: "#303133",
-                  fontWeight: "bold",
-                  lineHeight: 24,
-                  padding: [5, 0, 0, 0],
-                },
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: "18",
+                fontWeight: "bold",
               },
             },
             labelLine: {
@@ -961,7 +1001,13 @@
   };
 
   // 鐢熷懡鍛ㄦ湡
+  let resizeObserver = null;
   onMounted(() => {
+    // 璁$畻鍒濆缂╂斁姣斾緥
+    nextTick(() => {
+      calculateScale();
+    });
+
     fetchInspectStatisticsData();
     fetchPassRateStatisticsData();
     fetchMonthlyPassRateData();
@@ -976,30 +1022,48 @@
       initAllQualityCharts();
     });
     // 鐩戝惉绐楀彛澶у皬鍙樺寲锛岄噸鏂拌皟鏁村浘琛ㄥぇ灏�
-    window.addEventListener("resize", () => {
-      sampleChart?.resize();
-      equipmentChart?.resize();
-      inspectionChart?.resize();
-      usageChart?.resize();
+    window.addEventListener("resize", handleResize);
 
-      // 璋冩暣璐ㄦ鍚堟牸鐜囧浘琛ㄥぇ灏�
-      materialCompletionChartInstance?.resize();
-      materialQualityChartInstance?.resize();
-      semiCompletionChartInstance?.resize();
-      semiQualityChartInstance?.resize();
-      finalCompletionChartInstance?.resize();
-      finalQualityChartInstance?.resize();
-    });
+    // 浣跨敤 ResizeObserver 鐩戝惉瀹瑰櫒灏哄鍙樺寲锛堣В鍐充晶杈规爮鍒囨崲闂锛�
+    const container = document.querySelector(".scale-container");
+    if (container && window.ResizeObserver) {
+      resizeObserver = new ResizeObserver(() => {
+        handleResize();
+      });
+      resizeObserver.observe(container);
+    }
+  });
+
+  onBeforeUnmount(() => {
+    window.removeEventListener("resize", handleResize);
+    if (resizeObserver) {
+      resizeObserver.disconnect();
+    }
   });
 </script>
 
 <style scoped>
+  .scale-container {
+    position: relative;
+    width: 100%;
+    height: calc(100vh - 84px);
+    background-color: #f0f2f5;
+    overflow-x: hidden;
+    overflow-y: auto;
+  }
+
+  .report-management-container {
+    position: relative;
+    width: 1920px;
+    height: 1080px;
+    transform-origin: left top;
+    background-color: #f0f2f5;
+    transition: transform 0.3s;
+  }
+
   .report-management {
     padding: 20px;
-    background-color: #f5f5f5;
-    min-height: 100vh;
-    /* height: 87vh;
-                                                                                                                            overflow: hidden; */
+    height: 100%;
   }
 
   .page-header {
@@ -1200,7 +1264,6 @@
     color: #1d2129;
     font-size: 16px;
     font-weight: 500;
-    line-height: 37px;
   }
 
   .info-line {
@@ -1208,7 +1271,6 @@
     display: flex;
     padding-left: 20px;
     align-items: center;
-    flex: 1;
   }
 
   .info-icon {
@@ -1471,8 +1533,8 @@
   }
 
   /* .flex-center {
-                                                                                                                          justify-content: space-evenly;
-                                                                                                                          } */
+                        justify-content: space-evenly;
+                        } */
 
   .blue-chart {
     /* background-color: rgba(24, 144, 255, 0.1); */

--
Gitblit v1.9.3