From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 11 九月 2025 18:43:14 +0800
Subject: [PATCH] 最新版本541200007

---
 screen/src/views/EnergyConsum.vue |  228 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 168 insertions(+), 60 deletions(-)

diff --git a/screen/src/views/EnergyConsum.vue b/screen/src/views/EnergyConsum.vue
index 25f3234..b1ba998 100644
--- a/screen/src/views/EnergyConsum.vue
+++ b/screen/src/views/EnergyConsum.vue
@@ -17,7 +17,7 @@
             <div class="com_header">
               <div class="title">
                 <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-                <div>鏈勾绱寰幆鐑熺</div>
+                <div>鏈勾瀹夊窘涓儫绱寰幆鐑熺</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
@@ -81,28 +81,23 @@
                 </div>
                 <div class="static" v-if="data1.electricityQuantity">
                   <span class="lab">鍚屾瘮</span>
-                  <template v-if="data1.electricityQuantity.sameNum">
-                    <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.sameNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
+                  <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.sameNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                   <span class="val"
-                    v-if="data1.electricityQuantity.totalNum && data1.electricityQuantity.totalNum != 0">{{
+                    v-if="data1.electricityQuantity.sameNum && data1.electricityQuantity.sameNum != 0">{{
                       Math.abs(((data1.electricityQuantity.totalNum -
-                        data1.electricityQuantity.sameNum) / data1.electricityQuantity.totalNum * 100).toFixed(1))
+                        data1.electricityQuantity.sameNum) / data1.electricityQuantity.sameNum * 100).toFixed(1))
                     }}%</span>
                   <span class="val" v-else style="margin-left: 4px;"> -</span>
                   <span class="lab">鐜瘮</span>
-                  <template v-if="data1.electricityQuantity.ringNum">
-                    <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.ringNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
-
+                  <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.ringNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                   <span class="val"
-                    v-if="data1.electricityQuantity.totalNum && data1.electricityQuantity.totalNum != 0">{{
+                    v-if="data1.electricityQuantity.ringNum && data1.electricityQuantity.ringNum != 0">{{
                       Math.abs(((data1.electricityQuantity.totalNum -
-                        data1.electricityQuantity.ringNum) / data1.electricityQuantity.totalNum * 100).toFixed(1))
+                        data1.electricityQuantity.ringNum) / data1.electricityQuantity.ringNum * 100).toFixed(1))
                     }}%</span>
                   <span class="val" v-else style="margin-left: 4px;"> -</span>
                 </div>
@@ -148,24 +143,20 @@
                 </div>
                 <div class="static" v-if="data1.gasQuantity">
                   <span class="lab">鍚屾瘮</span>
-                  <template v-if="data1.gasQuantity.sameNum">
-                    <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.sameNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
-                  <span class="val" v-if="data1.gasQuantity.totalNum && data1.gasQuantity.totalNum != 0">{{
-                    Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.sameNum) / data1.gasQuantity.totalNum
+                  <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.sameNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
+                  <span class="val" v-if="data1.gasQuantity.sameNum && data1.gasQuantity.sameNum != 0">{{
+                    Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.sameNum) / data1.gasQuantity.sameNum
                       * 100).toFixed(1))
                   }}%</span>
                   <span class="val" v-else style="margin-left: 4px;">-</span>
                   <span class="lab">鐜瘮</span>
-                  <template v-if="data1.gasQuantity.sameNum">
-                    <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.ringNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
-                  <span class="val" v-if="data1.gasQuantity.totalNum && data1.gasQuantity.totalNum != 0">{{
-                    Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.ringNum) / data1.gasQuantity.totalNum
+                  <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.ringNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
+                  <span class="val" v-if="data1.gasQuantity.ringNum && data1.gasQuantity.ringNum != 0">{{
+                    Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.ringNum) / data1.gasQuantity.ringNum
                       * 100).toFixed(1))
                   }}%</span>
                   <span class="val" v-else style="margin-left: 4px;">-</span>
@@ -204,21 +195,23 @@
             </template>
             <div class="bottom_wrap" v-if="data1.yesterdayElectricity">
               <div class="bottom bottom1" @click="changeacDay(3)">
-                <div :class="{active: activeDays == 3}" class="num fs_linear">{{ data1.yesterdayElectricity.total || 0 }}</div>
+                <div :class="{ active: activeDays == 3 }" class="num fs_linear">{{ dataObj6.obj1.total || 0
+                  }}</div>
                 <div class="name">鏄ㄦ棩鐢ㄧ數</div>
                 <div class="unit">kw路h</div>
                 <img v-if="activeDays == 3" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
                 <img v-else src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
               </div>
               <div class="bottom bottom2" @click="changeacDay(1)">
-                <div :class="{active: activeDays == 1}" class="num">{{ data1.todayElectricity.total || 0 }}</div>
+                <div :class="{ active: activeDays == 1 }" class="num">{{ dataObj6.obj2.total || 0 }}</div>
                 <div class="name">浠婃棩鐢ㄧ數</div>
                 <div class="unit">kw路h</div>
                 <img v-if="activeDays == 1" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
                 <img v-else src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
               </div>
               <div class="bottom bottom3" @click="changeacDay(2)">
