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/LogisticsEfficiency.vue |  259 ++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 183 insertions(+), 76 deletions(-)

diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index ea7a49a..93dd089 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.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>
               <div class="tabs">
                 <div class="tab" :class="{ active: activeTab1 == 0 }" @click="tabClick1(0)">鏈湀</div>
@@ -31,7 +31,8 @@
                 <div class="num" v-if="data1.monthOutTotal || data1.yearOutTotal">{{ activeTab1 == 0 ?
                   data1.monthOutTotal.toLocaleString() : data1.yearOutTotal.toLocaleString() }}</div>
                 <div class="unit_wrap">
-                  <span style="color: #869CC9;">{{ activeTab1 == 0 ? '鍚屾瘮' : '鐜瘮' }}</span>
+                  <!-- <span style="color: #869CC9;">{{ activeTab1 == 0 ? '鍚屾瘮' : '鐜瘮' }}</span> -->
+                  <span style="color: #869CC9;">鐜瘮</span>
                   <template v-if="activeTab1 == 0 && data1.monthLastOutTotal">
                     <img v-if="data1.monthOutTotal > data1.monthLastOutTotal" src="@/assets/images/ic_up.png"
                       class="icon" alt="">
@@ -47,7 +48,7 @@
                     data1.monthLastOutTotal) / data1.monthLastOutTotal) * 100).toFixed(1)) }}%</span>
                   <span v-else-if="activeTab1 == 1 && data1.yearLastOutTotal">{{ Math.abs((((data1.yearOutTotal -
                     data1.yearLastOutTotal) / data1.yearLastOutTotal) * 100).toFixed(1)) }}%</span>
-                  <span v-else>-</span>
+                  <span v-else style="margin-left: 10px;">-</span>
                 </div>
               </div>
               <div class="train_wrap">
@@ -101,7 +102,7 @@
                 </div>
                 <div class="one-swiper list_temp">
                   <div class="swiper-wrapper">
-                    <div class="line swiper-slide one-swiper-slide" @click="showModal = true" v-for="item in dataList3">
+                    <div @click="taskClick(item)" class="line swiper-slide one-swiper-slide" v-for="item in dataList3">
                       <span class="item flag"><span :class="{ flag_bg: item.type == 1 || item.type == 3 }">{{ item.type
                         == 1
                         || item.type == 3 ? '鍑�' : '鍏�' }}</span></span>
@@ -137,28 +138,41 @@
                 <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt="">
                 <div class="content">
                   <div class="name">褰撳墠浠诲姟閲�</div>
-                  <div class="num"><span>{{ data4.planTaskNum }}</span>涓囨敮</div>
+                  <div class="num"><span>{{ activeTab4 == 0 ? data1.currentOutNum : data1.currentInNum }}</span>涓囨敮</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
                 <div class="content">
                   <div class="name">褰撴棩瀹屾垚浠诲姟鎬婚噺</div>
-                  <div class="num"><span class="today">{{ data4.finishTaskNum }}</span>涓囨敮</div>
+                  <div class="num">
+                    <span v-if="data1.currentOutDoneNum || data1.currentInDoneNum" class="today">{{
+                      activeTab4 ==
+                        0 ? data1.currentOutDoneNum :
+                        data1.currentInDoneNum
+                    }}</span>
+                    <span v-else>0</span>
+                    涓囨敮
+                  </div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt="">
                 <div class="content">
                   <div class="name">宸插畬鎴愭瘮渚�</div>
-                  <div class="num" v-if="data4.finishTaskNum && data4.planTaskNum"><span class="finish">{{ ((
-                    data4.finishTaskNum / data4.planTaskNum) * 100).toFixed(1) }}%</span>涓囨敮</div>
+                  <div class="num">
+                    <span v-if="activeTab4 == 0 && data1.currentOutNum" class="finish">{{ ((data1.currentOutDoneNum /
+                      data1.currentOutNum) * 100).toFixed(1) }}</span>
+                    <span v-if="activeTab4 == 1 && data1.currentInNum" class="finish">{{ ((data1.currentInDoneNum /
+                      data1.currentInNum) * 100).toFixed(1) }}</span>
+                    %
+                  </div>
                 </div>
               </div>
             </div>
           </div>
           <div class="center_box_two">
-            <div class="list">
+            <div class="list"  style="z-index: 10000">
               <div class="item">
                 <img src="@/assets/images/LogisticsCenter/car_zaitu@2x.png" alt="">
                 <span>鍦ㄩ�旓細{{ data7.busyNum }}</span>
@@ -172,22 +186,28 @@
                 <span>绂荤嚎锛歿{ data7.offlineNum }}</span>
               </div>
             </div>
