From 214e6fe7a754ddf4900e07033a2fda6200f4d7a1 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 16 十二月 2024 19:38:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 screen/src/views/LogisticsEfficiency.vue |  328 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 206 insertions(+), 122 deletions(-)

diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index 8a4cebb..899b850 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -3,7 +3,7 @@
     <div class="main_app">
       <img src="@/assets/images/energy_ef/bg@2x.png" class="main_bg" alt="" />
       <div class="main_header">
-        <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" />
+        <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> -->
         <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-璋冨害鑳芥晥璺熻釜</div>
         <div class="time_wrap">
           <span class="date">{{ date }}</span>
@@ -30,14 +30,22 @@
               <div class="content">
                 <div class="num" v-if="data1.monthOutTotal || data1.yearOutTotal">{{ activeTab1 == 0 ?
                   data1.monthOutTotal.toLocaleString() : data1.yearOutTotal.toLocaleString() }}</div>
-                <div class="unit_wrap" v-if="data1.monthOutTotalOnYear || data1.yearOutTotalOnYear">
-                  <span style="color: #869CC9;">鍚屾瘮</span>
-                  <img
-                    v-if="(activeTab1 == 0 && data1.monthOutTotalOnYear > 0) || (activeTab1 == 1 && data1.yearOutTotalOnYear > 0)"
-                    src="@/assets/images/ic_up.png" class="icon" alt="">
-                  <img v-else src="@/assets/images/ic_down.png" class="icon" alt="">
-                  <span>{{ activeTab1 == 0 ? Math.abs(data1.monthOutTotalOnYear) : Math.abs(data1.yearOutTotalOnYear)
-                    }}%</span>
+                <div class="unit_wrap">
+                  <span style="color: #869CC9;">{{ activeTab1 == 0 ? '鍚屾瘮' : '鐜瘮' }}</span>
+                  <template v-if="activeTab1 == 0 && data1.monthLastOutTotal">
+                    <img v-if="data1.monthOutTotal > data1.monthLastOutTotal" src="@/assets/images/ic_up.png"
+                      class="icon" alt="">
+                    <img v-else src="@/assets/images/ic_down.png" class="icon" alt="">
+                  </template>
+                  <template v-if="activeTab1 == 1 && data1.yearLastOutTotal">
+                    <img v-if="data1.yearOutTotal > data1.yearLastOutTotal" src="@/assets/images/ic_up.png"
+                      class="icon" alt="">
+                    <img v-else src="@/assets/images/ic_down.png" class="icon" alt="">
+                  </template>
+                  
+                  <span v-if="activeTab1 == 0 && data1.monthLastOutTotal">{{ Math.abs((((data1.monthOutTotal - 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>
                 </div>
               </div>
               <div class="train_wrap">
@@ -151,21 +159,33 @@
             <div class="list">
               <div class="item">
                 <img src="@/assets/images/LogisticsCenter/car_zaitu@2x.png" alt="">
-                <span>鍦ㄩ�旓細{{ 8 }}</span>
+                <span>鍦ㄩ�旓細{{ data7.busyNum }}</span>
               </div>
               <div class="item">
                 <img src="@/assets/images/LogisticsCenter/car_kongxian@2x.png" alt="">
-                <span>绌洪棽锛歿{ 8 }}</span>
+                <span>绌洪棽锛歿{ data7.idleNum }}</span>
               </div>
               <div class="item">
                 <img src="@/assets/images/LogisticsCenter/car_lixian@2x.png" alt="">
-                <span>绂荤嚎锛歿{ 8 }}</span>
+                <span>绂荤嚎锛歿{ data7.offlineNum }}</span>
               </div>
             </div>
             <div class="echart_wrap">
               <div ref="echartMap" class="echart_map" id="echartMap"></div>
             </div>
-
+            <div class="warnning_info">
+              <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="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>
         </div>
         <div class="right_box">
@@ -187,7 +207,7 @@
                 <img src="@/assets/images/energy_ef/ic_chukuxiaolv@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍑哄簱鏁堢巼</div>
-                  <div class="num"><span>{{ activeTab12 == 0 ? data1.todayInRata : data1.monthInRata }}</span>涓囨敮/灏忔椂
+                  <div class="num"><span>{{ activeTab12 == 0 ? data1.todayOutRate : data1.monthOutRate }}</span>涓囨敮/灏忔椂
                   </div>
                 </div>
               </div>
@@ -195,7 +215,7 @@
                 <img src="@/assets/images/energy_ef/ic_rukuxiaolv@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍏ュ簱鏁堢巼</div>
-                  <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.monthOutTotal : data1.yearOutTotal
+                  <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.todayInRate : data1.monthInRate
                       }}</span>涓囨敮/灏忔椂</div>
                 </div>
               </div>