-                <div :class="{active: activeDays == 2}" class="num fs_linear">{{ data1.monthElectricity.total || 0 }}</div>
+                <div :class="{ active: activeDays == 2 }" class="num fs_linear">{{ dataObj6.obj3.total || 0 }}
+                </div>
                 <div class="name">鏈湀鐢ㄧ數</div>
                 <div class="unit">kw路h</div>
                 <img v-if="activeDays == 2" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
@@ -255,18 +248,17 @@
               <div class="tabs">娌硅�楋細L</div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
-            <div v-if="data3 && data3.length > 0" class="list">
-              <template v-for="item, i in data3">
-                <div v-if="i < 6" class="line">
-                  <div class="top"><span v-if="i < 3">top</span>{{ i + 1 }}</div>
+            <div v-if="data3 && data3.length > 0" class="list one-swiper">
+              <div class="swiper-wrapper">
+                <div class="line one-swiper-slide swiper-slide" v-for="item, i in data3">
+                  <div class="top" :class="{ top3: i < 3 }"><span v-if="i < 3">top</span>{{ i + 1 }}</div>
                   <div class="id_card">{{ item.carNo }}</div>
                   <div class="wrap">
                     <ChargeRate :rate="item.rate" :color="i > 2 ? 'cyan' : '#e3a83a'" />
                   </div>
                   <div class="num">{{ item.quantity }}</div>
                 </div>
-              </template>
-
+              </div>
             </div>
             <div v-if="data3.length == 0" class="empty_wrap list">
               <img src="@/assets/images/default_empty.png" alt="">
@@ -296,6 +288,8 @@
 import ChargeRate from '@/components/ChargeRate.vue'
 import * as echarts from 'echarts'
 import VScaleScreen from 'v-scale-screen'