-            <div class="echart_wrap">
+            <div class="echart_wrap" style="width: 100%;height: 100%">
               <div ref="echartMap" class="echart_map" id="echartMap"></div>
             </div>
-            <div class="warnning_info">
+            <div class="warnning_info"  style="z-index: 10000">
               <div class="head" @click="isShowCarW = !isShowCarW">
                 <img src="../assets/images/FireFighting/fire_right.png" alt="">
                 <span>杞﹁締鎶ヨ</span>
               </div>
               <div v-if="isShowCarW" class="war_list">
-                <div class="line" v-for="item in data7.eventList">
+                <div class="line" v-for="item in eventList">
                   <div class="id_card">{{ item.carCode }}</div>
                   <div class="title">{{ item.title }}</div>
                   <div v-if="item.time">{{ item.time.slice(11) }}</div>
                 </div>
               </div>
             </div>
+            <div @click="openCloudAddr" class="monitoring"  style="z-index: 10000">
+              <img src="@/assets/images/ic_jiankong@2x.png" class="icon" alt="">
+              <div>杞﹁締鐩戞帶骞冲彴</div>
+              <img class="top" src="@/assets/images/SecurityControl/ar_open@2x.png" alt="">
+            </div>
+
           </div>
         </div>
         <div class="right_box">
@@ -270,9 +290,10 @@
               </div>
               <div class="list two-swiper">
                 <div class="swiper-wrapper">
-                  <div class="item two-swiper-slide swiper-slide" v-for="item in data6.stockList">
+                  <div :class="{ orange: item.num < 200 }" class="item two-swiper-slide swiper-slide"
+                    v-for="item in data6.stockList">
                     <div class="la">{{ item.name }}</div>
-                    <div class="val">{{ item.num }}涓囨敮</div>
+                    <div class="val">{{ item.num }}{{item.name.indexOf('鎵樼洏') === -1 ? '涓囨敮' : '涓�'}}</div>
                   </div>
                 </div>
               </div>
@@ -313,7 +334,7 @@
               <div class="icon_wrap">
                 <img v-if="i != 0" class="dian" src="@/assets/images/ic_dangqian@2x.png" alt="">
                 <img v-else src="@/assets/images/ic_jindu@2x.png" class="dian_ac" alt="">
-                <div class="line"></div>
+                <div v-if="i != activeCar.logList.length - 1" class="line"></div>
               </div>
               <div class="content">
                 <div class="status" :class="{ ac: i == 0 }">{{ statusMapD[item.objType] }}</div>
@@ -332,7 +353,8 @@
           <div class="list">
             <div class="item" v-for="item in activeCar.contractList">
               <div class="head">
-                <div class="code">鍚堝悓鍙凤細{{ item.ioCode }}</div>
+                <div class="code">鍚堝悓鍙凤細<span v-if="item.detailList && item.detailList.length > 0">{{
+                  item.detailList[0].contractNum }}</span></div>
                 <div class="addr">鏀惰揣鍦帮細{{ item.address }}</div>
               </div>
               <div class="line" v-for="i in item.detailList">
@@ -369,7 +391,9 @@
   wltotalInList,
   wltransportMeasure,
   carsListPost,
-  getCarsJobDetails
+  getCarsJobDetails,
+  getJobDetailsById,
+  carsEventListP
 } from '@/api'
 import 'swiper/css/swiper.min.css'
 import Swiper from 'swiper'
@@ -427,7 +451,9 @@
         },
         axisLabel: {
           color: '#869CC9'
-          // fontSize: 24,
+        },
+        nameTextStyle: {
+          color: '#869CC9'   // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
         },
         axisTick: {
           show: false,
@@ -437,32 +463,7 @@
     ],
     yAxis: [
       {
-        type: 'value',
-        name: '涓�',
-        min: 0,
-        axisLabel: {
-          show: true,
-          color: "#869CC9",
-        },
-        splitLine: {
-          show: true,
-          lineStyle: {
-            width: 1,
-            color: "rgba(49,105,129,0.4)",
-            type: 'dashed'
-          }
-        },
-        // interval: 5,
-        axisLabel: {
-          formatter: '{value}'
-        }
-      },
-      {
-        type: 'value',
         name: '涓囨敮',
-        nameTextStyle: {
-          color: '#869CC9',
-        },
         offset: 0,
         type: 'value',
         axisLine: {
@@ -477,8 +478,32 @@
           }
         },
         axisLabel: {
-          formatter: '{value}'
-        }
+          color: '#869CC9'
+        },
+        nameTextStyle: {
+          color: '#869CC9',
+          padding: [0, 0, 0, 12]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+        },
+      },
+      {
+        type: 'value',
+        name: '涓�',
+        min: 0,
+        axisLabel: {
+          color: '#869CC9'
+        },
+        nameTextStyle: {
+          color: '#869CC9',
+          padding: [0, 0, 0, -18]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+        },
+        splitLine: {
+          show: false,
+          lineStyle: {
+            width: 1,
+            color: "rgba(49,105,129,0.4)",
+            type: 'dashed'
+          }
+        },
       },
     ],
     series: [
@@ -492,7 +517,7 @@
           position: 'top',
           color: '#fff',
         },
