From 6bd673610b45c8b7af056d296dde17585c886586 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 28 十月 2024 17:26:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 screen/src/views/LogisticsCenter.vue | 1696 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,696 insertions(+), 0 deletions(-)

diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue
new file mode 100644
index 0000000..a1c768e
--- /dev/null
+++ b/screen/src/views/LogisticsCenter.vue
@@ -0,0 +1,1696 @@
+<template>
+  <v-scale-screen width="1920" height="960">
+    <div class="main_app">
+      <img src="@/assets/images/LogisticsCenter/bg@2x.png" class="main_bg" alt="" />
+      <div class="main_header">
+        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <div class="title">瀹夊窘涓儫鐗╂祦涓績杩愯澶у睆</div>
+        <div class="time_wrap">
+          <span class="date">{{ date }}</span>
+          <span class="week">{{ week }}</span>
+          <span class="time">{{ time }}</span>
+        </div>
+      </div>
+      <div class="main_content">
+        <div class="left_box">
+          <div class="com_header">
+            <div class="title">
+              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+              <div>璁㈠崟鍦ㄩ�旇窡韪�</div>
+            </div>
+            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+          </div>
+          <div class="left_box_one">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈勾绱鍑哄簱閲�</div>
+              </div>
+            </div>
+            <div class="content_wrap">
+              <div class="num_wrap">
+                <div class="num_list">
+                  <div class="num" v-for="i in '200000'">
+                    {{ i }}
+                    <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt="">
+                  </div>
+                </div>
+                <div class="content">
+                  <div class="unit_wrap">
+                    <span class="la">鍚屾瘮</span>
+                    <img src="@/assets/images/ic_up.png" class="icon" alt="">
+                    <span>10.2%</span>
+                    <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span>
+                    <span>3900</span>
+                  </div>
+
+                </div>
+              </div>
+              <div class="echart_wrap">
+                <div class="echart1" id="echart1"></div>
+                <div class="list">
+                  <div class="item" v-for="item, i in StockOutData" :key="i">
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
+                    <div class="num">{{ item.value }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="left_box_two">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>杩�7鏃ュ埌璐ф儏鍐�</div>
+              </div>
+            </div>
+            <div class="energy_wrap">
+              <div class="energyRef"></div>
+            </div>
+          </div>
+          <div class="left_box_three">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>褰撳墠杩愯緭浠诲姟</div>
+              </div>
+              <div class="search_wrap">
+                <img src="@/assets/images/LogisticsCenter/ic_search@2x.png" alt="">
+                <span>璁㈠崟鏌ヨ</span>
+              </div>
+            </div>
+            <div class="list_wrap">
+              <div class="header line">
+                <span class="item">杩愯緭杞﹁締</span>
+                <span class="item">鐘舵��</span>
+                <span class="item">浣嶇疆</span>
+                <span class="item">浠诲姟涓嬭揪鏃堕棿</span>
+              </div>
+              <div class="line" v-for="i in 5">
+                <span class="item">鐨朅23bbb</span>
+                <span class="item">11</span>
+                <span class="item">11</span>
+                <span class="item">11</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="header_wrap">
+              <div class="left">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <span>鍑哄簱鑳藉姏</span>
+              </div>
+              <div class="right">
+                <img src="@/assets/images/LogisticsCenter/position.png" class="posi" alt="">
+                <span>鍏ㄧ渷</span>
+                <img src="@/assets/images/LogisticsCenter/bottom.png" class="icon" alt="">
+              </div>
+            </div>
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩璁″垝閲�</div>
+                  <div class="num"><span>1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩鍑哄簱閲�</div>
+                  <div class="num"><span class="today">1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩鏈嚭搴撻噺</div>
+                  <div class="num"><span class="finish">1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+            </div>
+            <div class="footer">
+              <span>鍗犲嚭搴撹兘鍔�</span>
+              <span class="num">80%</span>
+            </div>
+          </div>
+          <div class="center_box_two">
+            <div class="echart_map" ref="mapEchart" id="echart_map"></div>
+          </div>
+        </div>
+        <div class="right_box">
+          <div class="com_header">
+            <div class="title">
+              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+              <div>浠撳偍涓�搴撳埗</div>
+            </div>
+            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+          </div>
+          <div class="right_box_one">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈勾绱鍏ュ簱閲�</div>
+              </div>
+            </div>
+            <div class="content_wrap">
+              <div class="num_wrap">
+                <div class="num_list">
+                  <div class="num" v-for="i in '200000'">
+                    {{ i }}
+                    <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt="">
+                  </div>
+                </div>
+                <div class="content">
+                  <div class="unit_wrap">
+                    <span class="la">鍚屾瘮</span>
+                    <img src="@/assets/images/ic_up.png" class="icon" alt="">
+                    <span>10.2%</span>
+                    <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span>
+                    <span>3900</span>
+                  </div>
+
+                </div>
+              </div>
+              <div class="static_wrap">
+                <div class="echart_wrap">
+                  <div class="echart3" id="echart3"></div>
+                  <div class="pie_text">
+                    <div class="fs30">30%</div>
+                  </div>
+                </div>
+                <div class="text">璁″垝瀹屾垚閲�</div>
+              </div>
+            </div>
+          </div>
+          <div class="right_box_two">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>杩涢攢瀛樿繍钀�</div>
+              </div>
+              <div class="tabs">
+                <div class="tab active">7澶�</div>
+                <div class="separate"></div>
+                <div class="tab">30澶�</div>
+                <div class="separate"></div>
+                <div class="tab">1骞�</div>
+              </div>
+            </div>
+            <div class="echart4_wrap">
+              <div class="echart4" id="echart4"></div>
+            </div>
+          </div>
+          <div class="right_box_three">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>搴撳瓨鍒╃敤鐜�</div>
+              </div>
+            </div>
+            <div class="echart5_wrap">
+              <div class="echart5" id="echart5"></div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </v-scale-screen>
+</template>
+
+<script setup>
+import { ref, onMounted, nextTick } from 'vue'
+import VScaleScreen from 'v-scale-screen'
+import Percent from '@/components/percent.vue'
+import dayjs from 'dayjs'
+import * as echarts from 'echarts'
+import chinaJSON from '@/assets/china.json'
+
+const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
+const date = ref(dayjs().format('YYYY.MM.DD'))
+const week = ref(weekMap[new Date().getDay()])
+const time = ref(dayjs().format('HH:mm:ss'))
+setInterval(() => {
+  date.value = dayjs().format('YYYY-MM-DD')
+  week.value = weekMap[new Date().getDay()]
+  time.value = dayjs().format('HH:mm:ss')
+
+}, 1000)
+
+const colors = ['#0193FE', '#FFB642']
+const StockOutData = ref([])
+const getStockOut = () => {
+  let arr = []
+  arr.push({ name: '鐪佸唴', value: 20 })
+  arr.push({ name: '鐪佸', value: 30 })
+  arr.sort((a, b) => b.value - a.value)
+  StockOutData.value = arr
+
+  initEchart1()
+}
+const initEchart1 = () => {
+  const myChart = echarts.init(document.getElementById('echart1'))
+  const option = {
+    tooltip: {
+      trigger: 'item'
+    },
+    series: [
+      {
+        type: 'pie',
+        radius: ['72%', '96%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        color: colors,
+        labelLine: {
+          show: false
+        },
+        data: StockOutData.value
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initEchart2 = () => {
+  const myChart = echarts.init(document.getElementById('echart1'))
+  const option = {
+    series: [
+      {
+        type: 'pie',
+        radius: ['86%', '100%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        padAngle: 5,
+        itemStyle: {
+          borderRadius: 10
+        },
+        color: colors,
+        labelLine: {
+          show: false
+        },
+        data: [
+          { value: 1048, name: 'Search Engine' },
+          { value: 735, name: 'Direct' },
+          { value: 580, name: 'Email' }
+        ]
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initEchart3 = () => {
+  const myChart = echarts.init(document.getElementById('echart3'))
+  const option = {
+    tooltip: {
+      trigger: 'item'
+    },
+    series: [
+      {
+        type: 'pie',
+        radius: ['80%', '96%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        color: ['#72ecc5', '#19373a'],
+        labelLine: {
+          show: false
+        },
+        data: StockOutData.value
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initEchart4 = () => {
+  // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+  const myChart = echarts.init(document.getElementById('echart4'))
+  // 缁樺埗鍥捐〃
+  myChart.setOption({
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'line'
+      },
+      formatter: function (params) {
+        setTimeout(() => {
+          console.log('params', params)
+        })
+        return `
+          <div style="background-color: #091123;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;">
+            <div>${params[0].name}鎬婚攢鍞(涓囧厓)</div>
+            <div style="display: flex;align-items: center;">
+              <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #ebbf40;"></div>
+              <div style="margin: 0 4px 0 6px;">鎬婚攢鍞�</div>
+              <span style="color: #ebbf40;">${params[0].value}</span>
+            </div>
+          </div>
+        `
+      }
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: false,
+      data: [1, 2, 3, 4, 5, 5]
+    },
+    yAxis: {
+      type: 'value',
+      name: '涓囨敮',
+      nameTextStyle: {
+        padding: [0, 0, 0, -16]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          //杩欓噷杈撳叆绾挎潯鐨勬牱寮�
+          color: 'rgba(255,255,255,0.14)',
+          type: 'dashed',
+        },
+        splitNumber: 4
+      }
+    },
+    legend: {
+      itemGap: 24,
+      icon: 'rect',
+      right: '12px',
+      top: '0',
+      itemWidth: 16,
+      itemHeight: 2,
+      textStyle: {
+        color: '#fff',
+        borderColor: '#fff'
+      },
+      data: ['鎬诲叆搴撻噺', '鎬诲嚭搴撻噺']
+    },
+    grid: {
+      top: '18%',
+      left: '0%',
+      right: '2%',
+      bottom: '2%',
+      containLabel: true
+    },
+    series: [
+      {
+        name: '鎬诲叆搴撻噺',
+        data: [10, 2, 30, 4, 4, 30].map(i => {
+          return {
+            name: i,
+            value: i,
+          }
+        }),
+        type: 'line',
+        areaStyle: {
+          normal: {
+            color: {
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: "#4191f6" // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: .4,
+                  color: "#203d79" // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: "#1b1b12" // 100% 澶勭殑棰滆壊
+                }],
+              globalCoord: false // 缂虹渷涓� false
+            }
+          }
+        },
+        lineStyle: { // 绾挎潯鏍峰紡
+          color: {
+            type: 'linear',
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [{
+              offset: 0, color: '#4191f6' // 0% 澶勭殑棰滆壊
+            }, {
+              offset: 1, color: '#4191f6' // 100% 澶勭殑棰滆壊
+            }],
+          },
+          width: 1.5, // 绾挎潯绮楃粏
+        },
+        symbol: 'circle',
+        symbolSize: 6,
+        itemStyle: {
+          color: "#4190f4",
+          borderColor: "rgba(255,255,255,.3)",
+          borderWidth: 6,
+        },
+        smooth: true
+      },
+      {
+        name: '鎬诲嚭搴撻噺',
+        data: [30, 2, 10, 4, 4, 20].map(i => {
+          return {
+            name: i,
+            value: i,
+          }
+        }),
+        type: 'line',
+        areaStyle: {
+          normal: {
+            color: {
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [{
+                offset: 0,
+                color: "rgba(192, 156, 53,.7)" // 0% 澶勭殑棰滆壊
+              }, {
+                offset: 1,
+                color: "#1b1b12" // 100% 澶勭殑棰滆壊
+              }],
+              globalCoord: false // 缂虹渷涓� false
+            }
+          }
+        },
+        lineStyle: { // 绾挎潯鏍峰紡
+          color: {
+            type: 'linear',
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [{
+              offset: 0, color: '#F3BD00' // 0% 澶勭殑棰滆壊
+            }, {
+              offset: 1, color: '#F3BD00' // 100% 澶勭殑棰滆壊
+            }],
+          },
+          width: 2, // 绾挎潯绮楃粏
+        },
+        symbol: 'circle',
+        symbolSize: 6,
+        itemStyle: {
+          color: "#F3BD00",
+          borderColor: "rgba(255,255,255,.3)",
+          borderWidth: 6,
+        },
+        smooth: true
+      }
+    ]
+  })
+
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+const initEchart5 = () => {
+  // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+  const myChart = echarts.init(document.getElementById('echart5'))
+  // 缁樺埗鍥捐〃
+  myChart.setOption({
+    legend: {
+      itemGap: 12,
+      // icon: 'circle',
+      right: '12px',
+      top: '0',
+      data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'],
+      itemWidth: 20,
+      itemHeight: 10,
+      textStyle: {
+        color: '#fff',
+        borderColor: '#fff'
+      },
+    },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '3%',
+      top: '16%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    xAxis: [{
+      nameGap: 5,
+      type: 'category',
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: '#999'
+        },
+      },
+      axisLabel: {
+        color: '#869CC9'
+        // fontSize: 24,
+      },
+      axisTick: {
+        show: false,
+      },
+      data: ['鍚堣偉', '婊佸窞', '鑺滄箹', '铓屽煚', '闃滈槼'],
+    }],
+    yAxis: [
+      {
+        nameTextStyle: {
+          color: '#869CC9',
+        },
+        offset: 0,
+        name: '涓囨敮',
+        type: 'value',
+        axisLabel: {
+          show: true,
+          color: "#869CC9",
+        },
+        axisLine: {
+          show: true,
+        },
+        splitLine: {
+          show: true,
+          lineStyle: {
+            width: 1,
+            color: "rgba(49,105,129,0.4)",
+            type: 'dashed'
+          }
+        },
+      },
+      {
+        type: 'value',
+        name: '%',
+        min: 0,
+        max: 100,
+        // interval: 5,
+        axisLabel: {
+          formatter: '{value}%'
+        },
+        splitLine: false
+      }
+    ],
+    series: [
+      {
+        name: '鎬诲簱瀛�',
+        type: 'bar',
+        barWidth: 8,
+        barGap: '60%',
+        label: {
+          show: false,
+          position: 'top',
+          color: '#fff',
+        },
+        itemStyle: {
+          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+            {
+              offset: 0,
+              color: '#5bc7d5'
+            },
+            {
+              offset: 1,
+              color: '#1a3f55'
+            }
+          ], false),
+          lineStyle: {
+            width: 1,
+            type: 'solid'
+          },
+          barBorderRadius: [30, 30, 0, 0],
+        },
+        data: [900, 438, 485, 631, 689]
+      },
+      {
+        name: '褰撳墠搴撳瓨',
+        type: 'bar',
+        barWidth: 8,
+        label: {
+          show: false,
+          position: 'top',
+          color: '#fff',
+        },
+        itemStyle: {
+          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+            {
+              offset: 0,
+              color: '#edaf3d'
+            },
+            {
+              offset: 1,
+              color: '#323522'
+            }
+          ], false),
+          lineStyle: {
+            width: 1,
+            type: 'solid'
+          },
+          barBorderRadius: [30, 30, 0, 0],
+        },
+        data: [438, 485, 631, 689, 900]
+      },
+      {
+        name: '搴撳瓨鍒╃敤鐜�',
+        type: 'line',
+        smooth: true,
+        showAllSymbol: true,
+        symbol: 'none',
+        lineStyle: {
+          color: "#3d87e5"
+        },
+        label: {
+          show: false,
+          position: 'top',
+          color: '#fff',
+        },
+        data: [485, 631, 389, 224, 287]
+      }
+    ]
+  })
+
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+const mapEchart = ref()
+const initMap = () => {
+  var myChart = echarts.init(mapEchart.value)
+  echarts.registerMap('china', chinaJSON)
+  var points = [
+    // 鐐瑰潗鏍�
+    { value: [110.81, 33.40], itemStyle: { color: '#c1bb1f' }, name: '11', total: 0, bj: 0, yj: 0, yx: 0, tj: 0, dw: 0 },
+    { value: [116.55, 40.01], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 0, bj: 0, yj: 0, yx: 0, tj: 0, dw: 0 },
+    { value: [113.11, 28.40], itemStyle: { color: '#3eef1d' }, name: '22', total: 5, bj: 0, yj: 0, yx: 5, tj: 0, dw: 0 },
+    { value: [106.44, 29.50], itemStyle: { color: '#3eef1d' }, name: '33', total: 10, bj: 0, yj: 0, yx: 10, tj: 0, dw: 0 },
+    { value: [112.85, 38.95], itemStyle: { color: '#3eef1d' }, name: '44', total: 8, bj: 0, yj: 0, yx: 8, tj: 0, dw: 0 },
+    { value: [82.78, 43.27], itemStyle: { color: '#3eef1d' }, name: '55', total: 18, bj: 0, yj: 0, yx: 18, tj: 0, dw: 0 }
+  ]
+  var lineToLf = [
+    { name: '11', coords: [[110.81, 33.40], [116.55, 40.01]], lineStyle: { color: '#c1bb1f' } },
+    { name: '22', coords: [[113.11, 28.40], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } },
+    { name: '33', coords: [[106.44, 29.50], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } },
+    { name: '44', coords: [[112.85, 38.95], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } },
+    { name: '55', coords: [[82.78, 43.27], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } }
+  ]
+  const option = {
+    backgroundColor: 'transparent', // 璁剧疆鑳屾櫙鑹查�忔槑
+    // 蹇呴』璁剧疆
+    tooltip: {
+      show: false
+    },
+    // 鍦板浘闃村奖閰嶇疆
+    geo: {
+      map: 'china',
+      // 杩欓噷蹇呴』瀹氫箟锛屼笉鐒跺悗闈eries閲岄潰涓嶇敓鏁�
+      tooltip: {
+        show: false
+      },
+      label: {
+        show: false
+      },
+      zoom: 1.5,
+      silent: true, // 涓嶅搷搴旈紶鏍囨椂闂�
+      show: true,
+      roam: false, // 鍦板浘缂╂斁鍜屽钩绉�
+      aspectScale: 0.75, // scale 鍦板浘鐨勯暱瀹芥瘮
+      itemStyle: {
+        borderColor: '#2d5f9c',
+        borderWidth: 1,
+        areaColor: '#2d5f9c',
+        shadowColor: 'rgba(1,34,73,0.48)',
+        shadowBlur: 10,
+        shadowOffsetX: -10, //
+        shadowOffsetY: 10
+      },
+      select: {
+        disabled: true
+      },
+      emphasis: {
+        disabled: true,
+        areaColor: '#00F1FF'
+      },
+      // 鍦板浘鍖哄煙鐨勫杈瑰舰 鍥惧舰鏍峰紡 闃村奖鏁堟灉
+      // z鍊煎皬鐨勫浘褰細琚珃鍊煎ぇ鐨勫浘褰㈣鐩�
+      top: '30.2%',
+      left: 'center',
+      // 鍘婚櫎鍗楁捣璇稿矝闃村奖 series map閲岄潰娌℃湁姝ゅ睘鎬�
+      regions: [{
+        name: '鍗楁捣璇稿矝',
+        selected: false,
+        emphasis: {
+          disabled: true
+        },
+        itemStyle: {
+          areaColor: '#00000000',
+          borderColor: '#00000000'
+        }
+      }],
+      z: 1
+    },
+    series: [
+      // 鍦板浘閰嶇疆
+      {
+        type: 'map',
+        map: 'china',
+        zoom: 1.5,
+        tooltip: {
+          show: false
+        },
+        label: {
+          show: true, // 鏄剧ず鐪佷唤鍚嶇О
+          color: '#fff',
+          fontSize: 13,
+          shadowColor: '#fff',
+          shadowBlur: 10,
+          shadowOffsetX: 2,
+          shadowOffsetY: 2,
+          textBorderColor: '#fff',
+          // rotate: 90,
+          align: 'center'
+        },
+        top: '28%',
+        left: 'center',
+        aspectScale: 0.75,
+        roam: false, // 鍦板浘缂╂斁鍜屽钩绉�
+        itemStyle: {
+          borderColor: '#4278a3', // 鐪佸垎鐣岀嚎棰滆壊  闃村奖鏁堟灉鐨�
+          borderWidth: 1,
+          areaColor: '#1d3f71',
+          opacity: 1
+        },
+        // 鍘婚櫎閫変腑鐘舵��
+        select: {
+          disabled: true
+        },
+        emphasis: { // 鑱氱劍鍚庨鑹�
+          disabled: false, // 寮�鍚珮浜�
+          label: {
+            align: 'center',
+            color: '#04CFF5'
+          },
+          itemStyle: {
+            color: '#ffffff',
+            areaColor: '#3c87b2'// 闃村奖鏁堟灉 榧犳爣绉诲姩涓婂幓鐨勯鑹�
+          }
+        },
+        z: 2
+      },
+      // 鐐�
+      {
+        name: 'companyPoint',
+        type: 'effectScatter',
+        coordinateSystem: 'geo',
+        showEffectOn: 'render',
+        // zlevel: 2, // zlevel鐢ㄤ簬 Canvas 鍒嗗眰 鐩稿悓鐨勭粯鍒跺湪鍚屼竴涓猚anvas涓�
+        rippleEffect: {
+          number: 5, // 娉㈢汗鏁伴噺
+          period: 4, // 鍔ㄧ敾鍛ㄦ湡 鏁板�艰秺澶э紝娉㈠姩瓒婃參
+          scale: 3.5, // 鍔ㄧ敾涓尝绾圭殑鏈�澶х缉鏀炬瘮渚�
+          brushType: 'stroke' // 娉㈢汗鐨勭粯鍒舵柟寮� stroke fill
+        },
+        label: {
+          show: false,
+          position: 'right',
+          formatter: '{b}',
+          color: '#97e9e1',
+          fontSize: 14
+        },
+        symbol: 'circle',
+        symbolSize: 8,
+        data: points,
+        tooltip: {
+          show: true,
+          backgroundColor: 'rgba(0,0,0,0)',
+          padding: 0,
+          borderWidth: 0,
+          extraCssText: 'box-shadow: 0 0 0 rgba(0, 0, 0, 0);', // 鍘婚櫎box-shadow闃村奖
+          formatter: (params) => {
+            return `<div class="map-tip-box">
+                        <div class="company-name">${params.name}</div>
+                        <div class="monitor-total">鐩戞祴鎬绘暟锛�${params.data.total}鍙�</div>
+                        <div class="item-state-con">
+                          <span class="dot bj"></span>
+                          <span class="item-state-num">
+                           <span class="num">${params.data.bj}鍙�</span>
+                           <span class="text">鎶ヨ</span>
+                          </span>
+                        </div>
+                         <div class="item-state-con">
+                          <span class="dot yj"></span>
+                          <span class="item-state-num">
+                           <span class="num">${params.data.yj}鍙�</span>
+                           <span class="text">棰勮</span>
+                          </span>
+                        </div>
+                         <div class="item-state-con">
+                          <span class="dot yx"></span>
+                          <span class="item-state-num">
+                           <span class="num">${params.data.yx}鍙�</span>
+                           <span class="text">杩愯</span>
+                          </span>
+                        </div>
+                         <div class="item-state-con">
+                          <span class="dot tj"></span>
+                          <span class="item-state-num">
+                           <span class="num">${params.data.tj}鍙�</span>
+                           <span class="text">鍋滄満</span>
+                          </span>
+                        </div>
+                         <div class="item-state-con">
+                          <span class="dot dw"></span>
+                          <span class="item-state-num">
+                           <span class="num">${params.data.dw}鍙�</span>
+                           <span class="text">鏂綉</span>
+                          </span>
+                        </div>
+                       </div>`
+          }
+        },
+        z: 4
+      },
+      // 鍦板浘绾跨殑鍔ㄧ敾鏁堟灉
+      {
+        name: 'arrowline',
+        type: 'lines',
+        // zlevel: 1,
+        effect: {
+          show: true,
+          period: 3, // 绠ご鎸囧悜閫熷害锛屽�艰秺灏忛�熷害瓒婂揩
+          trailLength: 0.1, // 鐗规晥灏捐抗闀垮害[0,1]鍊艰秺澶э紝灏捐抗瓒婇暱閲�
+          symbol: 'arrow', // 绠ご鍥炬爣
+          symbolSize: 6 // 鍥炬爣澶у皬
+        },
+        lineStyle: {
+          color: '#1DE9B6',
+          width: 2, // 绾挎潯瀹藉害
+          opacity: 0.1, // 灏捐抗绾挎潯閫忔槑搴�
+          curveness: 0.2 // 灏捐抗绾挎潯鏇茬洿搴�
+        },
+        data: lineToLf,
+        z: 3
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+const initEnergy = () => {
+  var myChart = echarts.init(document.querySelector('.energyRef'))
+  // 缁樺埗鍥捐〃
+  myChart.setOption({
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        // Use axis to trigger tooltip
+        type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+      }
+    },
+    legend: {
+      itemGap: 24,
+      // icon: 'circle',
+      right: '12px',
+      top: '16px',
+      itemWidth: 28,
+      itemHeight: 14,
+      textStyle: {
+        color: '#fff',
+        borderColor: '#fff'
+      },
+    },
+    grid: {
+      left: '3%',
+      right: '4%',
+      bottom: '3%',
+      top: '15%',
+      containLabel: true
+    },
+    xAxis: {
+      type: 'value',
+      splitLine: {
+        show: true,
+        lineStyle: {
+          //杩欓噷杈撳叆绾挎潯鐨勬牱寮�
+          color: 'rgba(255,255,255,0.14)'
+        },
+        splitNumber: 4
+      }
+    },
+    yAxis: {
+      axisTick: {
+        show: false,
+      },
+      type: 'category',
+      axisLine: {
+        show: false
+      },
+      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    series: [
+      {
+        name: '鍦ㄩ��',
+        type: 'bar',
+        stack: 'total',
+        barWidth: 14,
+        label: {
+          show: true
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [320, 302, 301, 334, 390, 330, 320],
+        itemStyle: {
+          normal: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 1,
+              y2: 0,
+              colorStops: [{
+                offset: 0,
+                color: '#204d75'
+              }, {
+                offset: 1,
+                color: '#2f6eae'
+              }]
+            }
+          }
+        },
+      },
+      {
+        name: '鍒拌揣',
+        type: 'bar',
+        barWidth: 14,
+        stack: 'total',
+        label: {
+          show: true
+        },
+        itemStyle: {
+          normal: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 1,
+              y2: 0,
+              colorStops: [{
+                offset: 0,
+                color: '#3e8593'
+              }, {
+                offset: 1,
+                color: '#5cc2d2'
+              }]
+            }
+          }
+        },
+        emphasis: {
+          focus: 'series'
+        },
+        data: [120, 132, 101, 134, 90, 230, 210]
+      }
+    ]
+  })
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+
+onMounted(() => {
+  initEnergy()
+  initMap()
+  getStockOut()
+  initEchart2()
+  initEchart3()
+  initEchart4()
+  initEchart5()
+})
+
+
+</script>
+
+<style>
+.map-tip-box{
+  background-color: #1f3b57;
+  color: #fff;
+}
+</style>
+<style lang="scss" scoped>
+div {
+  box-sizing: border-box;
+}
+.main_content {
+  display: flex;
+  padding: 20px 25px 0;
+
+  .left_box {
+    width: 440px;
+
+    .left_box_one {
+      margin-top: 20px;
+      padding: 0px 10px 30px 20px;
+      border: 1px solid;
+
+      .content_wrap {
+        display: flex;
+        justify-content: space-between;
+
+        .num_wrap {
+          width: 272px;
+
+          .num_list {
+            display: flex;
+            margin-bottom: 20px;
+
+            .num {
+              width: 30px;
+              height: 46px;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              position: relative;
+              font-weight: 600;
+              font-size: 32px;
+              margin-right: 5px;
+            }
+          }
+
+          .content {
+            display: flex;
+            color: #D2E0FF;
+
+            .la {
+              color: #869CC9;
+            }
+
+            .unit_wrap {
+              display: flex;
+              align-items: center;
+            }
+
+            .icon {
+              width: 10px;
+              height: 12px;
+              margin-right: 6px;
+              margin-left: 4px;
+            }
+          }
+        }
+
+        .echart_wrap {
+          flex: 1;
+          display: flex;
+          align-items: center;
+          height: 48px;
+
+          .echart1 {
+            width: 46px;
+            height: 46px;
+            margin-right: 8px;
+          }
+
+          .list {
+            flex: 1;
+            font-size: 13px;
+
+            .item {
+              display: flex;
+              align-items: center;
+              margin: 8px 0;
+
+              .icon {
+                width: 10px;
+                height: 10px;
+                border-radius: 50%;
+                margin-right: 4px;
+                background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
+              }
+
+              .text {
+                margin-right: 6px;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    .left_box_two {
+      margin-bottom: 20px;
+      position: relative;
+
+      .second_title {
+        position: absolute;
+        top: 14px;
+        left: 20px;
+      }
+
+      .energy_wrap {
+        width: 100%;
+        height: 300px;
+
+        .energyRef {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+
+    .left_box_three {
+      width: 440px;
+      padding: 0 15px;
+      border: 1px solid;
+
+      .second_title {
+        margin-bottom: 10px;
+      }
+
+      .list_wrap {
+        .line {
+          display: flex;
+          height: 40px;
+          align-items: center;
+          font-size: 14px;
+          color: #D2E0FF;
+
+          &:nth-of-type(2n) {
+            background: rgba(134, 156, 201, 0.05);
+          }
+
+          .item {
+            flex: 1;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+          }
+        }
+
+        .header {
+          font-weight: 500;
+          color: #01D9FE;
+        }
+      }
+    }
+  }
+
+  .center_box {
+    flex: 1;
+    padding: 0 20px;
+    margin: 0 40px;
+    display: flex;
+    flex-direction: column;
+
+    .center_box_one {
+      background: rgba(255, 255, 255, 0.02);
+      height: 230px;
+      border-top: 2px solid #306ba1;
+      padding-top: 20px;
+
+      .header_wrap {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 28px;
+        font-weight: bold;
+        font-size: 18px;
+        background-image: -webkit-linear-gradient(top,
+            #ffffff 0%,
+            #c8ddff 66%,
+            #85b4ff 72%,
+            #74a9ff 100%);
+        -webkit-background-clip: text;
+        -webkit-text-fill-color: transparent;
+
+        .left {
+          display: flex;
+          align-items: center;
+
+          img {
+            width: 16px;
+            margin-right: 6px;
+          }
+        }
+
+        .right {
+          display: flex;
+          align-items: center;
+          cursor: pointer;
+
+          .posi {
+            width: 16px;
+            margin-right: 8px;
+          }
+
+          .icon {
+            width: 14px;
+            margin-left: 2px;
+          }
+        }
+      }
+
+      .static_wrap {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin: 30px 0 14px;
+
+        .item {
+          display: flex;
+
+          img {
+            width: 68px;
+            height: 71px;
+            margin-right: 15px;
+          }
+
+          .content {
+            font-size: 15px;
+
+            .num {
+              font-size: 12px;
+              color: #D2E0FF;
+
+              span {
+                font-weight: bold;
+                font-size: 30px;
+                margin-right: 5px;
+                font-weight: 600;
+                background-image: -webkit-linear-gradient(top,
+                    #01D9FE 0%,
+                    #01D9FE 60%,
+                    #fff 100%);
+                -webkit-background-clip: text;
+                -webkit-text-fill-color: transparent;
+              }
+
+              .today {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #20FFC5 50%,
+                    #20FFC5 100%);
+              }
+
+              .finish {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #FFB120 50%,
+                    #FFB120 100%);
+              }
+            }
+
+            .unit {
+              font-size: 13px;
+              color: #D2E0FF;
+              margin-top: 2px;
+            }
+          }
+        }
+      }
+
+      .footer {
+        font-weight: 500;
+        font-size: 16px;
+        display: flex;
+        align-items: center;
+
+        .num {
+          font-weight: bold;
+          font-size: 24px;
+          color: #01D9FE;
+          margin-left: 8px;
+        }
+      }
+    }
+
+    .center_box_two {
+      width: 100%;
+      flex: 1;
+
+      /* border: 1px solid; */
+      .echart_map {
+        width: 100%;
+        height: 100%;
+        border: 1px solid;
+        /* transform: scale(.2); */
+      }
+    }
+  }
+
+  .right_box {
+    width: 440px;
+
+    .right_box_one {
+      margin-top: 20px;
+      padding: 0px 10px 30px 20px;
+      border: 1px solid;
+
+      .content_wrap {
+        display: flex;
+        justify-content: space-between;
+
+        .num_wrap {
+          width: 280px;
+
+          .num_list {
+            display: flex;
+            margin-bottom: 20px;
+
+            .num {
+              width: 30px;
+              height: 46px;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              position: relative;
+              font-weight: 600;
+              font-size: 32px;
+              margin-right: 5px;
+            }
+          }
+
+          .content {
+            display: flex;
+            color: #D2E0FF;
+
+            .la {
+              color: #869CC9;
+            }
+
+            .unit_wrap {
+              display: flex;
+              align-items: center;
+            }
+
+            .icon {
+              width: 10px;
+              height: 12px;
+              margin-right: 6px;
+              margin-left: 4px;
+            }
+          }
+        }
+
+        .static_wrap {
+          flex: 1;
+
+          .echart_wrap {
+            width: 54px;
+            height: 54px;
+            position: relative;
+            margin-bottom: 12px;
+
+            .echart3 {
+              width: 54px;
+              height: 54px;
+            }
+
+            .pie_text {
+              width: 38px;
+              height: 38px;
+              border: 1px dashed rgba(210, 224, 255, 0.48);
+              border-radius: 50%;
+              position: absolute;
+
+              left: 50%;
+              top: 50%;
+              transform: translate(-50%, -50%);
+              z-index: 999;
+              display: flex;
+              flex-direction: column;
+              justify-content: center;
+              align-items: center;
+              font-size: 12px;
+
+              .fs30 {
+                font-weight: 600;
+                font-size: 14px;
+                color: #28F0C4;
+              }
+            }
+
+          }
+
+          .text {
+            font-size: 13px;
+            color: #869CC9;
+          }
+        }
+      }
+    }
+
+    .right_box_two {
+      border: 1px solid;
+      padding: 10px 15px;
+
+      .echart4_wrap {
+        width: 410px;
+        height: 216px;
+
+        .echart4 {
+          width: 410px;
+          height: 216px;
+        }
+      }
+    }
+
+    .right_box_three {
+      border: 1px solid;
+
+      .echart5_wrap {
+        height: 240px;
+        width: 410px;
+
+        .echart5 {
+          height: 240px;
+          width: 410px;
+        }
+      }
+    }
+  }
+}
+
+.main_header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 90px;
+  position: relative;
+  padding: 0px 40px 16px;
+  font-weight: 600;
+  font-size: 36px;
+
+  .title {
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 70%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+  }
+
+  .time_wrap {
+    font-size: 26px;
+    font-weight: 600;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 50%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    display: flex;
+    align-items: center;
+
+    .time {
+      width: 130px;
+      display: flex;
+      justify-content: flex-end;
+      font-size: 30px;
+    }
+
+    .week {
+      margin-left: 20px;
+    }
+  }
+
+  .main_header_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.com_header {
+  height: 40px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 15px 0 13px;
+  position: relative;
+
+  .title {
+    display: flex;
+    align-items: center;
+    font-weight: bold;
+    font-size: 18px;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 66%,
+        #85b4ff 72%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+
+    .icon {
+      width: 16px;
+      height: 16px;
+      margin-right: 14px;
+    }
+  }
+
+  .tabs {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    color: #d2e0ff;
+
+    .separate {
+      width: 1px;
+      height: 14px;
+      background-color: #d2e0ff;
+      margin: 0 6px;
+    }
+
+    .active {
+      color: #0094eb;
+    }
+  }
+}
+
+.second_title {
+  height: 24px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  position: relative;
+  font-size: 16px;
+  margin-bottom: 20px;
+
+  .title {
+    display: flex;
+    align-items: center;
+    font-weight: 500;
+    font-size: 16px;
+    color: #FFFFFF;
+
+    .icon {
+      width: 16px;
+      height: 16px;
+      margin-right: 10px;
+    }
+  }
+
+  .num_wrap {
+    font-weight: 400;
+    font-size: 14px;
+    color: #D2E0FF;
+    display: flex;
+    align-items: center;
+
+    .val {
+      font-weight: bold;
+      font-size: 16px;
+      color: #FFFFFF;
+    }
+  }
+
+  .search_wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-size: 14px;
+    color: #869CC9;
+    width: 96px;
+    height: 28px;
+    border-radius: 14px;
+    border: 1px solid #869CC9;
+
+    img {
+      width: 14px;
+      height: 14px;
+      margin-right: 3px;
+    }
+  }
+
+  .tabs {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    color: #d2e0ff;
+
+    .separate {
+      width: 1px;
+      height: 14px;
+      background-color: #d2e0ff;
+      margin: 0 6px;
+    }
+
+    .active {
+      color: #0094eb;
+    }
+  }
+}
+
+.main_app {
+  width: 1920px;
+  height: 960px;
+  /* width: 100%;
+  height: 100vh; */
+  background: #0b2539;
+  color: #FFFFFF;
+  position: relative;
+  z-index: -2;
+  font-size: 14px;
+
+  .main_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.bg {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  z-index: -1;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3