Newer
Older
ganzhou-feidu / src / pages / csdz / iot / index.vue
liyaguang 28 days ago 10 KB 清屏功能修复
<template>
  <div>
    <div class="video-menu">
      <layer-manager-mix :menu-tab="menuTab" :menus="menus" :select="selectIndex === 'layerBtn'" @btnClick="btnClick" />
      <common-btn id="alarmBtn" :select="selectIndex === 'alarmBtn'" :bg="alarm" :bg-hover="alarmHover" width="5"
        height="5" text-hover="告警视频" @click="btnClick" />
      <common-btn id="caseBtn" :select="selectIndex === 'caseBtn'" :bg="caseBg" :bg-hover="caseHover" width="5"
        height="5" text-hover="监测事件" @click="btnClick" />
      <keyword-manager :select="ktSelect === 'keywordBtn'" @changeState="changeState" @handleKeyword="handleKeyword"
        :resultList="resultList" @localPoint="localPoint" />
      <time-manager :select="ktSelect === 'timeBtn'" v-if="selectIndex === 'caseBtn'" @changeState="changeState"
        @handleTimeRange="handleTimeRange" />
    </div>
    <!-- 监测事件 -->
    <list-page ref="caseListPage" title="监测事件" :list="eventList" :query="eventParams" :total="eventTotal"
      @change="changePage" v-show="selectIndex === 'caseBtn' && isShowEvent" @close="closeEvent"
      @menuClick="menuEventClick" info-url="wlw-gktj/wlw/sjlcxxzs" />
    <!-- 事件弹窗 -->
    <eventPop ref="eventpop" v-if="isShowEventPop" @close="isShowEventPop = false" />
    <!-- 点位弹窗 -->
    <Pop ref="pop" v-if="isShowPop" @close="isShowPop = false" />
  </div>
</template>