-        yAxisIndex: 1,
+        yAxisIndex: 0,
         itemStyle: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
             {
@@ -516,7 +541,7 @@
         name: '浠诲姟瀹屾垚閲�',
         type: 'bar',
         barWidth: 10,
-        yAxisIndex: 1,
+        yAxisIndex: 0,
         label: {
           show: false,
           position: 'top',
@@ -546,7 +571,7 @@
         type: 'line',
         smooth: false,
         showAllSymbol: true,
-        yAxisIndex: 0,
+        yAxisIndex: 1,
         symbol: 'none',
         lineStyle: {
           color: "#1a43bc"
@@ -576,7 +601,19 @@
           show: false,
           position: 'center'
         },
-        padAngle: 5,
+        tooltip: {
+          trigger: 'none'
+        },
+        emphasis: {
+          // 璁剧疆鎮诞鏃舵牱寮忎负绌�
+          scale: false, // 鍏抽棴鏀惧ぇ鏁堟灉
+          itemStyle: {
+            shadowBlur: 0, // 闃村奖妯$硦搴︿负 0
+            shadowOffsetX: 0,
+            shadowColor: 'rgba(0, 0, 0, 0)',
+          },
+        },
+        padAngle: 3,
         itemStyle: {
           borderRadius: 10
         },
@@ -596,6 +633,8 @@
 
 const echartMap = ref()
 const initMap = () => {
+  console.log('----')
+
   var myChart = echarts.init(echartMap.value)
   echarts.registerMap('js', ahJSON)
   const scatterData = data7.value.carsList.map(item => {
@@ -693,22 +732,26 @@
     },
     geo: [{
       map: 'js',
-      roam: false, //鏄惁鍏佽缂╂斁
+      roam: true, //鏄惁鍏佽缂╂斁
       zoom: 1.2, //榛樿鏄剧ず绾у埆
       scaleLimit: {
         min: 0,
-        max: 3
+        max: 50
       }, //缂╂斁绾у埆
+      label: {
+        show: true, // 濮嬬粓鏄剧ず鏂囧瓧
+        color: '#fff' // 璁剧疆鏂囧瓧棰滆壊
+      },
       itemStyle: {
         normal: {
-          areaColor: 'transparent',
-          borderColor: '#3fdaff',
-          borderWidth: 2,
-          shadowColor: 'rgba(63, 218, 255, 0.5)',
-          shadowBlur: 30
+          areaColor: '#1d3b60',
+          borderColor: '#428598',
+          borderWidth: 1,
+          // shadowColor: 'rgba(63, 218, 255, 0.5)',
+          // shadowBlur: 30
         },
         emphasis: {
-          areaColor: '#2B91B7',
+          areaColor: '#5bc7d5',
         }
       },
       tooltip: {
@@ -754,12 +797,13 @@
         }
       },
 
-      //鍦板浘
+     /* //鍦板浘
       {
         type: 'map',
         mapType: 'js',
         geoIndex: -1,
         zoom: 1.2, //榛樿鏄剧ず绾у埆
+        // roam: true, // 寮�鍚缉鏀惧拰骞崇Щ
         label: {
           show: true,
           color: '#ffffff',
@@ -784,7 +828,7 @@
           }
         },
         data: data
-      },
+      },*/
       ...serData,
     ]
   }
@@ -793,6 +837,7 @@
   myChart.on('click', function (params) {
     const item = params.data
     getCarsJobDetails({ carCode: item.code }).then(res => {
+      // getCarsJobDetails({ id: item.id }).then(res => {
       // getCarsJobDetails({ carCode: '鐨朅E5277' }).then(res => {
       showModal.value = true
       activeCar.value = { ...res.data, carCode: item.code }
@@ -812,6 +857,18 @@
 const closeModal = () => {
   showModal.value = false
   activeCar.value = {}
+}
+const taskClick = (item) => {
+  // getCarsJobDetails({ carCode: item.carCodeFront }).then(res => {
+  getJobDetailsById({ id: item.id }).then(res => {
+    // getCarsJobDetails({ carCode: '鐨朅E5277' }).then(res => {
+    showModal.value = true
+    activeCar.value = { ...res.data, carCode: item.carCodeFront }
+  })
+}
+
+const openCloudAddr = () => {
+  window.open('https://vms.hikvisionauto.com:8040/', '_blank')
 }
 
 
@@ -870,17 +927,9 @@
     dataList3.value = result
   })
 }
-const data4 = ref({})
 const activeTab4 = ref(0)
 const tabClick4 = (val) => {
   activeTab4.value = val
-  getData4()
-}
-const getData4 = () => {
-  wljobData({ queryType: activeTab4.value }).then(res => {
-    const result = res.data
-    data4.value = result
-  })
 }
 const dataList5 = ref([])
 const data5 = ref(0)
@@ -897,6 +946,7 @@
       i.rate = count == 0 ? 0 : ((i.num / count) * 100).toFixed(0)
     })
     data5.value = count
+    console.log(data5.value)
     initEchart1()
   })
 }
