Newer
Older
ganzhou-feidu / src / pages / ywts / cszl / jt / index.vue
liyaguang 3 days ago 9 KB 清屏功能修复
<template>
  <div>
    <div class="video-menu">
      <layer-manager-mix title="重点防护" :layer="place" :layer-hover="placeHover" :menu-tab="menuTab" :menus="menus" :select="selectIndex==='placeBtn'" id="placeBtn" @btnClick="btnClick" @menuClick="layer"/>
      <layer-manager-mix title="感知设备" :layer="device" :layer-hover="deviceHover" :menu-tab="menuTab" :menus="menus" :select="selectIndex==='deviceBtn'" id="deviceBtn" @btnClick="btnClick" @menuClick="layer"/>
      <!-- <layer-manager-mix title="感知设备" :layer="device" :layer-hover="deviceHover" :menu-tab="menuTab" :menus="menus" :select="selectIndex==='deviceBtn'" id="deviceBtn" @btnClick="btnClick" @menuClick="layer"/> -->
      <common-btn id="askBtn" :select="selectIndex==='askBtn'" :bg="askBg" :bg-hover="askHover" width="5" height="5" text-hover="交通问诊" @click="btnClick" />
      <layer-manager-mix title="交通实况" :layer="real" :layer-hover="realHover" :menu-tab="menuTab" :menus="menus" :select="selectIndex==='realBtn'" id="realBtn" @btnClick="btnClick" @menuClick="layer"/>
      <common-btn id="parkBtn" :select="selectIndex==='parkBtn'" :bg="parkBg" :bg-hover="parkHover" width="5" height="5" text-hover="停车场" @click="btnClick" />
      <time-manager v-show="selectIndex==='caseBtn'" @handleTimeRange="handleTimeRange"/>
    </div>
    <list-page title="监测事件" :list="caseList" :query="caseListQuery" :total="caseTotal" @change="changePage" v-show="isListPage"  @close="isListPage=false"/>
  </div>
</template>

<script>
import CommonBtn from "@/components/CommonBtn";
import LayerManagerMix from "@/components/LayerManagerMix";
import TimeManager from "@/components/TimeManager";
import { heat } from '@/utils/freedo/heat'
import { clearUpMap, AddLabelPoint } from '@/utils/freedo'
import {
  getHeat,
  getArea,
  getDevList,
  getStatistics,
  getCasePointList, getCaseInfo
} from "../../../../api/ywts/cszl/gd";
import {AddDivPointHighlight, AddLabel} from "../../../../utils/freedo";
import ListPage from "@/components/ListPage";

