<template>
  <div class="container">
    <div class="centerImg" v-if="!isMap"
         :style="`background-image: url(${picUrl ? picUrl : containerPic})`"></div>
    <div class="title">监控单元统计</div>
    <Chart ref="chart1" class="chart1"></Chart>
    <div class="chart1Right">
      <p v-for="(i,k) in chart1Data.slice(0,4)" :key="k" :style="'margin:0.6vw;color:'+ chart1Color[k]">{{ i.name }}</p>
    </div>
    <div class="chart1Table">
      <div style="background-color: #094170">
        <div class="scrollTable" style="font-weight: bold;">
          名称
        </div>
        <div class="scrollTable" style="font-weight: bold;">
          监控数量
        </div>
        <div class="scrollTable" style="font-weight: bold;">
          报警数量
        </div>
      </div>
      <vue-seamless-scroll
        :class-option="chart1TableOption"
        :data="chart1Data"
        class="case-item"
        style="height: 84%;overflow: hidden;"
      >
        <div
          v-for="(item, index) in chart1Data"
          :key="index"

        >
          <div :style='"background-color:" + ((index % 2 === 0)? "#053460":"#032d57") '>
            <div
              class="scrollTable">
              {{ item.name }}
            </div>
            <div
              class="scrollTable">
              {{ item.value }}
            </div>
            <div
              class="scrollTable">
              {{ item.value2 }}
            </div>
          </div>
        </div>
      </vue-seamless-scroll>
    </div>
    <Chart ref="chart2" class="chart2"></Chart>
    <div class="chart2Table">
      <div style="background-color: #094170">
        <div class="scrollTable" style="font-weight: bold;width: 50%">
          名称
        </div>
        <div class="scrollTable" style="font-weight: bold;width: 50%">
          数量
        </div>
      </div>
      <vue-seamless-scroll
        :class-option="chart1TableOption"
        :data="chart2Data"
        class="case-item"
        style="height: 84%;overflow: hidden;"
      >
        <div
          v-for="(item, index) in chart2Data"
          :key="index"

        >
          <div :style='"background-color:" + ((index % 2 === 0)? "#053460":"#032d57") '>
            <div class="scrollTable" style="width: 50%">
              {{ item.name }}
            </div>
            <div class="scrollTable" style="width: 50%">
              {{ item.value }}
            </div>
          </div>
        </div>
      </vue-seamless-scroll>
    </div>
    <div>
      <div class="centerInfo">传感器数量</div>
      <div class="centerInfo" style="font-weight:bold;top:19.3%;left: 42.5%;font-size: 2vw;">{{
          centerNum.sum
        }}
      </div>
      <div class="centerInfo" style="left: 56%">监控单元数量</div>
      <div class="centerInfo" style="font-weight:bold;top:19.3%;left: 66%;font-size: 2vw;">{{ centerNum.subSum }}</div>
    </div>
    <div class="inTransit">在运： <span style="color: #00f6ff">{{ inTransitNum }}</span></div>
    <Chart ref="chart3" class="chart3"></Chart>
    <div class="table1">
      <div style="background-color: #094170">
        <div class="scrollTable" style="font-weight: bold;width: 25%">
          告警编号
        </div>
        <div class="scrollTable" style="font-weight: bold;width: 25%">
          告警类型
        </div>
        <div class="scrollTable" style="font-weight: bold;width: 25%">
          告警位置
        </div>
        <div class="scrollTable" style="font-weight: bold;width: 25%">
          操作
        </div>
      </div>
      <vue-seamless-scroll
        :class-option="{...chart1TableOption,limitMoveNum:10}"
        :data="table1Data"
        class="case-item"
        style="height: calc(100% - 33px);overflow: hidden;"
      >
        <div
          v-for="(item, index) in table1Data"
          :key="index"
        >
          <div :style='"background-color:" + ((index % 2 === 0)? "#053460":"#032d57") '>
            <div class="scrollTable" style="width: 25%">
              {{ item.no }}
            </div>
            <div class="scrollTable" style="width: 25%">
              {{ item.type }}
            </div>
            <div class="scrollTable" style="width: 25%">
              {{ item.location }}
            </div>
            <div class="scrollTable" style="width: 25%">
              <el-button v-if="item.status === '0'" size="mini" type="primary" @click="dispose(item)">处理</el-button>
              <span v-else>已处理</span>
            </div>
          </div>
        </div>
      </vue-seamless-scroll>
    </div>

    <div class="exTable">
      <el-date-picker
        style="width: calc(100% - 140px)"
        v-model="exTableTime"
        type="datetimerange"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期">
      </el-date-picker>
      <el-button type="primary" @click="exTable" style="margin-left: 8px">导出告警信息</el-button>
    </div>
    <div v-if="isMap">
      <Chart ref="mapChart" class="mapChart"></Chart>
      <el-button type="primary" style="position:absolute;bottom: 4%;left: 49%;transform: translateX(-100%)"
                 @click="goBack">返回
      </el-button>
      <el-button type="primary" style="position:absolute;bottom: 4%;left: 51%;transform: translateX(0%)"
                 @click="toRealMap">打开地图
      </el-button>
    </div>

    <el-dialog :visible.sync="realMap" width="80%" @close="monitorUnitId = null">
      <el-form :inline="true" :model="formInline" class="demo-form-inline">
        <el-form-item label="名称">
          <el-input v-model="formInline.name" placeholder="名称"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="searchMap">查询</el-button>
        </el-form-item>
      </el-form>

      <el-switch
        v-model="isRail"
        @change="RailChange"
        active-text="显示点位"
        inactive-text="隐藏点位">
      </el-switch>
      <div id="map" class="map"></div>
    </el-dialog>

    <el-dialog
      :visible.sync="isDispose"
      width="30%">

      <el-descriptions class="margin-top" :column="3" :size="size" border>
        <el-descriptions-item>
          <template slot="label">
            报警信息
          </template>
          {{ warInfo.alarmLevelName }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template slot="label">
            报警位置
          </template>
          {{ warInfo.location }}
        </el-descriptions-item>
      </el-descriptions>

      <span>备注</span>
      <el-input
        style="margin-top: 12px;margin-bottom:12px"
        type="textarea"
        :rows="2"
        placeholder="请输入内容"
        v-model="textarea">
      </el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="isDispose = false">取 消</el-button>
        <el-button type="primary" @click="disposeThis">处理当前</el-button>
        <el-button type="primary" @click="disposeAll">处理所有</el-button>
      </span>
    </el-dialog>

    <el-dialog title="设备信息" :visible.sync="equipmentInfoDialog">
      <el-descriptions class="margin-top" :column="3" :size="size" border>
        <el-descriptions-item>
          <template slot="label">
            经度
          </template>
          {{ equipmentInfo.longitude }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template slot="label">
            纬度
          </template>
          {{ equipmentInfo.latitude }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template slot="label">
            名称
          </template>
          {{ equipmentInfo.deviceName }}
        </el-descriptions-item>
      </el-descriptions>
      <div slot="footer" class="dialog-footer">
        <el-button @click="equipmentInfoDialog = false">关 闭</el-button>
        <el-button type="primary" @click="getDeviceInfo" :disabled="!monitorUnitId">设备信息</el-button>
        <!--        <el-button type="primary" @click="equipmentInfoDialog = true">打开内层 Dialog</el-button>-->
      </div>
    </el-dialog>
  </div>
</template>

<script>
import containerPic from "@/assets/board/index/container.png";
import Chart from "@/components/Charts/Chart";
import vueSeamlessScroll from "vue-seamless-scroll";
import * as echarts from 'echarts';
import {
  monitorUnitPercentage,
  monitorPercentage,
  allNums,
  getAlarmInfos,
  getDeviceOperations,
  handleAlarmInfo,
  getDeviceByAreaId,
  getTenantData,
  selectMonitorElectronic,
  selectDeviceByName,
  exTableData
} from '@/api/board/index'
import ChinaMapData from '@/utils/ChinaMapData.json'
import gsByMap from '@/utils/map/gs_by.json'
import axios from "axios";

let map = null
let markers = []
let markerIds = []
let polygons = []
let circles = []
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
export default {
  components: {
    vueSeamlessScroll,
    Chart,
  },
  data() {
    return {
      containerPic,
      isRail: true,
      monitorUnitId: null,
      equipmentInfoDialog: false,
      exTableTime: [new Date(new Date().getTime() - 1000 * 60 * 60 * 24), new Date()],
      equipmentInfo: {},
      warInfo: {},
      formInline: {},
      textarea: '',
      disposeNo: null,
      isDispose: false,
      realMap: false,
      centerGeo: [],
      picUrl: null,
      code: 620000,
      cityJson: null,
      isMap: true,
      centerNum: {},
      chart1Option: {
        tooltip: {
          valueFormatter: (e) => {
            return e + '%'
          },
        },
        angleAxis: {
          max: 100,
          clockwise: true,
          show: false,
        },
        radiusAxis: {
          type: "category",
          show: true,
          axisLabel: {
            show: false,
          },
          axisLine: {
            show: false,
          },
          axisTick: {
            show: false,
          },
        },
        polar: {
          center: ["30%", "50%"],
          radius: "100%", //图形大小
        },
      },
      chart1Color: ['#2ff', '#f22', '#f2f', '#1f1'],
      chart1Data: [],
      chart1TableOption: {
        step: 0.5, // 数值越大速度滚动越快
        limitMoveNum: 3, // 开始无缝滚动的数据量 this.dataList.length
        hoverStop: true, // 是否开启鼠标悬停stop
        direction: 1, // 0向下 1向上 2向左 3向右
        openWatch: true, // 开启数据实时监控刷新dom
        singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
        singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
        waitTime: 0,
      },
      chart2Data: [],
      chart2Option: {
        color: ["#22acfd", "#22fe97", "#f9e728", "#ff922b", "#ed1814"],
        legend: {
          type: 'scroll',
          orient: "vertical",
          x: "right",
          y: "center",
          width: '100px',
          textStyle: {
            color: '#fff'
          }
        },
        tooltip: {
          trigger: "item",
          formatter: "{b} :  ({d}%)",
        },
        series: [
          {
            type: "pie",
            radius: ["45%", "76%"],
            center: ["35%", "50%"],
            encode: {
              itemName: "group",
              value: "占比",
            },
            labelLine: {
              show: false,
            },
            label: {
              show: false,
            },
            itemStyle: {
              opacity: '0.8'
            }
          },
          {
            type: "pie",
            radius: ["75%", "90%"],
            center: ["35%", "50%"],
            encode: {
              itemName: "group",
              value: "占比",
            },
            labelLine: {
              show: false,
            },
            label: {
              show: false,
            },
          },
        ],
      },
      inTransitNum: 0,
      chart3Option: {
        tooltip: {
          trigger: "axis",
        },
        grid: {
          top: "middle",
          left: "3%",
          right: "4%",
          bottom: "3%",
          height: "80%",
          containLabel: true,
        },
        yAxis: {
          type: "value",
          splitLine: {
            lineStyle: {
              type: "dashed",
              color: "#ccc3",
            },
          },
          axisLine: {
            show: false,
            lineStyle: {
              color: "#ccc",
            },
          },
          nameTextStyle: {
            color: "#999",
          },
          splitArea: {
            show: false,
          },
        },
      },
      table1Data: []
    }
  },
  async mounted() {
    getTenantData(this.$store.getters.tenantId).then(e => {
      // this.isMap = e.data.tenantField === '2';
      this.picUrl = e.data.tenantBoardPic
      this.code = e.data.tenantMapCode || 620000
    })
    this.setChart1()
    this.setChart2()
    this.setAllNums()
    this.setTable3()
    this.setDeviceOperations()

    let data = await axios.get(`https://geo.datav.aliyun.com/areas_v3/bound/${this.code}_full.json`)
    let mapData = this.code === 100000 ? ChinaMapData : data.data
    await this.getMap(mapData)
    this.chartClick()
  },
  methods: {
    async setChart1() {
      const {rows: data} = await monitorPercentage()
      let data1 = data.slice(0, 4)
      data1.reverse()
      let option1 = {
        ...this.chart1Option,
        series: [
          {
            type: "bar",
            data: data1.map((e, i) => {
              return {
                value: parseFloat(e.percentage),
                name: e.sceneName,
                itemStyle: {
                  color: this.chart1Color[i]
                }
              }
            }),
            showBackground: true,
            coordinateSystem: "polar",
            roundCap: true,
            barWidth: 8,
          },
        ]
      }
      this.$refs.chart1.setData(option1)
      this.chart1Data = data.map(e => {
        return {
          value: e.sum || 0,
          value2: e.err || 0,
          name: e.sceneName || '',

        }
      })
    },
    async setChart2() {
      const {rows: data} = await monitorUnitPercentage()
      let chart2Num = eval(data.map(e => e.sum).join("+"));
      let option2 = {
        ...this.chart2Option,
        dataset: {
          source: [
            ["group", "占比"],
            ...data.slice(0, 7).map(e => [e.deviceModeName, parseFloat(e.percentage)])
          ],
        }
      }
      this.$refs.chart2.setData(option2)
      this.chart2Data = data.map(e => {
        return {
          value: e.sum,
          name: e.deviceModeName,

        }
      })
    },
    async setAllNums() {
      const data = await allNums()
      this.centerNum = data
    },
    async setTable3() {
      const {rows: data} = await getAlarmInfos()
      this.table1Data = data.map((e, i) => {
        return {
          ...e,
          no: e.alarmInfoId,
          type: e.alarmTypeName,
          location: e.monitorUnitName,
          status: e.handleStatus
        }
      })
    },
    async setDeviceOperations() {
      let {data: data} = await getDeviceOperations()
      let onlineDevicesTrend = data["onlineDevicesTrend"];
      let sortArr = Object.keys(onlineDevicesTrend)
      sortArr = sortArr.sort((a, b) => {
        return new Date(a).getTime() - new Date(b).getTime()
      })
      console.log(sortArr)
      let x = sortArr
      let y = sortArr.map(e => {
        return onlineDevicesTrend[e]
      })
      // this.inTransitNum = y.reduce((a, b) => {
      //   return a + b
      // }, 0)
      this.inTransitNum = data["onlineDevicesCount"];

      let option3 = {
        ...this.chart3Option,
        xAxis: {
          boundaryGap: false,
          type: "category",
          data: x,

          splitLine: {
            show: true,
            lineStyle: {
              type: "dashed",
              color: "#ccc3",
            },
          },
          axisLine: {
            lineStyle: {
              color: "#999",
            },
          },
        },
        series: [
          {
            name: "",
            type: "line",
            data: y,
            color: "#00dae0",
            areaStyle: {
              normal: {
                color: new echarts.graphic.LinearGradient(
                  0,
                  0,
                  0,
                  1,
                  [
                    {
                      offset: 0,
                      color: "#00dae033",
                    },
                    {
                      offset: 1,
                      color: "rgba(0,202,149,0)",
                    },
                  ],
                  false
                ),
                shadowColor: "rgba(0,202,149, 0.9)",
                shadowBlur: 20,
              },
            },
          },
        ],
      }
      this.$refs.chart3.setData(option3)
    },
    dispose(e) {
      this.warInfo = e
      console.log(e)
      this.textarea = ''
      this.isDispose = true
      this.disposeNo = e.no
    },
    disposeThis() {
      handleAlarmInfo({
        alarmInfoId: this.disposeNo,
        alarmInfoField: this.textarea,
        ifDisposalAll: 0,
      }).then(e => {
        if (e.code === 200) {
          this.$message({
            type: 'success',
            message: '已处理!'
          });
          this.setTable3()
        } else {
          this.$message({
            type: 'info',
            message: '网络错误'
          });
        }
        this.isDispose = false
      })
    },
    disposeAll() {
      handleAlarmInfo({
        alarmInfoId: this.disposeNo,
        alarmInfoField: this.textarea,
        ifDisposalAll: 1,
      }).then(e => {
        if (e.code === 200) {
          this.$message({
            type: 'success',
            message: '已处理!'
          });
          this.setTable3()
        } else {
          this.$message({
            type: 'info',
            message: '网络错误'
          });
        }
        this.isDispose = false
      })
    },

    async getMap(geoJson) {
      this.cityJson = geoJson.features
      echarts.registerMap('map', geoJson);
      this.centerGeo = geoJson.features[0].properties.center || geoJson.features[0].properties.geo_wkt.split('(')[1].split(')')[0].split(' ').map(e => parseFloat(e))
      const random = (val = 1) => {
        return Math.ceil(Math.random() * val)
      }
      let Point = [
        {value: [120.3, 36.0], index: random(5), type: random(5), state: random(5)},
        {value: [104.065735, 30.659462], index: random(5), type: random(5), state: random(5)},
        {value: [123.1238, 42.1216], index: random(5), type: random(5), state: random(5)},
        {value: [114.4995, 38.1006], index: random(5), type: random(5), state: random(5)},
        {value: [109.1162, 34.2004], index: random(5), type: random(5), state: random(5)},
        {value: [106.3586, 38.1775], index: random(5), type: random(5), state: random(5)},
        {value: [101.4038, 36.8207], index: random(5), type: random(5), state: random(5)},
        {value: [113.0823, 28.2568], index: random(5), type: random(5), state: random(5)},
        {value: [102.9199, 25.46639], index: random(5), type: random(5), state: random(5)},
      ]
      Point = []
      let option = {
        grid: {
          top: '0%',
          left: '0%',
          right: '0%',
          bottom: '0%',
        },
        geo: {
          map: "map",
          show: false,
          aspectScale: 0.75, //长宽比
          zoom: 1.1,
          label: {
            show: true
          },
          roam: true,
          layoutCenter: ["50%", "50%"], // position位置
          layoutSize: 25 * vw,
          itemStyle: {
            normal: {
              areaColor: {
                type: "radial",
                x: 0.5,
                y: 0.5,
                r: 0.8,
                colorStops: [
                  {
                    offset: 0,
                    color: "#013B8F", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "#013B8F", // 100% 处的颜色
                  },
                ],
                globalCoord: true, // 缺省为 false
              },
              shadowColor: "#013B8F",
              shadowOffsetX: 0,
              shadowOffsetY: 8,
            },
            emphasis: {
              areaColor: "#2AB8FF",
              borderWidth: 0,
              color: "green",
              label: {
                show: false,
              },
            },
          },
        },
        series: [
          {
            type: "map",
            roam: 'scale',
            label: {
              normal: {
                show: true,
                textStyle: {
                  color: "#1DE9B6",
                },
              },
            },

            itemStyle: {
              normal: {
                borderColor: "rgb(147, 235, 248,0.5)",
                borderWidth: 1,
                areaColor: {
                  type: "radial",
                  x: 0.5,
                  y: 0.5,
                  r: 0.8,
                  colorStops: [
                    {
                      offset: 0,
                      color: "#013B8F", // 0% 处的颜色
                    },
                    {
                      offset: 1,
                      color: "#013B8F", // 100% 处的颜色
                    },
                  ],
                  globalCoord: true, // 缺省为 false
                },
              },
            },
            zoom: 1.1,
            map: 'map', //使用
            aspectScale: 0.75, //长宽比
          },

          {
            type: "effectScatter",
            coordinateSystem: "geo",
            showEffectOn: 'emphasis',
            zlevel: 1,
            rippleEffect: {
              period: 15,
              scale: 1,
              brushType: "fill",
            },
            hoverAnimation: true,
            itemStyle: {
              normal: {
                color: "#1DE9B6",
                shadowBlur: 10,
                shadowColor: "#333",
              },
            },
            symbolSize: [0.5 * vw, 0.5 * vw],
            data: Point,
            label: {
              padding: [-16, 0, 0, 5],
              show: true,
              position: 'bottom',
              formatter: function (val) {
                return [`{a|}{b|'点位${val.data.index}}`]
              },
              rich: {
                a: {
                  width: 0.34 * vw,
                  height: 0.34 * vw,
                  borderColor: '#0FF32E',
                  borderWidth: 0.34 * vw,
                  borderRadius: 0.17 * vw,
                  shadowBlur: 20,
                  shadowColor: "#0FF32E",
                },
                b: {
                  padding: [0, 0, 0, 5],
                  color: '#0FF32E',
                  height: 40,
                  fontSize: 0.75 * vw,
                },
              }
            }
          },
        ],
      };
      this.$refs.mapChart.setData(option);
    },
    chartClick() {
      this.$refs.mapChart.chart.on('click', async (params) => {
        this.code = this.cityJson[params.dataIndex].properties.adcode || this.code || gsByMap.features[params.dataIndex].properties.unique_id
        let mapData
        if (this.code !== 620400 && this.code.toString().startsWith('6204')) {
          mapData = {features: gsByMap.features.filter(e => e.properties.pid === this.code.toString())}
        } else {
          let data = await axios.get(`https://geo.datav.aliyun.com/areas_v3/bound/${this.code}_full.json`)
          mapData = this.cityJson[params.dataIndex].properties.adcode === 100000 ? ChinaMapData : data.data
        }
        this.getMap(mapData)
      })
      this.$refs.mapChart.$el.addEventListener('dblclick', () => {
        this.chartDblClick(this.code)
      });
    },
    goBack(){
      this.chartDblClick(this.code)
    },
    async chartDblClick(val) {
      let a = val.toString().substr(0, 2)
      let b = val.toString().substr(2, 2)
      let c = val.toString().substr(4, 2)
      let d = val.toString().substr(6, 9)
      d = null
      if (d && d !== '000') {
        this.code = Number(a + b + c)
      } else if (c !== '00') {
        this.code = Number(a + b + '00')
      } else if (b !== '00') {
        this.code = Number(a + '0000')
      } else if (a !== '10') {
        this.code = 100000
      }
      let mapData
      if (this.code !== 620400 && this.code.toString().startsWith('6204')) {
        mapData = gsByMap
      } else {
        let data = await axios.get(`https://geo.datav.aliyun.com/areas_v3/bound/${this.code}_full.json`)
        mapData = this.code === 100000 ? ChinaMapData : data.data
      }
      this.getMap(mapData)
    },
    async toRealMap() {
      this.realMap = true
      markerIds = []
      this.$nextTick(async () => {
        this.createMap()
        const data = await getDeviceByAreaId(this.$store.getters.tenantId)
        data.data.map(e => e.devicesList).flat(1).forEach(e => {
          this.setMarker(e)
        })
      })
    },
    setMarker(e) {
      if (!this.isRail) {
        return
      }
      let marker = new AMap.Marker({
        position: [e.longitude, e.latitude],
        title: `信息\n经度：${e.longitude}\n纬度：${e.latitude}\n名称：${e.deviceName}\n`,
        offset: new AMap.Pixel(-15, -30),
        content: `<div> <svg t="1718261114618" class="icon" viewBox="0 0 1024 1024"  xmlns="http://www.w3.org/2000/svg" p-id="4305" style="width: 30px;height: 30px;">
 <path d="M512 64.5c-180.5 0-326.9 146.4-326.9 326.9 0 63.3 18 122.3 49.2 172.4 1.1 2 2.1 4 3.2 5.9 34.9 58.2 113.9 128.8 165.5 194.5 66.3 84.4 93.2 158 93.2 158 1.6 1.4 13.1 35.6 15.1 35.8 2.5 0.2 12.6-34 14.5-35.8 0 0 22-69.2 83.7-146.6 56-70.1 142.8-145.7 177-206 0.9-1.6 1.8-3.3 2.6-5 31.5-50.2 49.7-109.6 49.7-173.3 0.1-180.5-146.3-326.8-326.8-326.8z" fill="${(e.ifAlarm === '1') ? '#3D93FD' : '#ff0000'}" p-id="4306">
</path></svg></div>`
      });
      marker.on('click', async () => {
        if (markerIds.includes(e.deviceId)) {
          return
        } else {
          markerIds.push(e.deviceId)
        }
        const {data} = await selectMonitorElectronic(e.deviceId)
        data.map(e => e.hwFenceAreaList).flat(1).forEach(e => {
          if (e.areaShapeFlag === '1') {
            this.setPolygon(e.areaRange.split('_').map(e => e.split(',').map(v => parseFloat(v))))
          }
          if (e.areaShapeFlag === '2') {
            let arr = e.areaRange.split(',')
            this.setCircle([arr[0], arr[1]], arr[2])
          }
        })
      })
      marker.on('dblclick', () => {
        this.equipmentInfoDialog = true
        this.equipmentInfo = e
        this.monitorUnitId = e.monitorUnitId
        // this.$router.push({path: '/board/equipment', query: {monitorUnitId: e.monitorUnitId}})
      });
      map.add(marker);
      markers.push(marker)
    },
    getDeviceInfo() {
      this.$router.push({path: '/board/equipment', query: {monitorUnitId: this.monitorUnitId}})
    },
    setPolygon(e, val) {
      // let e = position.map(val => {
      //   return [val.longitude, val.latitude]
      // })
      let thisPolygon = new AMap.Polygon({
        path: e,
        fillColor: '#1791fc',
        // fillColor: val > 0 ? '#ff0000' : '#1791fc',
      });
      console.log(thisPolygon)
      map.add(thisPolygon)
      map.setFitView(thisPolygon)
      polygons.push(thisPolygon)
    },
    setCircle(center, radius, e) {
      let circle = new AMap.Circle({
        center,
        radius,
        borderWeight: 3,
        strokeColor: "#FF33FF",
        // strokeColor: e ? '#ff0000' : "#FF33FF",
        strokeWeight: 6,
        strokeOpacity: 0.2,
        fillOpacity: 0.4,
        strokeDasharray: [10, 10],
        fillColor: '#1791fc',
        // fillColor: e > 0 ? '#ff0000' : '#1791fc',
      })
      map.add(circle);
      map.setFitView(circle)
      circles.push(circle)
    },
    createMap() {
      map = new AMap.Map('map', {
        zoom: 11,
        center: this.centerGeo,
      });
    },
    async searchMap() {
      const {data} = await selectDeviceByName(this.formInline)
      map.remove(markers)
      map.remove(polygons)
      map.remove(circles)
      markers = []
      data.forEach(e => {
        if (e.latitude && e.longitude) {
          this.setMarker(e)
        }
      })
      map.setFitView(markers)
    },
    exTable() {
      let query = {}
      query.startTime = this.parseTime(this.exTableTime?.[0]?.getTime())
      query.endTime = this.parseTime(this.exTableTime?.[1]?.getTime())
      exTableData(query, '告警信息')
    },
    async RailChange() {
      if (this.isRail) {
        const data = await getDeviceByAreaId(this.$store.getters.tenantId)
        data.data.map(e => e.devicesList).flat(1).forEach(e => {
          this.setMarker(e)
        })
      } else {
        map.remove(markers)
      }
    }
  }
}
;
</script>
<style scoped>
.title {
  position: absolute;
  top: 12%;
  left: 13.6%;
  font-size: 1vw;
  color: #00f8ff;
  transform: translateX(-50%);
}

.container {
  background-image: url("~@/assets/board/index/bg.jpg");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  width: 100%;
  height: calc(100vh);
  position: relative;
}

.centerImg {
  background-repeat: no-repeat;
  background-size: 100% 100%;
  position: absolute;
  width: 45vw;
  height: 20vw;
  top: 60%;
  left: 50%;
  transform: translate(-50%, -50%);
}


.scrollTable {
  color: rgb(185, 186, 192);
  margin: auto 0px;
  padding: 4px 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-align: center;
  display: inline-block;
  width: 33%;

}

.chart1 {
  position: absolute;
  width: 20%;
  height: 21%;
  top: 16%;
  left: 3%;
}

.chart1Right {
  background-image: url("~@/assets/board/common/bg1.png");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  padding: 0 12px;
  position: absolute;
  top: 17%;
  left: 15%;
}

.chart1Table {
  position: absolute;
  top: 38%;
  left: 2.8%;
  width: 21%;
  height: 14%;
  overflow: hidden;
}

.chart2 {
  position: absolute;
  width: 20%;
  height: 21%;
  top: 58.5%;
  left: 3%;
}

.chart2Table {
  position: absolute;
  top: 81%;
  left: 2.8%;
  width: 21%;
  height: 15%;
  overflow: hidden;
}

.centerInfo {
  position: absolute;
  width: 7%;
  top: 17.5%;
  left: 32.7%;
  font-size: 1.4vw;
  text-align: center;
  transform: translateX(-50%);
  color: #01c7fd;
  letter-spacing: 4px;
}

.inTransit {
  position: absolute;
  top: 16%;
  left: 87%;
  transform: translateX(-50%);
  font-size: 1.2vw;
  color: rgb(30, 158, 223);
}

.chart3 {
  position: absolute;
  width: 21%;
  height: 22%;
  top: 21.5%;
  left: 76.1%;
}

.table1 {
  position: absolute;
  width: 21%;
  height: 45%;
  top: 50.5%;
  left: 76.3%;
}

.mapChart {
  position: absolute;
  width: 50%;
  height: 60%;
  top: 30%;
  left: 25%;
}

.map {
  width: 100%;
  height: 80vh;
}

.exTable {
  position: absolute;
  top: 46%;
  left: 76.3%;
  width: 21%;
  /*transform: translateX(-50%);*/
}
</style>