@@ -910,11 +960,20 @@
 
 const isShowCarW = ref(false)
 const data7 = ref({})
+const eventList = ref([])
 const getData7 = () => {
   carsListPost().then(res => {
     const result = res.data || {}
     data7.value = result
     initMap()
+  }, () => {
+    data7.value = {
+      carsList: []
+    }
+    initMap()
+  })
+  carsEventListP().then(res => {
+    eventList.value = res.data || []
   })
 }
 
@@ -947,10 +1006,18 @@
   getData1()
   getData2()
   getData3()
-  getData4()
   getData5()
   getData6()
   getData7()
+
+  setInterval(() => {
+    getData1()
+    getData2()
+    getData3()
+    getData5()
+    getData6()
+    getData7()
+  }, 1000 * 60 * 10)
 
   setTimeout(() => {
     loopFn1()
@@ -994,15 +1061,15 @@
           .num {
             margin-right: 10px;
             font-weight: bold;
-            font-size: 46px;
-            height: 44px;
-            line-height: 52px;
+            font-size: 44px;
+            height: 48px;
+            line-height: 50px;
             font-weight: bold;
             color: #00F2F3;
             letter-spacing: 3px;
             background-image: -webkit-linear-gradient(top,
-                #01D9FE 0%,
-                #0177FE 60%,
+                #1cdafb 0%,
+                #0177FE 70%,
                 #0177FE 100%);
             -webkit-background-clip: text;
             -webkit-text-fill-color: transparent;
@@ -1092,6 +1159,7 @@
             align-items: center;
             padding: 0 10px;
             font-size: 12px;
+            cursor: pointer;
 
             &:nth-of-type(2n) {
               background: rgba(27, 64, 97, 0.52);
@@ -1238,7 +1306,9 @@
         }
       }
     }
+    .center_box_three{
 
+    }
     .center_box_two {
       flex: 1;
       width: 100%;
@@ -1281,13 +1351,13 @@
         bottom: 0;
         border-top: 1px solid #5ecbce;
         border-bottom: 1px solid #5ecbce;
+        background: rgba(0, 30, 63, 0.4);
+        /* backdrop-filter: blur(5px); */
 
         .head {
           display: flex;
           width: 280px;
           height: 57px;
-          background: rgba(0, 30, 63, 0.4);
-          backdrop-filter: blur(5px);
           display: flex;
           align-items: center;
           padding-left: 10px;
@@ -1304,6 +1374,8 @@
         .war_list {
           max-height: 300px;
           overflow: auto;
+          padding-left: 10px;
+          padding-bottom: 12px;
 
           .line {
             font-size: 13px;
@@ -1324,6 +1396,35 @@
               flex: 4;
             }
           }
+        }
+      }
+
+      .monitoring {
+        position: absolute;
+        cursor: pointer;
+        bottom: 10px;
+        left: 0;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        font-weight: 500;
+        font-size: 15px;
+        width: 156px;
+        height: 40px;
+        background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
+        border-radius: 2px;
+        border: 1px solid;
+        border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
+
+        .icon {
+          width: 16px;
+          height: 16px;
+          margin-right: 10px;
+        }
+
+        .top {
+          width: 7px;
+          margin-left: 6px;
         }
       }
     }
@@ -1491,6 +1592,7 @@
             height: 36px !important;
             display: flex;
             align-items: center;
+            font-size: 14px;
 
             &:nth-of-type(2n+1) {
               background: rgba(0, 152, 255, 0.13);
@@ -1504,6 +1606,10 @@
             .val {
               flex: 2;
             }
+          }
+
+          .orange {
+            color: #FF5728;
           }
         }
       }
@@ -1825,6 +1931,7 @@
           line-height: 36px;
           border-bottom: 1px solid rgba(255, 255, 255, 0.16);
           margin-bottom: 10px;
+          padding-right: 10px;
 
           .code {
             font-weight: 500;
@@ -1890,4 +1997,4 @@
   object-fit: cover;
   z-index: -1;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3