@@ -259,7 +279,7 @@
         </div>
       </div>
       <!--  -->
-      <div class="modal" v-if="showModal">
+      <div class="modal" v-if="activeCar && activeCar.phone">
         <div class="title_head">
           <img src="@/assets/images/energy_ef/chuku_ic_car@2x.png" alt="">
           <span>鐨朼222</span>
@@ -314,7 +334,7 @@
           </div>
         </div>
       </div>
-      <div class="modal_mask" v-if="showModal" @click="showModal = false"></div>
+      <div class="modal_mask" v-if="activeCar && activeCar.phone" @click="activeCar = {}"></div>
     </div>
   </v-scale-screen>
 </template>
@@ -336,6 +356,8 @@
   wlstockList,
   wltotalInList,
   wltransportMeasure,
+  carsListPost,
+  getCarsJobDetails
 } from '@/api'
 import 'swiper/css/swiper.min.css'
 import Swiper from 'swiper'
@@ -351,13 +373,6 @@
   time.value = dayjs().format('HH:mm:ss')
 
 }, 1000)
-
-const showModal = ref(false)
-const modalTab = ref(0)
-const modalTabClick = (val) => {
-  modalTab.value = val
-}
-
 
 
 const initEnergy = () => {
@@ -381,42 +396,62 @@
       left: '3%',
       right: '4%',
       bottom: '3%',
-      top: '18%',
+      top: '26%',
       containLabel: true
     },
     tooltip: {
       trigger: 'axis'
     },
