From abfc074c35e8bd66ec0641173bfd703051ca701a Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期一, 07 四月 2025 17:00:51 +0800
Subject: [PATCH] fix

---
 src/components/datascreen/LeftPanel.vue |  217 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 127 insertions(+), 90 deletions(-)

diff --git a/src/components/datascreen/LeftPanel.vue b/src/components/datascreen/LeftPanel.vue
index 95a1ca1..fcca0b1 100644
--- a/src/components/datascreen/LeftPanel.vue
+++ b/src/components/datascreen/LeftPanel.vue
@@ -6,11 +6,11 @@
       <div class="box-content">
         <div class="box-content-item">
           <div class="box-content-item-title">总参与户数(户)</div>
-          <div class="box-content-item-value">87695</div>
+          <div class="box-content-item-value">{{ data.selfBuyResponse.householdNum || 0 }}</div>
         </div>
         <div class="box-content-item" style="margin-left: 35px;">
           <div class="box-content-item-title">总参与人数(人)</div>
-          <div class="box-content-item-value">876995</div>
+          <div class="box-content-item-value">{{ data.selfBuyResponse.personNum || 0 }}</div>
         </div>
       </div>
     </div>
@@ -22,15 +22,16 @@
         <div v-for="(item, index) in rankingList" :key="index" class="ranking-item">
           <div class="ranking-item-content">
             <span class="rank" :class="'rank-' + (index + 1)">{{ index + 1 }}</span>
-            <span class="name">{{ item.name }}</span>
+            <span class="name">{{ item.street }}</span>
             <div class="value">
               <div class="value-text">
                 环比
-                <span class="value-text-value" :class="{ 'positive': item.growth > 0, 'negative': item.growth < 0 }">
-                  {{ item.growth > 0 ? '+' : '' }}{{ item.growth }}%
+                <span class="value-text-value"
+                  :class="{ 'positive': item.latestBatchHouseholdCount < item.secondLatestBatchHouseholdCount, 'negative': item.latestBatchHouseholdCount > item.secondLatestBatchHouseholdCount }">
+                  {{ item.growth > 0 ? '+' : '' }}{{ item.householdNumRate }}
                 </span>
               </div>
-              {{ item.value }}
+              {{ item.householdNum }}人
             </div>
           </div>
           <div class="progress-bar">