export default {
  name: 'Jt',
  components: { TimeManager, LayerManagerMix, ListPage, CommonBtn },
  data() {
    return {
      isListPage: false,
      ktSelect: '',
      selectIndex: 'placeBtn',
      caseList: [],
      caseListQuery: {
        startTime: '',
        endTime: '',
        id: '',
        pageNo: 0,
        pageSize: 5
      },
      caseTotal: 0,
      caseIcon: {
          1: require('@/assets/images/icon/事件/已撤案.png'),
          2: require('@/assets/images/icon/事件/指派中.png'),
          3: require('@/assets/images/icon/事件/处置中.png'),
          4: require('@/assets/images/icon/事件/已办结.png'),
          5: require('@/assets/images/icon/事件/已结案.png'),
        },
      caseColor: {
          1: '#ffffff',
          2: '#fdeb56',
          3: '#85c8ff',
          4: '#ffba74',
          5: '#87f6b3',
        },
      time: {
        startTime: '',
        endTime: '',
      },
      preCase: null,
      place: require('@/assets/images/function/交通/重点场所未选中.png'),
      placeHover: require('@/assets/images/function/交通/重点场所选中.png'),
      device: require('@/assets/images/function/交通/交通设施未选中.png'),
      deviceHover: require('@/assets/images/function/交通/交通设施选中.png'),
      real: require('@/assets/images/function/交通/交通实况未选中.png'),
      realHover: require('@/assets/images/function/交通/交通实况选中.png'),
      askBg: require('@/assets/images/function/交通/交通问诊未选中.png'),
      askHover: require('@/assets/images/function/交通/交通问诊选中.png'),
      parkBg: require('@/assets/images/function/交通/智慧停车未选中.png'),
      parkHover: require('@/assets/images/function/交通/智慧停车选中.png'),
      caseBg: require('@/assets/images/function/交通/交通事故未选中.png'),
      caseHover: require('@/assets/images/function/交通/交通事故选中.png'),
      menuTab: [{
        name: '基础设施',
        value: 'place'
      }
      // , {
      //   name: '环监设备',
      //   value: 'others'
      // }
      ],
      menus: {
        place: [
        ],
        // others: [
        //   {type : "1", typename: "****设备", total: "111"},
        //   {type : "2", typename: "****设备", total: "111"}
        // ]
      }
    }
  },
  mounted() {
    getStatistics().then(response => {
      if(response.code === 200) {
        this.menus.place = response.data.value
      }
    })
    this.search()
    //  清除弹窗展示
    this.$bus.$on('clear', () => {
      this.isListPage = false
    })
  },
  methods: {
    async btnClick(e) {
      clearUpMap()
      this.isListPage = false
      this.selectIndex = e.target.id
      switch (this.selectIndex) {
        case "caseBtn":
          this.casePoint()
          break
        case "placeBtn":
          this.search()
          break
      }
    },
    // 设备图层控制
    layer(item) {
      // clearUpMap()
      const iconOnline = require('@/assets/images/icon/工地地图点位/'+item.typename.replace(/ /g,'')+'在线.png')
      const iconOffline = require('@/assets/images/icon/工地地图点位/'+item.typename.replace(/ /g,'')+'离线.png')
      getDevList({type: item.type}).then(response => {
        if(response.code === 200) {
          clearUpMap()
          response.data.value.forEach(item => {
            AddLabelPoint(
              item.id,
              '',
              item.status === '1'? iconOnline: iconOffline,
              [item.lon, item.lat, 0], 'gd-place', item,
              null)
          })
        }
      })
    },
    // 事件点位
    casePoint() {
      console.log(this.time)
      getCasePointList(this.time).then(response => {
        if(response.code === 200) {
          clearUpMap()
          const data = []
          response.data.value.forEach(item => {
            if(!data.map(da => da.id).includes(item.id) && !data.map(da => da.lon).includes(item.lon) && item.id !== null) {
              data.push(item)
            }
          })
          data.forEach(item => {
            AddLabelPoint(
              item.id,
              '',
              this.caseIcon[item.status],
              [item.lon, item.lat, 0], 'gd-case', item,
              this.clickCase)
          })
        }
      })
    },
    // 查询工地点位
    search() {
      const iconDone = require('@/assets/images/icon/工地地图点位/工地已完成.png')
      const iconDoing = require('@/assets/images/icon/工地地图点位/工地进行中.png')
      getArea({}).then(response => {
        if(response.code === 200) {
          clearUpMap()
          response.data.value.forEach(item => {
            // console.log(item.areaboundary)
            // todo : 画范围
            AddLabelPoint(
              item.id,
              item.name,
              item.status === '2' ? iconDoing: iconDone,
              [item.lon, item.lat, 0], 'gd', item,
              this.clickHw)
          })
        }
      })
    },
    // 智慧工地-工地近1月综合得分
    score() {
      getArea({}).then(response => {
        if(response.code === 200) {
          response.data.value.forEach(item => {
            console.log(item.areaboundary)
            // todo : 画范围
          })
        }
      })
    },
    // 点击事件icon
    clickCase(eventArg) {
      const item = eventArg._data.data
      // 恢复上一个marker
      if(this.preCase !== null ) {
        window.mmManager.removeById(this.preCase.id)
        AddLabelPoint(
          this.preCase.id,
          '',
          this.caseIcon[this.preCase.status],
          [this.preCase.lon, this.preCase.lat, 0], 'gd-case', this.preCase,
          this.clickCase)
      }
      // 保存当前marker
      this.preCase = item
      // 高亮当前marker
      window.mmManager.removeById(item.id)
      AddDivPointHighlight(item, this.caseColor[item.status])

      // 查询事件详情
      this.isListPage = true
      this.caseListQuery = {
        startTime: this.time.startTime,
        endTime: this.time.endTime,
        id: item.id,
        pageNo: 0,
        pageSize: 5
      }
      this.searchCaseMarkerList()
    },
    // 事件换页
    changePage(val) {
      if (val && val.page) {
        this.caseListQuery.pageNo = val.page
      }
      this.searchCaseMarkerList()
    },
    searchCaseMarkerList() {
      // getCaseInfo(this.caseListQuery).then(response => {
      getCaseInfo(this.caseListQuery).then(response => {
        if(response.code === 200) {
          console.log(response.data.value)
          // 右侧看板
          this.caseList  = response.data.value
          // todo
          // this.caseTotal  = response.data.value.length
          this.caseTotal  = 12
        }
      })
    },
    changeState(v) {
      this.ktSelect = v
    },
    handleTimeRange(time) {
      this.isListPage = false
      if(this.time.startTime !== '') {
        this.time = time
        this.casePoint()
      } else {
        this.time = time
      }
    }
  }
}
</script>

<style scoped>
.video-menu {
  display: flex;
  z-index: 111111111;
  width: 40rem;
  height: 5rem;
  position: absolute;
  left: 20px;
  top: 1rem;
}
</style>