-    xAxis: [{
-      nameGap: 5,
-      type: 'category',
-      axisLine: {
-        show: true,
-        lineStyle: {
-          color: '#999'
+    xAxis: [
+      {
+        nameGap: 5,
+        type: 'category',
+        axisLine: {
+          show: true,
+          lineStyle: {
+            color: '#999'
+          },
         },
-      },
-      axisLabel: {
-        color: '#869CC9'
-        // fontSize: 24,
-      },
-      axisTick: {
-        show: false,
-      },
-      data: dataList2.value.map(i => i.planDate),
-    }],
+        axisLabel: {
+          color: '#869CC9'
+          // fontSize: 24,
+        },
+        axisTick: {
+          show: false,
+        },
+        data: dataList2.value.map(i => i.planDateStrT),
+      }
+    ],
     yAxis: [
       {
-        nameTextStyle: {
-          color: '#869CC9',
-        },
-        offset: 0,
-        name: '涓囨敮',
         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: {
           show: true,
         },
@@ -428,18 +463,10 @@
             type: 'dashed'
           }
         },
-      },
-      {
-        type: 'value',
-        name: '%',
-        min: 0,
-        max: 100,
-        // interval: 5,
         axisLabel: {
-          formatter: '{value}%'
-        },
-        splitLine: false
-      }
+          formatter: '{value}'
+        }
+      },
     ],
     series: [
       {
@@ -452,6 +479,7 @@
           position: 'top',
           color: '#fff',
         },
+        yAxisIndex: 1,
         itemStyle: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
             {
@@ -475,6 +503,7 @@
         name: '浠诲姟瀹屾垚閲�',
         type: 'bar',
         barWidth: 10,
+        yAxisIndex: 1,
         label: {
           show: false,
           position: 'top',
@@ -504,6 +533,7 @@
         type: 'line',
         smooth: false,
         showAllSymbol: true,
+        yAxisIndex: 0,
         symbol: 'none',
         lineStyle: {
           color: "#1a43bc"
@@ -555,26 +585,24 @@
 const initMap = () => {
   var myChart = echarts.init(echartMap.value)
   echarts.registerMap('js', ahJSON)
-  var scatterData = [
-    {
-      name: '骞煎効鍥�',
-      num: 15,
-      color: ['#1984ff', '#184b8d'],
-      img: icKongxian,
-      data: [
-        { name: '', value: [117.25, 31.49] },
-      ],
-    },
-    {
-      name: '灏忓',
-      num: 11,
-      color: ['#f16c08', '#7f3710'],
-      img: icLixian,
-      data: [
-        { name: '', value: [118.5, 31.08] },
-      ],
+  const scatterData = data7.value.carsList.map(item => {
+    return {
+      name: item.terminalId,
+      img: item.status == 0 ? icLixian : item.status == 1 || item.status == 2 ? icZaitu : icKongxian,
+      data: [{ code: item.plateNum, value: [item.longitude, item.latitude] }]
     }
-  ]
+  })
+  // var scatterData = [
+  //   {
+  //     name: '骞煎効鍥�',
+  //     num: 15,
+  //     // color: ['#1984ff', '#184b8d'],
+  //     img: icKongxian,
+  //     data: [
+  //       { name: 'asdasdas ', value: [117.25, 31.49] },
+  //     ],
+  //   },
+  // ]
   let serData = []
   scatterData.forEach((item) => {
     serData.push({
@@ -609,30 +637,11 @@
       },
       symbolSize: [32, 40],
       hoverAnimation: true,
-
       zlevel: 99,
       data: item.data,
     })
   }
   )
-  var center = {
-    '鍚堣偉甯�': [117.25, 31.83],
-    '婊佸窞甯�': [118.32, 32.3],
-    '鑺滄箹甯�': [118.43, 31.35],
-    '闃滈槼甯�': [115.38, 32.89],
-    '铓屽煚甯�': [117.39, 32.92],
-    '娣崡甯�': [116.99, 32.63],
-    '椹瀺灞卞競': [118.5, 31.71],
-    '瀹夊簡甯�': [117.05, 30.52],
-    '榛勫北甯�': [118.33, 29.71],
-    '閾滈櫟甯�': [117.81, 30.94],
-    '瀹垮窞甯�': [116.98, 33.64],
-    '娣寳甯�': [116.8, 33.9],
-    '鍏畨甯�': [116.51, 31.75],
-    '姹犲窞甯�': [117.49, 30.66],
-    '瀹e煄甯�': [118.76, 30.94],
-    '浜冲窞甯�': [115.78, 33.84],
-  }
   var data = [
     { name: "鍚堣偉甯�", value: 3 },
     { name: "婊佸窞甯�", value: 0 },
@@ -659,16 +668,6 @@
       x: 'center',
       textStyle: {
         color: '#ffffff'
-      }
-    },
-    tooltip: {
-      trigger: 'item',
-      formatter: function (params) {
-        if (typeof (params.value)[2] == "undefined") {
-          return params.name + ' : ' + params.value
-        } else {
-          return params.name + ' : ' + params.value[2]
-        }
       }
     },
     visualMap: {
@@ -712,7 +711,7 @@
         symbolSize: 14,
         label: {
           normal: {
-            show: true,
+            show: false,
             formatter: function (params) {
               return '{fline|鍦扮偣锛�' + params.data.city + '}\n{tline|' + (params.data.info || '鍙戠敓xx闆嗕欢') + '}'
             },
@@ -751,10 +750,7 @@
         label: {
           show: true,
           color: '#ffffff',
-          emphasis: {
-            color: 'white',
-            show: false
-          }
+
         },
         itemStyle: {
           normal: {
@@ -763,9 +759,15 @@
             areaColor: '#1d3b60'
           },
           emphasis: {
-            areaColor: '#FA8C16',
-            borderWidth: 1,
-            color: '#428598'
+            disabled: true,
+            // areaColor: '#FA8C16',
+            // borderWidth: 1,
+            // color: '#428598',
+            label: {
+              show: true, // 濮嬬粓鏄剧ず鏂囧瓧
+              color: '#fff' // 璁剧疆鏂囧瓧棰滆壊
+            },
+            areaColor: null
           }
         },
         data: data
@@ -775,10 +777,22 @@
   }
 
   myChart.setOption(option)
+  myChart.on('click', function (params) {
+    const item = params.data
+    getCarsJobDetails({ carCode: item.code }).then(res => {
+      activeCar.value = res.data
+    })
+  })
   window.addEventListener('resize', function () {//鎵ц
     myChart.resize()
   })
 }
+const activeCar = ref({})
+const modalTab = ref(0)
+const modalTabClick = (val) => {
+  modalTab.value = val
+}
+
 
 const data1 = ref({})
 const activeTab1 = ref(0)
@@ -798,11 +812,17 @@
 
 const dataList2 = ref([])
 const activeTab2 = ref(0)
-const tabClick2 = (val) => { activeTab2.value = val }
+const tabClick2 = (val) => {
+  activeTab2.value = val
+  getData2()
+}
 const getData2 = () => {
   wltransportMeasure({ queryType: activeTab2.value }).then(res => {
-    const result = res.data
+    const result = res.data || []
     dataList2.value = result
+    dataList2.value.forEach(item => {
+      item.planDateStrT = activeTab2.value == 2 ? dayjs(item.planDate).format('M') : dayjs(item.planDate).format('M.D')
+    })
     initEnergy()
   })
 }
@@ -831,7 +851,10 @@
 }
 const data4 = ref({})
 const activeTab4 = ref(0)
-const tabClick4 = (val) => { activeTab4.value = val }
+const tabClick4 = (val) => {
+  activeTab4.value = val
+  getData4()
+}
 const getData4 = () => {
   wljobData({ queryType: activeTab4.value }).then(res => {
     const result = res.data
@@ -850,7 +873,7 @@
       return i
     })
     dataList5.value.forEach(i => {
-      i.rate = ((i.num / count) * 100).toFixed(0)
+      i.rate = count == 0 ? 0 : ((i.num / count) * 100).toFixed(0)
     })
     data5.value = count
     initEchart1()
@@ -859,8 +882,18 @@
 const dataList6 = ref([])
 const getData6 = () => {
   wlstockList().then(res => {
-    const result = res.data
+    const result = res.data.stockList || []
     dataList6.value = result
+  })
+}
+
+const isShowCarW = ref(false)
+const data7 = ref({})
+const getData7 = () => {
+  carsListPost().then(res => {
+    const result = res.data || {}
+    data7.value = result
+    initMap()
   })
 }
 
@@ -896,8 +929,7 @@
   getData4()
   getData5()
   getData6()
-
-  initMap()
+  getData7()
 
   setTimeout(() => {
     loopFn1()
@@ -1212,7 +1244,7 @@
       }
 
       .echart_wrap {
-        width: 100%;
+        width: 86%;
         height: 100%;
 
         .echart_map {
@@ -1221,6 +1253,58 @@
           /* transform: rotate(60deg); */
         }
       }
+
+      .warnning_info {
+        position: absolute;
+        right: 0;
+        bottom: 0;
+        border-top: 1px solid #5ecbce;
+        border-bottom: 1px solid #5ecbce;
+
+        .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;
+          font-weight: bold;
+          font-size: 16px;
+          cursor: pointer;
+
+          img {
+            width: 14px;
+            margin-right: 10px;
+          }
+        }
+
+        .war_list {
+          max-height: 300px;
+          overflow: auto;
+
+          .line {
+            font-size: 13px;
+            color: #D2E0FF;
+            display: flex;
+            align-items: center;
+            height: 30px;
+
+            div {
+              flex: 3;
+            }
+
+            .id_card {
+              color: #00F2F3;
+            }
+
+            .title {
+              flex: 4;
+            }
+          }
+        }
+      }
     }
   }
 

--
Gitblit v1.9.3