@@ -55,26 +56,17 @@
 <script>
 export default {
   name: 'LeftPanel',
-  components: {
+  props: {
+    data: {
+      type: Object,
+      default: () => ({})
+    },
   },
   data() {
     return {
-      totalHouseholds: 87695,
-      totalPeople: 876995,
-      rankingList: [
-        { name: '崇州街道', percentage: 0, value: '999户', growth: 43.2 },
-        { name: '羊马乡', percentage: 0, value: '999户', growth: -12.5 },
-        { name: '万家镇', percentage: 0, value: '999户', growth: 8.3 },
-        { name: '崇阳街道', percentage: 0, value: '999户', growth: -5.2 },
-        { name: '白头镇', percentage: 0, value: '999户', growth: 15.7 },
-        { name: '金鸡乡', percentage: 0, value: '999户', growth: -3.8 },
-        { name: '西江镇', percentage: 0, value: '999户', growth: 22.1 },
-        { name: '观胜镇', percentage: 0, value: '999户', growth: -7.4 }
-      ],
-      finalPercentages: [
-        50, 85, 80, 75, 70, 65, 60, 55
-      ],
-      
+      totalHouseholds: 0,
+      totalPeople: 0,
+      rankingList: [],
       lineOption: {
         tooltip: {
           trigger: 'axis',
@@ -98,14 +90,14 @@
         grid: {
           top: '20%',
           left: '3%',
-          right: '4%',
+          right: '6%',
           bottom: '3%',
           containLabel: true
         },
         xAxis: {
           type: 'category',
           boundaryGap: false,
-          data: ['1月', '2月', '3月', '4月', '5月', '6月'],
+          data: [],
           axisLine: {
             show: true,
             lineStyle: {
@@ -116,15 +108,16 @@
             show: false
           },
           axisLabel: {
-            color: '#495F88',
-            fontSize: 12
+            color: '#fff',
+            fontSize: 12,
+            // rotate: 30, // 标签倾斜角度
           }
         },
         yAxis: {
           type: 'value',
           name: '单位:次',
           nameTextStyle: {
-            color: '#495F88',
+            color: '#fff',
             fontSize: 12,
           },
           splitLine: {
@@ -140,7 +133,7 @@
             show: false
           },
           axisLabel: {
-            color: '#495F88',
+            color: '#fff',
             fontSize: 12
           }
         },
@@ -149,7 +142,7 @@
             name: '安置面积异常',
             type: 'line',
             smooth: true,
-            symbol: 'none',
+            symbol: 'circle',
             itemStyle: {
               color: '#FEDB65'
             },
@@ -173,35 +166,35 @@
             lineStyle: {
               width: 4,
               color: {
-              type: 'linear',
-              x: 0,
-              y: 0,
-              x2: 1,
-              y2: 0,
-              colorStops: [{
-                offset: 0,
-                color: '#AE5112' // 0% 处的颜色
-              }, {
-                offset: 0.3,
-                color: '#FEDB65' // 50% 处的颜色
-              }, {
-                offset: 0.7,
-                color: '#FEDB65' // 50% 处的颜色
-              }, {
-                offset: 1,
-                color: '#AE5112' // 100% 处的颜色
-              }]
+                type: 'linear',
+                x: 0,
+                y: 0,
+                x2: 1,
+                y2: 0,
+                colorStops: [{
+                  offset: 0,
+                  color: '#AE5112' // 0% 处的颜色
+                }, {
+                  offset: 0.3,
+                  color: '#FEDB65' // 50% 处的颜色
+                }, {
+                  offset: 0.7,
+                  color: '#FEDB65' // 50% 处的颜色
+                }, {
+                  offset: 1,
+                  color: '#AE5112' // 100% 处的颜色
+                }]
               }
             },
-            data: [150, 180, 230, 280, 260, 100]
+            data: []
           },
           {
             name: '补偿金额异常',
             type: 'line',
             smooth: true,
-            symbol: 'none',
+            symbol: 'circle',
             itemStyle: {
-              color: '#00F2EF' 
+              color: '#00F2EF'
             },
             areaStyle: {
               opacity: 0.8,
@@ -223,44 +216,63 @@
             lineStyle: {
               width: 4,
               color: {
-              type: 'linear',
-              x: 0,
-              y: 0,
-              x2: 1,
-              y2: 0,
-              colorStops: [{
-                offset: 0,
-                color: '#0E5FFF' // 0% 处的颜色
-              }, {
-                offset: 0.3,
-                color: '#00F2EF' // 50% 处的颜色
-              }, {
-                offset: 0.7,
-                color: '#00F2EF' // 50% 处的颜色
-              }, {
-                offset: 1,
-                color: '#0E5FFF' // 100% 处的颜色
-              }]
+                type: 'linear',
+                x: 0,
+                y: 0,
+                x2: 1,
+                y2: 0,
+                colorStops: [{
+                  offset: 0,
+                  color: '#0E5FFF' // 0% 处的颜色
+                }, {
+                  offset: 0.3,
+                  color: '#00F2EF' // 50% 处的颜色
+                }, {
+                  offset: 0.7,
+                  color: '#00F2EF' // 50% 处的颜色
+                }, {
+                  offset: 1,
+                  color: '#0E5FFF' // 100% 处的颜色
+                }]
               }
             },
-            data: [200, 250, 380, 450, 380, 300]
+            data: []
           }
         ]
       }
     };
   },
-  mounted() {
-    // 使用 setTimeout 确保 DOM 已经渲染
-    setTimeout(() => {
-      this.animateProgressBars();
-    }, 100);
+  watch: {
+    data: {
+      handler(newVal, oldVal) {
+        if (newVal) {
+          this.rankingList = newVal.streetResponses
+          this.$nextTick(() => {
+            this.animateProgressBars();
+            this.updateChartData(this.data.importErrorResponses);
+          });
+        }
+      },
+      deep: true,
+      immediate: true
+    }
   },
   methods: {
     animateProgressBars() {
-      this.rankingList = this.rankingList.map((item, index) => ({
-        ...item,
-        percentage: this.finalPercentages[index]
-      }));
+      let count = 0
+      this.rankingList.map(item => {
+        count += item.householdNum;
+      });
+
+      this.rankingList = this.rankingList.map((item, index) => {
+        item.percentage = (item.householdNum / count) * 100;
+        return item
+      });
+    },
+    updateChartData(apiData) {
+      this.lineOption.xAxis.data = apiData.map(item => item.month);
+      this.lineOption.series[0].data = apiData.map(item => item.areaErrorCount);
+      this.lineOption.series[1].data = apiData.map(item => item.moneyErrorCount);
     }
   }
 };
@@ -278,11 +290,13 @@
     height: 196px;
     background: url('@/assets/left-top-bg.png') no-repeat center center;
     background-size: 100% 100%;
+
     .box-content {
       display: flex;
       justify-content: center;
       margin-top: 30px;
       height: 100%;
+
       .box-content-item-title {
         width: 178px;
         height: 38px;
@@ -292,6 +306,7 @@
         background: url('@/assets/left/top-number-header.png') no-repeat center center;
         background-size: 100% 100%;
       }
+
       .box-content-item-value {
         width: 178px;
         height: 64px;
@@ -330,7 +345,19 @@
   }
 
   .ranking-list {
+  height: 400px;
     margin-top: 30px;
+    overflow: auto;
+    /* 隐藏滚动条 */
+    scrollbar-width: none;
+    /* Firefox */
+    -ms-overflow-style: none;
+
+    /* IE 和 Edge */
+    &::-webkit-scrollbar {
+      display: none;
+      /* Chrome, Safari 和 Opera */
+    }
   }
 
   .ranking-item {
@@ -349,28 +376,28 @@
         height: 22px;
         line-height: 22px;
         padding-left: 2px;
-        
+
         &.rank-1 {
           color: #E9B701;
           background: url('@/assets/left/one.png') no-repeat center center;
           background-size: 100% 100%;
         }
-        
+
         &.rank-2 {
           color: #0ED1A3;
           background: url('@/assets/left/two.png') no-repeat center center;
           background-size: 100% 100%;
         }
-        
+
         &.rank-3 {
           color: #0EBFDA;
           background: url('@/assets/left/three.png') no-repeat center center;
           background-size: 100% 100%;
         }
-        
+
         &:not(.rank-1):not(.rank-2):not(.rank-3) {
           color: #0089FF;
-          background: linear-gradient( 270deg, rgba(0,137,255,0) 0%, rgba(0,137,255,0.4) 100%);
+          background: linear-gradient(270deg, rgba(0, 137, 255, 0) 0%, rgba(0, 137, 255, 0.4) 100%);
         }
       }
 
@@ -386,15 +413,21 @@
         font-size: 15px;
         display: flex;
         align-items: center;
+        justify-content: space-between;
+        text-align: end;
+        width: 175px;
+
         .value-text {
           color: #C0CFDC;
           font-size: 12px;
-          width: 130px;
+
           .value-text-value {
             margin-left: 12px;
+
             &.positive {
               color: #FEDB65;
             }
+
             &.negative {
               color: #66FFFF;
             }
@@ -415,7 +448,7 @@
         width: 0;
         transition: width 1.5s cubic-bezier(0.4, 0, 0.2, 1);
         position: relative;
-        
+
         .progress-icon {
           position: absolute;
           right: -8px;
@@ -427,30 +460,34 @@
           background-repeat: no-repeat;
           background-position: center;
         }
-        
+
         &.rank-1 {
           background: linear-gradient(90deg, #2A1802 0%, #C86A01 49%, #E5D704 100%);
+
           .progress-icon {
             background-image: url('@/assets/left/progress-one.png');
           }
         }
-        
+
         &.rank-2 {
           background: linear-gradient(270deg, #0ED1A3 0%, #03493E 100%);
+
           .progress-icon {
             background-image: url('@/assets/left/progress-two.png');
           }
         }
-        
+
         &.rank-3 {
           background: linear-gradient(90deg, #104461 0%, #0EB2DA 100%);
+
           .progress-icon {
             background-image: url('@/assets/left/progress-three.png');
           }
         }
-        
+
         &:not(.rank-1):not(.rank-2):not(.rank-3) {
           background: linear-gradient(90deg, #03142C 0%, #057BFF 49%, #05DBFF 100%);
+
           .progress-icon {
             background-image: url('@/assets/left/progress-four.png');
           }

--
Gitblit v1.7.1