+import 'swiper/css/swiper.min.css'
+import Swiper from 'swiper'
 import {
   zxcenterData,
   zxenergyDataList,
@@ -347,19 +341,40 @@
     xAxis: {
       type: 'category',
       boundaryGap: false,
+      axisLabel: {
+        color: '#D2E0FF'
+      },
       data: data5.value.map(i => dayjs(i.timeData).format('M'))
     },
+    // tooltip: {
+    //   trigger: 'axis',
+    //   axisPointer: {
+    //     type: 'line'
+    //   },
+    // },
     tooltip: {
       trigger: 'axis',
-      axisPointer: {
-        type: 'line'
-      },
+      formatter: function (params) {
+        // 閬嶅巻鎮诞鏃剁殑鎵�鏈夌偣锛屽畾鍒跺寲鏄剧ず鍐呭
+        let result = `<div>
+          <div style="width: 120px">${params[0].name}鏈�</div>
+          <div style="display: flex;align-items: center;;margin-top: 2px;">
+            <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #f6d047;margin-right: 6px;"></div></div>
+            <div><strong>${params[0].value} L</strong></div>
+          </div>
+        </div>`
+        return result
+      }
     },
     yAxis: {
       type: 'value',
       name: '鍗曚綅锛歀',
+      axisLabel: {
+        color: '#D2E0FF'
+      },
       nameTextStyle: {
-        padding: [0, 0, 0, -16]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+        color: '#D2E0FF',
+        padding: [0, 0, 0, -18]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
       },
       splitLine: {
         show: true,
@@ -464,13 +479,17 @@
     xAxis: {
       type: 'category',
       boundaryGap: false,
+      axisLabel: {
+        color: '#D2E0FF'
+      },
       data: data4.value.map(i => i.timeData)
     },
     yAxis: {
       type: 'value',
       name: '鍗曚綅锛歬w路h',
       nameTextStyle: {
-        padding: [0, 0, 0, -16]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+        padding: [0, 0, 0, -16],    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+        color: '#D2E0FF'
       },
       splitLine: {
         show: true,
@@ -480,6 +499,9 @@
           type: 'dashed',
         },
         splitNumber: 4
+      },
+      axisLabel: {
+        color: '#D2E0FF'
       }
     },
     grid: {
@@ -546,20 +568,61 @@
 const data1 = ref({})
 const getData1 = () => {
   zxcenterData().then(res => {
-    const result = res.data
+    const result = res.data || {}
     data1.value = result
   })
 }
 const activeDays = ref('1')
-const data6 = ref({})
+const data6 = ref([])
+const dataObj6 = ref({
+  obj1: { total: 0 },
+  obj2: { total: 0 },
+  obj3: { total: 0 },
+})
 const changeacDay = (val) => {
   activeDays.value = val
-  getData6()
+  if (val == 3) {
+    data6.value = dataObj6.value.obj1.list
+  } else if (val == 1) {
+    data6.value = dataObj6.value.obj2.list
+  } else {
+    data6.value = dataObj6.value.obj3.list
+  }
 }
+
 const getData6 = () => {
-  regionDataRanking({type: activeDays.value}).then(res => {
-    const result = res.data
-    data6.value = result
+  let obj = {
+    obj1: { list: [], total: 0 },
+    obj2: { list: [], total: 0 },
+    obj3: { list: [], total: 0 },
+  }
+  regionDataRanking({ type: 3 }).then(res => {
+    let arr = res.data || []
+    obj.obj1.list = arr
+    arr.forEach(i => {
+      obj.obj1.total += Number(i.value)
+    })
+    obj.obj1.total = obj.obj1.total.toFixed(1)
+    dataObj6.value = obj
+  })
+  regionDataRanking({ type: 1 }).then(res => {
+    let arr = res.data || []
+    obj.obj2.list = arr
+    arr.forEach(i => {
+      obj.obj2.total += Number(i.value)
+    })
+    obj.obj2.total = obj.obj2.total.toFixed(1)
+    dataObj6.value = obj
+    changeacDay(1)
+  })
+  regionDataRanking({ type: 2 }).then(res => {
+    let arr = res.data || []
+    obj.obj3.list = arr
+    arr.forEach(i => {
+      obj.obj3.total += Number(i.value)
+    })
+    obj.obj3.total = obj.obj3.total.toFixed(1)
+    dataObj6.value = obj
   })
 }
 
@@ -585,18 +648,33 @@
     },
     tooltip: {
       trigger: 'axis',
-      axisPointer: {
-        type: 'line'
-      },
+      formatter: function (params) {
+        // 閬嶅巻鎮诞鏃剁殑鎵�鏈夌偣锛屽畾鍒跺寲鏄剧ず鍐呭
+        let result = `<div>
+          <div style="width: 120px">${params[0].name}鏈�</div>
+          <div style="display: flex;align-items: center;;margin-top: 2px;">
+            <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #61a1c4;margin-right: 6px;"></div></div>
+            <div><strong>${params[0].value} </strong></div>
+          </div>
+        </div>`
+        return result
+      }
     },
     xAxis: {
       type: 'category',
+      axisLabel: {
+        color: '#D2E0FF'
+      },
       data: data2.value.map(i => dayjs(i.timeData).format('M'))
     },
     yAxis: {
       type: 'value',
       name: unit,
+      axisLabel: {
+        color: '#D2E0FF'
+      },
       nameTextStyle: {
+        color: '#D2E0FF',
         padding: [0, 0, 4, -30]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
       },
       splitLine: {
@@ -655,7 +733,7 @@
 const data4 = ref([])
 const getData4 = () => {
   zxloadCurve().then(res => {
-    const result = res.data
+    const result = res.data || []
     data4.value = result
     if (data4.value && data4.value.length > 0) {
       initLoadReal()
@@ -666,9 +744,26 @@
 const data5 = ref([])
 const getData5 = () => {
   zxenergyDataList({ type: 2 }).then(res => {
-    const result = res.data
+    const result = res.data || []
     data5.value = result
     initOperation()
+  })
+}
+
+const autoplayFlag = (list = [], leng = 4, time = 2000) => {
+  if (list.length > leng) {
+    return { delay: time, disableOnInteraction: false }
+  } else {
+    return false
+  }
+}
+const loopFn1 = () => {
+  var newSwiper1 = new Swiper('.one-swiper', {
+    initialSlide: 0,
+    direction: 'vertical', //绔栫洿鏂瑰悜
+    slidesPerView: 6,
+    autoplay: autoplayFlag(data3.value, 6, 4000),
+    observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper
   })
 }
 
@@ -689,6 +784,10 @@
     getData5()
     getData6()
   }, 1000 * 60 * 60)
+
+  setTimeout(() => {
+    loopFn1()
+  }, 12000)
 
 })
 
@@ -893,12 +992,13 @@
       }
 
       .bottom {
-        width: 140px;
+        width: 150px;
         height: 194px;
         position: absolute;
         text-align: center;
         padding-top: 70px;
         cursor: pointer;
+
         .num {
           font-size: 24px;
           color: #D0FFFA;
@@ -915,6 +1015,7 @@
           font-size: 14px;
           color: #D0FFFA;
         }
+
         .active {
           font-size: 36px;
           color: #01D9FE;
@@ -974,13 +1075,16 @@
       margin-bottom: 20px;
 
       .list {
-        padding: 20px 24px 4px;
-        height: 250px;
+        padding: 0px 24px;
+        height: 228px;
+        margin: 20px 0 0;
+        overflow: auto;
 
         .line {
           display: flex;
           align-items: center;
-          margin-bottom: 16px;
+          /* margin-bottom: 16px; */
+          height: 38px !important;
 
           .top {
             font-weight: 500;
@@ -992,6 +1096,10 @@
             color: #DBEAEA;
             box-shadow: inset 0px 0px 3px 0px #01D9FE;
             margin-right: 10px;
+          }
+
+          .top3 {
+            box-shadow: inset 0px 0px 3px 0px #FEAF01;
           }
 
           .id_card {
@@ -1173,4 +1281,4 @@
     z-index: -1;
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3