<script>
import CommonBtn from "@/components/CommonBtn";
import LayerManagerMix from "@/components/LayerManagerMix";
import KeywordManager from "@/components/KeywordManager";
import TimeManager from "@/components/TimeManager";
import ListPage from "@/components/ListPage";
import { getStatistics, getPointList, getCaseListPage } from "../../../api/csdz/iot";
import { clearUpMap, clearResetMap, AddLabelPoint } from '@/utils/freedo'
import { showPositin } from '@/utils/freedo/index'
import { getDate } from '@/utils/calendarUtil'
import eventPop from '@/pages/csdz/videoCloud/eventPop'
import Pop from './Pop.vue'
import { pointList, iconDict } from './data'
export default {
  name: 'Iot',
  components: { TimeManager, KeywordManager, LayerManagerMix, CommonBtn, ListPage, eventPop, Pop },
  data() {
    return {
      eventParams: {
        pageNo: 1,
        pageSize: 5,
        keywords: '',
        startTime: getDate(-7, 'DATE'),
        endTime: getDate(0, 'DATE'),
      }, // 事件列表查询条件
      eventList: [], // 监测事件
      isShowEvent: false, // 展示监测事件
      isShowEventPop: false, // 展示监测事件弹窗
      isShowPop: false, // 展示点位弹窗
      eventTotal: 0,
      resultList: [], // 搜索结果列表
      markerList: [],
      ktSelect: '',
      selectIndex: 'layerBtn',
      caseBg: require('@/assets/images/function/物联网/物联事件未选中.png'),
      caseHover: require('@/assets/images/function/物联网/物联事件选中.png'),
      alarm: require('@/assets/images/function/物联网/物联告警未选中.png'),
      alarmHover: require('@/assets/images/function/物联网/物联告警选中.png'),
      menuTab: [{
        name: '交通',
        value: 'traffic'
      }, {
        name: '管网',
        value: 'well'
      }, {
        name: '智慧停车',
        value: 'parking'
      }, {
        name: '智慧城管',
        value: 'city'
      }, {
        name: '智慧园林',
        value: 'park'
      }],
      menus: {
        traffic: [
          { type: "1", typename: "雷达", total: "2" },
          { type: "2", typename: "卡口", total: "1" },
          { type: "3", typename: "信号灯", total: "2" }
        ],
        well: [
          { type: "1", typename: "井盖状态监测仪", total: "0" },
          { type: "2", typename: "噪声记录仪", total: "0" },
          { type: "3", typename: "液位检测仪", total: "0" },
          { type: "4", typename: "消防栓盗水监测仪", total: "0" },
          { type: "5", typename: "有害气体监测仪", total: "0" },
          { type: "6", typename: "多功能漏损监测仪", total: "0" },
          { type: "7", typename: "燃气智能终端", total: "0" }
        ],
        parking: [
          { type: "1", typename: "停车道窄", total: "0" }
        ],
        city: [
          { type: "1", typename: "路灯", total: "0" }
        ],
        park: [
          { type: "1", typename: "水位监测仪", total: "0" },
          { type: "2", typename: "温湿度传感器", total: "0" }
        ]
      },
      result: []
    }
  },
  methods: {
    btnClick(e) {
      this.selectIndex = e.target.id
      clearResetMap()
      this.isShowEvent = false
      this.isShowEventPop = false
      this.isShowPop = false
      console.log(e.target.id, '456')
      if (e.target.dataset.tip === '图层管理') {
        this.search()
      }
      else if (e.target.dataset.tip === '报警视频') {
      }
      else if (e.target.dataset.tip === '监测事件') {
        this.isShowEvent = true
        this.fetchEventList(this.eventParams)
      }
    },
    changeState(v) {
      // devicetype
      this.ktSelect = v
      console.log(v, 'vvvv')
    },
    // 查询点位
    search(keyword) {
      // const iconDone = require('@/assets/images/icon/物联网/卡口在线.png')
      // const iconDoing = require('@/assets/images/icon/物联网/卡口离线.png')
      // console.log(iconDone, 'iconDone')
      // getPointList({
      //   keywords: keyword,
      // }).then(response => {
      //   console.log(response.data, '点位列表')
      //   if (response.code === 200) {
      //     clearUpMap()
      //     this.result = response.data.value.map((item) => ({ ...item, name: `${item.devicetypename}-${item.devicetype}` }))
      //     response.data.value.forEach(item => {
      //       // console.log(item.areaboundary)
      //       // todo : 画范围
      //       AddLabelPoint(
      //         item.id,
      //         item.devicetypename,
      //         item.devicestatusname === '在线' ? iconDone : iconDoing,
      //         [item.lat, item.lon, 0], 'gd', item,
      //         this.clickIcon)
      //     })
      //   }
      // })
      this.markerList = pointList
      pointList.forEach((item) => {
        AddLabelPoint(
          item.id,
          item.deviceTypeName,
          iconDict[item.deviceTypeName],
          [item.lon, item.lat, 0], 'gd', item,
          this.clickIcon)
      })
    },
    // 点击marker
    clickIcon(eventArg) {
      console.log(eventArg, 'eventArg')
      // const item = eventArg._data.data
      const showPop = (e) => {
        const item = e._data.data
        this.isShowPop = true
        // console.log(this.$refs.popRef)
        this.$nextTick(() => {
          this.$refs.pop.initData(item)
        })
      }
      if (this.isShowPop) {
        this.isShowPop = false
        setTimeout(() => {
          showPop(eventArg)
        }, 100);
      }
      else {
        showPop(eventArg)
      }
    },
    // 获取事件列表
    fetchEventList(params) {
      const icon = require('@/assets/images/icon/视频云/坐标.png')
      this.$refs.caseListPage.initDialog()
      getCaseListPage(params).then((res) => {
        console.log(res.data)
        this.eventTotal = res.data.valueSize || res.data.result.data.valueSize
        this.eventList = res.data.value || res.data.result.data.value
        this.eventList = this.eventList.map((item) => ({ ...item, lon: item.lat, lat: item.lon }))
        this.eventList.forEach((item) => {

          AddLabelPoint(
            item.id || new Date().getTime(),
            item.eventName || item.eventname,
            icon,
            [item.lon, item.lat, 0], 'gd', item,
            this.clickCaseIncon
          )
        })
      })
    },
    // 事件列表页面条数变化
    changePage(val) {
      this.eventParams.pageNo = val.page
      this.fetchEventList(this.eventParams)
    },
    // 关闭事件列表
    closeEvent() {
      this.isShowEvent = false
    },
    // 事件列表点击
    menuEventClick(e) {
      console.log(e, 'e')
      if (e.lon && e.lat) {
        showPositin(e.lon, e.lat)
      }

    },
    // 时间查询
    handleTimeRange(e) {
      if (e.startTime && e.endTime) {
        this.eventParams = {
          pageNo: 1,
          pageSize: 5,
          keywords: '',
          startTime: e.startTime,
          endTime: e.endTime
        }
        this.fetchEventList(this.eventParams)
      }

    },
    // 点击事件坐标
    clickCaseIncon(e) {
      const showPop = (e) => {
        const item = e._data.data
        this.isShowEventPop = true
        this.$nextTick(() => {
          this.$refs.eventpop.initData(item)
        })
      }
      if (this.isShowEventPop) {
        this.isShowEventPop = false
        setTimeout(() => {
          showPop(e)
        }, 100);
      }
      else {
        showPop(e)
      }
    },
    // 搜索点位点击
    localPoint(e) {
      // this.childrenClick(e)
      this.clickIcon({
        _data: {
          data: e
        }
      })
    },
    handleKeyword(e) {
      console.log(e, '点位搜索')
      clearResetMap()
      this.resultList = this.markerList.filter((item) => item.name.includes(e))
      pointList.forEach((item) => {
        AddLabelPoint(
          item.id,
          item.deviceTypeName,
          iconDict[item.deviceTypeName],
          [item.lon, item.lat, 0], 'gd', item,
          this.clickIcon)
      })
    }
  },
  mounted() {
    this.search()
    this.$bus.$on('clear', () => {
      this.isShowEvent = false
      this.isShowEventPop = false
      this.isShowPop = false
    })
    // getStatistics().then(res => {
    //   if (res.code === 200 && res.data.value.length) {
    //     console.log(res.data, '')
    //     this.menus.traffic = res.data.value.filter(item => item.project_type.trim() === 'traffic')
    //     this.menus.well = res.data.value.filter(item => item.project_type.trim() === 'smartwell')
    //     this.menus.parking = res.data.value.filter(item => item.project_type.trim() === 'parking')
    //     this.menus.city = res.data.value.filter(item => item.project_type.trim() === 'smartcity')
    //     this.search()
    //   }
    // })
  }
}
</script>

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