shuishen
2025-01-18 fc88e1c380354e341bb7395b94689c58fc699f63
警力资源加载调整
1 files modified
2218 ■■■■ changed files
src/views/police/index.vue 2218 ●●●● patch | view | raw | blame | history
src/views/police/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-08-31 15:57:50
 * @LastEditTime: 2025-01-18 16:36:46
 * @FilePath: \srs-police-affairs\src\views\police\index.vue
 * @Description: 辖区管理
 * 
@@ -10,132 +10,129 @@
-->
<template>
    <div class="police-page container">
        <div v-show="boxShow" class="container-content">
            <el-main v-loading="equimentLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
                element-loading-background="rgba(0, 0, 0, 0.5)" style="overflow: hidden;padding: 0px;">
                <div class="switch-box" v-show="!detailFlag">
                    资源类别:
                    <el-select v-model="typeValue" @change="navClick" placeholder="请选择" class="type-select-css">
                        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"
                            class="option-css"></el-option>
                    </el-select>
                </div>
                <div class="list-show" v-if="!detailFlag">
                    <div class="search-box">
                        <span style="display: inline-block; white-space: nowrap;">资源名称:</span>
                        <el-input size="small" placeholder="请输入…" v-model="searchValue" @change="searchChange"
                            clearable></el-input>
                    </div>
                    <div class="list" ref="tableBox">
                        <el-table :data="equimentTableData"
                            :header-cell-style="{ 'text-align': 'center', 'background-color': '#203c60', borderColor: '#324e75' }"
                            :cell-style="{ 'text-align': 'center', borderColor: '#324e75', cursor: 'default' }"
                            :height="currentTableHeight">
                            <el-table-column prop="newName" :show-overflow-tooltip="true" label="名称"
                                :min-width="typeValue == 0 || typeValue == 2 ? '56%' : '68%'"></el-table-column>
                            <el-table-column prop="status" label="状态"
                                :min-width="typeValue == 0 || typeValue == 2 ? '14%' : '14%'">
                                <template slot-scope="scope">
                                    <div class="state-box" :class="{ online: scope.row.status == '1' }"></div>
                                </template>
                            </el-table-column>
                            <div slot="empty" style="text-align: center;">{{ emptyText }}</div>
                            <el-table-column label="操作" align="center"
                                :min-width="typeValue == 0 || typeValue == 2 || typeValue == 3 ? '30%' : '18%'">
                                <template slot-scope="scope">
                                    <el-button :disabled="whetherPosition(scope.row)" @click="rowClick(scope.row)"
                                        type="text" size="small" title="定位">
                                        <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
                                    </el-button>
                                    <el-button v-show="navType != 1" @click="equipmentTrack(scope.row)" type="text"
                                        size="small" title="轨迹">
                                        <i class="el-icon-police-track"></i>
                                    </el-button>
                                    <el-button v-show="navType != 0 && navType != 2 && navType != 3"
                                        @click="play(scope.row)" type="text" size="small" title="播放视频">
                                        <i class="el-icon-video-play"></i>
                                    </el-button>
                                </template>
                            </el-table-column>
                        </el-table>
                        <div class="pages all-pagination-sty" ref="tablePagination" style="padding-top:-15px">
                            <el-pagination background layout="prev, pager, next" :page-size="equimentPage.pageSize"
                                :total="equimentPage.total" :pager-count="4" :current-page="equimentPage.currentPage"
                                @current-change="handleCurrentChange"></el-pagination>
                        </div>
                    </div>
                </div>
            </el-main>
            <div class="track-box" v-show="detailFlag">
                <div class="track-box-info">
                    <div class="back-btn" @click="goBack" title="轨迹">详细资料及轨迹查询</div>
                    <ul>
                        <li>
                            <div>通道编号:</div>
                            <div>{{ currentSelectEquipment.channelId ? currentSelectEquipment.channelId : '' }}</div>
                        </li>
                        <li>
                            <div>设备编号:</div>
                            <div>{{ currentSelectEquipment.deviceId ? currentSelectEquipment.deviceId : '' }}</div>
                        </li>
                        <li>
                            <div>通道名称:</div>
                            <div>{{ currentSelectEquipment.name ? currentSelectEquipment.name : '' }}</div>
                        </li>
                        <li>
                            <div>状态:</div>
                            <div>
                                {{
                                    currentSelectEquipment.status ? (currentSelectEquipment.status == 0 ? '离线' : '在线') :
                                    ''
                                }}
                            </div>
                        </li>
                        <li>
                            <div>选择时间:</div>
                            <div class="datetime">
                                <el-date-picker v-model="trackTime" type="daterange" unlink-panels range-separator="至"
                                    start-placeholder="开始日期" size="mini" :editable="false"
                                    end-placeholder="结束日期"></el-date-picker>
                            </div>
                        </li>
                        <li>
                            <el-button type="text" @click="lookTrack">查看轨迹</el-button>
                        </li>
                    </ul>
                </div>
            </div>
  <div class="police-page container">
    <div v-show="boxShow" class="container-content">
      <el-main v-loading="equimentLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
        element-loading-background="rgba(0, 0, 0, 0.5)" style="overflow: hidden;padding: 0px;">
        <div class="switch-box" v-show="!detailFlag">
          资源类别:
          <el-select v-model="typeValue" @change="navClick" placeholder="请选择" class="type-select-css">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"
              class="option-css"></el-option>
          </el-select>
        </div>
        <map-search-box></map-search-box>
        <div class="list-show" v-if="!detailFlag">
          <div class="search-box">
            <span style="display: inline-block; white-space: nowrap;">资源名称:</span>
            <el-input size="small" placeholder="请输入…" v-model="searchValue" @change="searchChange" clearable></el-input>
          </div>
        <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box">
            <div>
                <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray" :key="index">
                    {{ item.name }}</div>
          <div class="list" ref="tableBox">
            <el-table :data="equimentTableData"
              :header-cell-style="{ 'text-align': 'center', 'background-color': '#203c60', borderColor: '#324e75' }"
              :cell-style="{ 'text-align': 'center', borderColor: '#324e75', cursor: 'default' }"
              :height="currentTableHeight">
              <el-table-column prop="newName" :show-overflow-tooltip="true" label="名称"
                :min-width="typeValue == 0 || typeValue == 2 ? '56%' : '68%'"></el-table-column>
              <el-table-column prop="status" label="状态" :min-width="typeValue == 0 || typeValue == 2 ? '14%' : '14%'">
                <template slot-scope="scope">
                  <div class="state-box" :class="{ online: scope.row.status == '1' }"></div>
                </template>
              </el-table-column>
              <div slot="empty" style="text-align: center;">{{ emptyText }}</div>
              <el-table-column label="操作" align="center"
                :min-width="typeValue == 0 || typeValue == 2 || typeValue == 3 ? '30%' : '18%'">
                <template slot-scope="scope">
                  <el-button :disabled="whetherPosition(scope.row)" @click="rowClick(scope.row)" type="text"
                    size="small" title="定位">
                    <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
                  </el-button>
                  <el-button v-show="navType != 1" @click="equipmentTrack(scope.row)" type="text" size="small"
                    title="轨迹">
                    <i class="el-icon-police-track"></i>
                  </el-button>
                  <el-button v-show="navType != 0 && navType != 2 && navType != 3" @click="play(scope.row)" type="text"
                    size="small" title="播放视频">
                    <i class="el-icon-video-play"></i>
                  </el-button>
                </template>
              </el-table-column>
            </el-table>
            <div class="pages all-pagination-sty" ref="tablePagination" style="padding-top:-15px">
              <el-pagination background layout="prev, pager, next" :page-size="equimentPage.pageSize"
                :total="equimentPage.total" :pager-count="4" :current-page="equimentPage.currentPage"
                @current-change="handleCurrentChange"></el-pagination>
            </div>
          </div>
        </div>
      </el-main>
        <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" :before-close="dialogBeforeClose" :modal="true"
            :modal-append-to-body="false" :close-on-click-modal="false" class="car-video-box">
            <video-loading v-show="videoPlayShow"></video-loading>
      <div class="track-box" v-show="detailFlag">
        <div class="track-box-info">
          <div class="back-btn" @click="goBack" title="轨迹">详细资料及轨迹查询</div>
          <ul>
            <li>
              <div>通道编号:</div>
              <div>{{ currentSelectEquipment.channelId ? currentSelectEquipment.channelId : '' }}</div>
            </li>
            <video autoplay controls width="100%" height="100%" ref="videoElement" id="videoElement"
                style="object-fit: fill"></video>
        </el-dialog>
        <policeCarDetailDialog ref="policeCarDetailDialog"/>
        <talkEquipmentDetailDialog ref="talkEquipmentDetailDialog"/>
            <li>
              <div>设备编号:</div>
              <div>{{ currentSelectEquipment.deviceId ? currentSelectEquipment.deviceId : '' }}</div>
            </li>
            <li>
              <div>通道名称:</div>
              <div>{{ currentSelectEquipment.name ? currentSelectEquipment.name : '' }}</div>
            </li>
            <li>
              <div>状态:</div>
              <div>
                {{
                  currentSelectEquipment.status ? (currentSelectEquipment.status == 0 ? '离线' : '在线') :
                    ''
                }}
              </div>
            </li>
            <li>
              <div>选择时间:</div>
              <div class="datetime">
                <el-date-picker v-model="trackTime" type="daterange" unlink-panels range-separator="至"
                  start-placeholder="开始日期" size="mini" :editable="false" end-placeholder="结束日期"></el-date-picker>
              </div>
            </li>
            <li>
              <el-button type="text" @click="lookTrack">查看轨迹</el-button>
            </li>
          </ul>
        </div>
      </div>
    </div>
    <map-search-box></map-search-box>
    <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box">
      <div>
        <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray" :key="index">
          {{ item.name }}</div>
      </div>
    </div>
    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" :before-close="dialogBeforeClose" :modal="true"
      :modal-append-to-body="false" :close-on-click-modal="false" class="car-video-box">
      <video-loading v-show="videoPlayShow"></video-loading>
      <video autoplay controls width="100%" height="100%" ref="videoElement" id="videoElement"
        style="object-fit: fill"></video>
    </el-dialog>
    <policeCarDetailDialog ref="policeCarDetailDialog" />
    <talkEquipmentDetailDialog ref="talkEquipmentDetailDialog" />
  </div>
</template>
<script>
@@ -157,1016 +154,1045 @@
export default {
    components:{
        policeCarDetailDialog,
        talkEquipmentDetailDialog
    },
    inject: ['userInfo'],
  components: {
    policeCarDetailDialog,
    talkEquipmentDetailDialog
  },
  inject: ['userInfo'],
    data () {
        return {
            emptyText: '',
            navType: 1,
            equimentLoading: false,
            dialogTitle: '',
            dialogVisible: false,
            searchValue: '',
            currentTableHeight: 0,
            detailFlag: false,
            trackTime: [],
            options: [
                {
                    value: '0',
                    label: '警车'
                },
                {
                    value: '1',
                    label: '摄像头'
                },
                {
                    value: '2',
                    label: '手台'
                },
                {
                    value: '3',
                    label: '执法记录仪'
                }
                // , {
                //     value: '3',
                //     label: '电台'
                // }, {
                //     value: '4',
                //     label: '执法记录仪'
                // }
            ],
            typeValue: '1',
            boxShow: true,
            searchExtensivelyValue: '',
            searchExtensivelyValBoxShow: false,
            searchExtensivelyArray: [],
            flvPlayer: null,
            equimentTableData: [],
            equimentPage: {
                total: 0,
                pageSize: 22,
                count: 0,
                currentPage: 1
            },
            currentSelectEquipment: {},
            videoPlayShow: false
  data () {
    return {
      emptyText: '',
      navType: 1,
      equimentLoading: false,
      dialogTitle: '',
      dialogVisible: false,
      searchValue: '',
      currentTableHeight: 0,
      detailFlag: false,
      trackTime: [],
      options: [
        {
          value: '0',
          label: '警车'
        },
        {
          value: '1',
          label: '摄像头'
        },
        {
          value: '2',
          label: '手台'
        },
        {
          value: '3',
          label: '执法记录仪'
        }
    },
        // , {
        //     value: '3',
        //     label: '电台'
        // }, {
        //     value: '4',
        //     label: '执法记录仪'
        // }
      ],
      typeValue: '1',
      boxShow: true,
      searchExtensivelyValue: '',
      searchExtensivelyValBoxShow: false,
      searchExtensivelyArray: [],
      flvPlayer: null,
    created () {
        window.addEventListener('resize', this.setTableHeight)
      equimentTableData: [],
      equimentPage: {
        total: 0,
        pageSize: 22,
        count: 0,
        currentPage: 1
      },
        this.$nextTick(() => {
            initMapPosition()
            this.$EventBus.$emit('closeMxTileset')
        })
    },
      currentSelectEquipment: {},
    computed: {
        whetherPosition () {
            return (row) => {
                return !(row.latitude && row.latitude != 0 && row.longitude && row.longitude != 0)
            }
        },
        positionColor () {
            return (row) => {
                if (row.latitude && row.latitude != 0 && row.longitude && row.longitude != 0) {
                    return "#1AFA29"
                } else {
                    return "#ccc"
                }
            }
        }
    },
    mounted () {
        this.$parent.$parent.resize('400px', true)
        this.navClick()
        this.$nextTick(() => {
            this.$EventBus.$emit('closeMxTileset')
            tc = new global.DC.TrackController(global.viewer)
            this.setTableHeight()
        })
    },
    methods: {
        // 搜索框改变事件
        searchChange () {
            this.detailFlag = false
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'polylineLayer',
                type: 'VectorLayer'
            })
            this.equimentPage.currentPage = 1
            this.equimentPage.total = 0
            // this.equimentTableData = []
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'carLayers',
                type: 'VectorLayer'
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'policeMonitoringLayers',
                type: 'VectorLayer'
            })
            // 查询分页数据
            this.getEquipmentPaging({ type: this.navType })
        },
        // 设备分页处理
        handleCurrentChange (currentPage) {
            this.equimentPage.currentPage = currentPage
            this.getEquipmentPaging({ type: this.navType })
        },
        // 获取设备分页数据
        getEquipmentPaging (params) {
            this.equimentTableData = []
            this.equimentLoading = true
            this.emptyText = ""
            clearInterval(policeTimeOut)
            policeTimeOut = setInterval(() => {
                this.getEquipmentPaging(params)
            }, 30000)
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'carLayers',
                type: 'VectorLayer'
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'policeMonitoringLayers',
                type: 'VectorLayer'
            })
            getEquipmentPaging({ page: this.equimentPage.currentPage, count: this.equimentPage.pageSize, ...params, query: this.searchValue, dwbh: this.userInfo.dept_id }).then(res => {
                var total = res.data.data.total
                if (total == 0) {
                    if (this.navType == 0) {
                        this.emptyText = "暂无警车数据"
                    }
                    if (this.navType == 1) {
                        this.emptyText = "暂无摄像头数据"
                    }
                    if (this.navType == 2) {
                        this.emptyText = "暂无手台数据"
                    }
                    if (this.navType == 3) {
                        this.emptyText = "暂无执法记录仪数据"
                    }
                    this.equimentLoading = false
                }
                if (res.data.data.list.length > 0) {
                    this.equimentTableData = res.data.data.list.map(item => {
                        let newName = ''
                        if (params.type == 0) {
                            newName = item.name.replace('上饶-', '')
                        } else if (params.type == 2 || params.type == 3) {
                            newName = item.name
                        } else {
                            if (item.name.charAt(7) == '-') {
                                newName = item.name.slice(8)
                            } else {
                                newName = item.name.slice(7)
                            }
                        }
                        return { ...item, newName: newName, lng: item.longitude, lat: item.latitude, alt: 1 }
                    })
                    this.equimentTableData.forEach(item => {
                        if (this.navType == 0) {
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'carLayers',
                                type: 'billboard',
                                params: {
                                    ...item,
                                    url: '/img/icon/car.png',
                                    setStyle: {
                                        disableDepthTestDistance: Number.POSITIVE_INFINITY
                                    }
                                },
                                incident: this.siteClickCar,
                                mouseOverIncident: this.pointMouseOver,
                                mouseOutIncident: this.pointMouseOut,
                            })
                        } else if (this.navType == 1) {
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'policeMonitoringLayers',
                                type: 'billboard',
                                params: {
                                    ...item,
                                    url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                                    setStyle: {
                                        disableDepthTestDistance: Number.POSITIVE_INFINITY
                                    }
                                },
                                incident: this.siteClick,
                                mouseOverIncident: this.pointMouseOver,
                                mouseOutIncident: this.pointMouseOut,
                            })
                        } else if (this.navType == 2) {
                            // let position = global.DC.CoordTransform.BD09ToGCJ02(item.lng, item.lat)
                            // item.lng = global.DC.CoordTransform.GCJ02ToWGS84(position[0], position[1])[0]
                            // item.lat = global.DC.CoordTransform.GCJ02ToWGS84(position[0], position[1])[1]
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'policeMonitoringLayers',
                                type: 'billboard',
                                params: {
                                    ...item,
                                    url: '/img/icon/p-talk.png',
                                    setStyle: {
                                        disableDepthTestDistance: Number.POSITIVE_INFINITY
                                    }
                                },
                                incident: this.siteClickTalk,
                                mouseOverIncident: this.pointMouseOver,
                                mouseOutIncident: this.pointMouseOut,
                            })
                        } else if (this.navType == 3) {
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'policeMonitoringLayers',
                                type: 'billboard',
                                params: {
                                    ...item,
                                    url: '/img/icon/p-b-camera.png',
                                    setStyle: {
                                        disableDepthTestDistance: Number.POSITIVE_INFINITY
                                    }
                                },
                                incident: this.siteClickLaw,
                                mouseOverIncident: this.pointMouseOver,
                                mouseOutIncident: this.pointMouseOut,
                            })
                        }
                    })
                    this.equimentPage.total = res.data.data.total
                    this.equimentLoading = false
                } else {
                    this.equimentTableData = []
                    this.equimentPage.total = 0
                }
                this.equimentLoading = false
            }).catch(res => {
                setTimeout(() => {
                    if (this.navType == 0) {
                        this.emptyText = "暂无警车数据"
                    }
                    if (this.navType == 1) {
                        this.emptyText = "暂无摄像头数据"
                    }
                    if (this.navType == 2) {
                        this.emptyText = "暂无手台数据"
                    }
                    if (this.navType == 3) {
                        this.emptyText = "暂无执法记录仪数据"
                    }
                    this.equimentLoading = false
                }, 500)
            })
        },
        // 鼠标移入图标事件
        pointMouseOver (e) {
            this.$store.commit('SET_VIDEOLISTPOPUP', true)
            this.$store.commit('SET_VIDEOLISTPOPUPDATA', {
                ...e.overlay.attrParams,
                name: e.overlay.attrParams.newName
            })
            var popup = new global.DC.DivForms(global.viewer, {
                domId: 'videoListPopup',
                position: [
                    global.DC.Transform.transformWGS84ToCartesian(
                        new global.DC.Position(
                            Number(e.overlay.attrParams.lng),
                            Number(e.overlay.attrParams.lat),
                            0
                        )
                    )
                ]
            })
        },
        /**
         * @description: 鼠标移出事件
         * @param {*} e
         * @return {*}
         */
        pointMouseOut (e) {
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
        },
        // 类别切换
        navClick (type) {
            if (type && type == this.navType) return
            this.$store.commit('SET_VIDEOROWCLICKPOPUP', false)
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
            if (type) {
                this.navType = type
            }
            this.searchValue = ''
            this.equimentPage.currentPage = 1
            this.equimentPage.total = 0
            this.getEquipmentPaging({ type: this.navType })
        },
        // 表格行点击查看定位
        rowClick (row) {
            if (row.lng == 0 || row.lat == 0) {
                this.$message.error('暂无位置信息!')
                return
            }
            this.$EventBus.$emit('toPosition', {
                layerName: 'carLayers',
                siteJd: row.lng,
                siteWd: row.lat
            })
            this.$store.commit('SET_VIDEOROWCLICKPOPUP', true)
            this.$store.commit('SET_VIDEOROWCLICKPOPUPDATA', {
                ...row,
                name: row.newName
            })
            var popup = new global.DC.DivForms(global.viewer, {
                domId: 'videoRowClickPopup',
                position: [
                    global.DC.Transform.transformWGS84ToCartesian(
                        new global.DC.Position(
                            Number(row.lng),
                            Number(row.lat),
                            0
                        )
                    )
                ]
            })
        },
        // 表格行点击查看轨迹
        equipmentTrack (row) {
            this.detailFlag = true
            this.currentSelectEquipment = row
        },
        async play (row) {
            this.videoPlayShow = true
            if (this.flvPlayer != null) {
                this.flvPlayer.pause()
                this.flvPlayer.unload()
                this.flvPlayer.detachMediaElement()
                this.flvPlayer.destroy()
                this.flvPlayer = null
            }
            this.dialogTitle = row.name
            this.dialogVisible = true
            let flvUrl = ''
            await this.getDevices(row.channelId).then(res => {
                flvUrl = res
            })
            if (typeof flvUrl === 'object') {
                this.$message.error(flvUrl.msg)
                this.dialogVisible = false
                return
            }
            if (flvjs.isSupported()) {
                this.$nextTick(() => {
                    var videoElement = document.getElementById('videoElement')
                    this.flvPlayer = flvjs.createPlayer({
                        type: 'flv',
                        isLive: true,
                        hasAudio: false,
                        url: flvUrl
                    })
                    this.flvPlayer.attachMediaElement(videoElement)
                    this.flvPlayer.load()
                    this.videoPlayShow = false
                    this.flvPlayer.play()
                })
            }
        },
        async getDevices (channelId) {
            let flvAddress = ''
            await getDevices(channelId).then(res => {
                if ('data' in res.data) {
                    flvAddress = res.data.data.flv
                } else {
                    flvAddress = res.data
                }
            })
            return flvAddress
        },
        siteClick (e) {
            if(this.typeValue==1){
                this.play(e.overlay.attrParams)
            }
        },
        // 点击查看执法记录仪信息
        siteClickLaw(e){
            // console.log(e)
        },
        // 点击查看手台信息
        siteClickTalk(e){
            // console.log(e.overlay.attrParams,88888)
            this.$refs.talkEquipmentDetailDialog.initOpen(e.overlay.attrParams.id)
        },
        // 点击查看警车信息
        siteClickCar(e){
            // console.log(e)
            this.$refs.policeCarDetailDialog.initOpen(e.overlay.attrParams.id)
        },
        dialogBeforeClose () {
            this.$refs.videoElement.pause()
            this.dialogVisible = false
        },
        // 轨迹返回
        goBack () {
            this.detailFlag = !this.detailFlag
            this.trackTime = []
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'polylineLayer',
                type: 'VectorLayer'
            })
            tc.pause()
            tc.removeTrack(track)
        },
        // 查看轨迹
        async lookTrack () {
            global.viewer.scene.globe.depthTestAgainstTerrain = false
            if (this.trackTime.length == 0) {
                this.$message({ message: '请选择开始时间', duration: 2000 })
                return
            }
            const startTime = new Date(this.trackTime[0])
            const start = startTime.getFullYear() + '-' + this.disposeTime(startTime.getMonth() + 1) + '-' + this.disposeTime(startTime.getDate()) + ' ' + this.disposeTime(startTime.getHours()) + ':' + this.disposeTime(startTime.getMinutes()) + ':' + this.disposeTime(startTime.getSeconds())
            if (this.trackTime.length == 1) {
                this.$message({ message: '请选择结束时间', duration: 2000 })
                return
            }
            const endTime = new Date(this.trackTime[1])
            const end = endTime.getFullYear() + '-' + this.disposeTime(endTime.getMonth() + 1) + '-' + this.disposeTime(endTime.getDate()) + ' ' + this.disposeTime(endTime.getHours()) + ':' + this.disposeTime(endTime.getMinutes()) + ':' + this.disposeTime(endTime.getSeconds())
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'polylineLayer',
                type: 'VectorLayer'
            })
            let positionsArr = []
            await this.getHistoricalTrack({ start: start, end: end, channelId: this.currentSelectEquipment.channelId, type: this.navType }).then(res => {
                positionsArr = res
            })
            if (positionsArr.length < 1) {
                this.$message({
                    message: '该设备暂无轨迹数据',
                    type: 'warning'
                })
                return
            }
            let flag = positionsArr.every(item => item.longitude == positionsArr[0].longitude && item.latitude == positionsArr[0].latitude)
            if (flag) {
                this.$message({
                    message: '该设备暂无轨迹数据',
                    type: 'warning'
                })
                return
            }
            let positionStr = ''
            positionsArr.forEach(item => {
                positionStr = positionStr + item.longitude + ',' + item.latitude + ';'
            })
            this.$EventBus.$emit('layerPolylineAdd', {
                layerName: 'polylineLayer',
                positions: positionStr,
                material: new global.DC.PolylineLightingTrailMaterialProperty({
                    color: global.DC.Color.RED,
                    speed: 5.0
                }),
                width: 6
            })
            this.$EventBus.$emit('layerPointAdd', {
                layerName: 'polylineLayer',
                type: 'billboard',
                params: {
                    lng: positionsArr[0].longitude,
                    lat: positionsArr[0].latitude,
                    alt: 1,
                    url: '/img/icon/orgin.png'
                }
            })
            this.$EventBus.$emit('layerPointAdd', {
                layerName: 'polylineLayer',
                type: 'billboard',
                params: {
                    lng: positionsArr[positionsArr.length - 1].longitude,
                    lat: positionsArr[positionsArr.length - 1].latitude,
                    alt: 1,
                    url: '/img/icon/end.png'
                }
            })
            track = new global.DC.Track(positionStr, 5000, () => {
            }, {
                headingOffset: -90
            })
            track.setModel('/model/qiche.gltf', {
                scale: 1
            })
            tc.addTrack(track)
            this.$EventBus.$emit('toPosition', {
                siteJd: positionsArr[0].longitude,
                siteWd: positionsArr[0].latitude,
                siteGd: 1000,
                siteHeading: 0,
                sitePitch: -90
            })
            tc.play()
        },
        // 处理时间补零操作
        disposeTime (s) {
            return s < 10 ? '0' + s : s
        },
        setTableHeight () {
            this.currentTableHeight = this.$refs.tableBox.offsetHeight - this.$refs.tablePagination.offsetHeight
        },
        // 大小重置
        boxResize (val) {
            this.boxShow = val
        },
        async getHistoricalTrack (params) {
            let positionArr = []
            await getHistoricalTrack(params).then(res => {
                positionArr = res.data.data
            })
            return positionArr
        },
        // 大搜
        getSearchExtensively (ak, region, query) {
            getSearchExtensively(ak, region, query).then(res => {
                this.searchExtensivelyArray = res.data.result
            })
        },
        searchExtensivelyClick () {
            this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
            this.searchExtensivelyValBoxShow = false
            if (this.searchExtensivelyArray.length > 0) {
                this.$EventBus.$emit('toPosition', {
                    siteJd: `${this.searchExtensivelyArray[0].location.lng}`,
                    siteWd: `${this.searchExtensivelyArray[0].location.lat}`,
                    siteGd: 200
                })
                this.searchExtensivelyValue = this.searchExtensivelyArray[0].name
                this.$EventBus.$emit('mapClearLayer', {
                    layerName: 'searchLayer',
                    type: 'VectorLayer'
                })
                this.$EventBus.$emit('layerPointAdd', {
                    layerName: 'searchLayer',
                    type: 'label',
                    params: {
                        lng: `${this.searchExtensivelyArray[0].location.lng}`,
                        lat: `${this.searchExtensivelyArray[0].location.lat}`,
                        alt: 1,
                        text: this.searchExtensivelyArray[0].name
                    }
                })
            }
        },
        searchExtensivelyChange () {
            if (this.searchExtensivelyValue == '') {
                this.searchExtensivelyValBoxShow = false
                this.isShowClearBtn = false
                this.searchExtensivelyArray = []
            } else {
                this.searchExtensivelyValBoxShow = true
                this.isShowClearBtn = true
                this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
            }
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'searchLayer',
                type: 'VectorLayer'
            })
        },
        searchExtensivelyVlaClick (item) {
            this.searchExtensivelyValBoxShow = false
            this.searchExtensivelyValue = item.name
            this.$EventBus.$emit('toPosition', {
                siteJd: `${item.location.lng}`,
                siteWd: `${item.location.lat}`,
                siteGd: 200
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'searchLayer',
                type: 'VectorLayer'
            })
            this.$EventBus.$emit('layerPointAdd', {
                layerName: 'searchLayer',
                type: 'label',
                params: {
                    lng: `${item.location.lng}`,
                    lat: `${item.location.lat}`,
                    alt: 1,
                    text: item.name
                }
            })
            this.$EventBus.$emit('layerPointAdd', {
                layerName: 'searchLayer',
                type: 'billboard',
                params: {
                    lng: `${item.location.lng}`,
                    lat: `${item.location.lat}`,
                    alt: 1,
                    url: '/img/icon/location.png'
                }
            })
        },
        searchExtensivelyFocus () {
            this.searchExtensivelyValBoxShow = true
            this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
        },
        clearSearchValue () {
            this.searchExtensivelyValue = ''
            this.searchExtensivelyChange()
        }
    },
    destroyed () {
        this.$store.commit('SET_VIDEOROWCLICKPOPUP', false)
        this.$store.commit('SET_VIDEOLISTPOPUP', false)
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'carLayers',
            type: 'VectorLayer'
        })
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'policeMonitoringLayers',
            type: 'VectorLayer'
        })
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'polylineLayer',
            type: 'VectorLayer'
        })
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'searchLayer',
            type: 'VectorLayer'
        })
        if (tc && tc != null && tc != undefined) {
            tc.pause()
            tc.removeTrack(track)
        }
        clearInterval(policeTimeOut)
        window.removeEventListener('resize', this.setTableHeight)
        this.$parent.$parent.resize('0px')
      videoPlayShow: false
    }
  },
  created () {
    window.addEventListener('resize', this.setTableHeight)
    this.$nextTick(() => {
      initMapPosition()
      this.$EventBus.$emit('closeMxTileset')
    })
  },
  computed: {
    whetherPosition () {
      return (row) => {
        return !(row.latitude && row.latitude != 0 && row.longitude && row.longitude != 0)
      }
    },
    positionColor () {
      return (row) => {
        if (row.latitude && row.latitude != 0 && row.longitude && row.longitude != 0) {
          return "#1AFA29"
        } else {
          return "#ccc"
        }
      }
    }
  },
  mounted () {
    this.$parent.$parent.resize('400px', true)
    this.navClick()
    this.$nextTick(() => {
      this.$EventBus.$emit('closeMxTileset')
      tc = new global.DC.TrackController(global.viewer)
      this.setTableHeight()
    })
  },
  methods: {
    // 搜索框改变事件
    searchChange () {
      this.detailFlag = false
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'polylineLayer',
        type: 'VectorLayer'
      })
      this.equimentPage.currentPage = 1
      this.equimentPage.total = 0
      // this.equimentTableData = []
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'carLayers',
        type: 'VectorLayer'
      })
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'policeMonitoringLayers',
        type: 'VectorLayer'
      })
      // 查询分页数据
      this.getEquipmentPaging({ type: this.navType }, false)
    },
    // 设备分页处理
    handleCurrentChange (currentPage) {
      this.equimentPage.currentPage = currentPage
      this.getEquipmentPaging({ type: this.navType }, false)
    },
    // 获取设备分页数据
    getEquipmentPaging (params, flag) {
      this.equimentTableData = []
      this.equimentLoading = true
      this.emptyText = ""
      clearInterval(policeTimeOut)
      policeTimeOut = setInterval(() => {
        this.getEquipmentPaging(params, flag)
      }, 30000)
      if (flag) {
        this.$EventBus.$emit('mapClearLayer', {
          layerName: 'carLayers',
          type: 'VectorLayer'
        })
        this.$EventBus.$emit('mapClearLayer', {
          layerName: 'policeMonitoringLayers',
          type: 'VectorLayer'
        })
        getEquipmentPaging({
          page: this.equimentPage.currentPage,
          count: 19999,
          ...params,
          query: this.searchValue,
          dwbh: this.userInfo.dept_id
        }).then(res => {
          if (res.data.data.list.length > 0) {
            let arrAll = res.data.data.list.map(item => {
              let newName = ''
              if (params.type == 0) {
                newName = item.name.replace('上饶-', '')
              } else if (params.type == 2 || params.type == 3) {
                newName = item.name
              } else {
                if (item.name.charAt(7) == '-') {
                  newName = item.name.slice(8)
                } else {
                  newName = item.name.slice(7)
                }
              }
              return { ...item, newName: newName, lng: item.longitude, lat: item.latitude, alt: 1 }
            })
            arrAll.forEach(item => {
              if (this.navType == 0) {
                this.$EventBus.$emit('layerPointAdd', {
                  layerName: 'carLayers',
                  type: 'billboard',
                  params: {
                    ...item,
                    url: '/img/icon/car.png',
                    setStyle: {
                      disableDepthTestDistance: Number.POSITIVE_INFINITY
                    }
                  },
                  incident: this.siteClickCar,
                  mouseOverIncident: this.pointMouseOver,
                  mouseOutIncident: this.pointMouseOut,
                })
              } else if (this.navType == 1) {
                this.$EventBus.$emit('layerPointAdd', {
                  layerName: 'policeMonitoringLayers',
                  type: 'billboard',
                  params: {
                    ...item,
                    url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                    setStyle: {
                      disableDepthTestDistance: Number.POSITIVE_INFINITY
                    }
                  },
                  incident: this.siteClick,
                  mouseOverIncident: this.pointMouseOver,
                  mouseOutIncident: this.pointMouseOut,
                })
              } else if (this.navType == 2) {
                // let position = global.DC.CoordTransform.BD09ToGCJ02(item.lng, item.lat)
                // item.lng = global.DC.CoordTransform.GCJ02ToWGS84(position[0], position[1])[0]
                // item.lat = global.DC.CoordTransform.GCJ02ToWGS84(position[0], position[1])[1]
                this.$EventBus.$emit('layerPointAdd', {
                  layerName: 'policeMonitoringLayers',
                  type: 'billboard',
                  params: {
                    ...item,
                    url: '/img/icon/p-talk.png',
                    setStyle: {
                      disableDepthTestDistance: Number.POSITIVE_INFINITY
                    }
                  },
                  incident: this.siteClickTalk,
                  mouseOverIncident: this.pointMouseOver,
                  mouseOutIncident: this.pointMouseOut,
                })
              } else if (this.navType == 3) {
                this.$EventBus.$emit('layerPointAdd', {
                  layerName: 'policeMonitoringLayers',
                  type: 'billboard',
                  params: {
                    ...item,
                    url: '/img/icon/p-b-camera.png',
                    setStyle: {
                      disableDepthTestDistance: Number.POSITIVE_INFINITY
                    }
                  },
                  incident: this.siteClickLaw,
                  mouseOverIncident: this.pointMouseOver,
                  mouseOutIncident: this.pointMouseOut,
                })
              }
            })
          }
        })
      }
      getEquipmentPaging({ page: this.equimentPage.currentPage, count: this.equimentPage.pageSize, ...params, query: this.searchValue, dwbh: this.userInfo.dept_id }).then(res => {
        var total = res.data.data.total
        if (total == 0) {
          if (this.navType == 0) {
            this.emptyText = "暂无警车数据"
          }
          if (this.navType == 1) {
            this.emptyText = "暂无摄像头数据"
          }
          if (this.navType == 2) {
            this.emptyText = "暂无手台数据"
          }
          if (this.navType == 3) {
            this.emptyText = "暂无执法记录仪数据"
          }
          this.equimentLoading = false
        }
        if (res.data.data.list.length > 0) {
          this.equimentTableData = res.data.data.list.map(item => {
            let newName = ''
            if (params.type == 0) {
              newName = item.name.replace('上饶-', '')
            } else if (params.type == 2 || params.type == 3) {
              newName = item.name
            } else {
              if (item.name.charAt(7) == '-') {
                newName = item.name.slice(8)
              } else {
                newName = item.name.slice(7)
              }
            }
            return { ...item, newName: newName, lng: item.longitude, lat: item.latitude, alt: 1 }
          })
          this.equimentPage.total = res.data.data.total
          this.equimentLoading = false
        } else {
          this.equimentTableData = []
          this.equimentPage.total = 0
        }
        this.equimentLoading = false
      }).catch(res => {
        setTimeout(() => {
          if (this.navType == 0) {
            this.emptyText = "暂无警车数据"
          }
          if (this.navType == 1) {
            this.emptyText = "暂无摄像头数据"
          }
          if (this.navType == 2) {
            this.emptyText = "暂无手台数据"
          }
          if (this.navType == 3) {
            this.emptyText = "暂无执法记录仪数据"
          }
          this.equimentLoading = false
        }, 500)
      })
    },
    // 鼠标移入图标事件
    pointMouseOver (e) {
      this.$store.commit('SET_VIDEOLISTPOPUP', true)
      this.$store.commit('SET_VIDEOLISTPOPUPDATA', {
        ...e.overlay.attrParams,
        name: e.overlay.attrParams.newName
      })
      var popup = new global.DC.DivForms(global.viewer, {
        domId: 'videoListPopup',
        position: [
          global.DC.Transform.transformWGS84ToCartesian(
            new global.DC.Position(
              Number(e.overlay.attrParams.lng),
              Number(e.overlay.attrParams.lat),
              0
            )
          )
        ]
      })
    },
    /**
     * @description: 鼠标移出事件
     * @param {*} e
     * @return {*}
     */
    pointMouseOut (e) {
      this.$store.commit('SET_VIDEOLISTPOPUP', false)
    },
    // 类别切换
    navClick (type) {
      if (type && type == this.navType) return
      this.$store.commit('SET_VIDEOROWCLICKPOPUP', false)
      this.$store.commit('SET_VIDEOLISTPOPUP', false)
      if (type) {
        this.navType = type
      }
      this.searchValue = ''
      this.equimentPage.currentPage = 1
      this.equimentPage.total = 0
      this.getEquipmentPaging({ type: this.navType }, true)
    },
    // 表格行点击查看定位
    rowClick (row) {
      if (row.lng == 0 || row.lat == 0) {
        this.$message.error('暂无位置信息!')
        return
      }
      this.$EventBus.$emit('toPosition', {
        layerName: 'carLayers',
        siteJd: row.lng,
        siteWd: row.lat
      })
      this.$store.commit('SET_VIDEOROWCLICKPOPUP', true)
      this.$store.commit('SET_VIDEOROWCLICKPOPUPDATA', {
        ...row,
        name: row.newName
      })
      var popup = new global.DC.DivForms(global.viewer, {
        domId: 'videoRowClickPopup',
        position: [
          global.DC.Transform.transformWGS84ToCartesian(
            new global.DC.Position(
              Number(row.lng),
              Number(row.lat),
              0
            )
          )
        ]
      })
    },
    // 表格行点击查看轨迹
    equipmentTrack (row) {
      this.detailFlag = true
      this.currentSelectEquipment = row
    },
    async play (row) {
      this.videoPlayShow = true
      if (this.flvPlayer != null) {
        this.flvPlayer.pause()
        this.flvPlayer.unload()
        this.flvPlayer.detachMediaElement()
        this.flvPlayer.destroy()
        this.flvPlayer = null
      }
      this.dialogTitle = row.name
      this.dialogVisible = true
      let flvUrl = ''
      await this.getDevices(row.channelId).then(res => {
        flvUrl = res
      })
      if (typeof flvUrl === 'object') {
        this.$message.error(flvUrl.msg)
        this.dialogVisible = false
        return
      }
      if (flvjs.isSupported()) {
        this.$nextTick(() => {
          var videoElement = document.getElementById('videoElement')
          this.flvPlayer = flvjs.createPlayer({
            type: 'flv',
            isLive: true,
            hasAudio: false,
            url: flvUrl
          })
          this.flvPlayer.attachMediaElement(videoElement)
          this.flvPlayer.load()
          this.videoPlayShow = false
          this.flvPlayer.play()
        })
      }
    },
    async getDevices (channelId) {
      let flvAddress = ''
      await getDevices(channelId).then(res => {
        if ('data' in res.data) {
          flvAddress = res.data.data.flv
        } else {
          flvAddress = res.data
        }
      })
      return flvAddress
    },
    siteClick (e) {
      if (this.typeValue == 1) {
        this.play(e.overlay.attrParams)
      }
    },
    // 点击查看执法记录仪信息
    siteClickLaw (e) {
      // console.log(e)
    },
    // 点击查看手台信息
    siteClickTalk (e) {
      // console.log(e.overlay.attrParams,88888)
      this.$refs.talkEquipmentDetailDialog.initOpen(e.overlay.attrParams.id)
    },
    // 点击查看警车信息
    siteClickCar (e) {
      // console.log(e)
      this.$refs.policeCarDetailDialog.initOpen(e.overlay.attrParams.id)
    },
    dialogBeforeClose () {
      this.$refs.videoElement.pause()
      this.dialogVisible = false
    },
    // 轨迹返回
    goBack () {
      this.detailFlag = !this.detailFlag
      this.trackTime = []
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'polylineLayer',
        type: 'VectorLayer'
      })
      tc.pause()
      tc.removeTrack(track)
    },
    // 查看轨迹
    async lookTrack () {
      global.viewer.scene.globe.depthTestAgainstTerrain = false
      if (this.trackTime.length == 0) {
        this.$message({ message: '请选择开始时间', duration: 2000 })
        return
      }
      const startTime = new Date(this.trackTime[0])
      const start = startTime.getFullYear() + '-' + this.disposeTime(startTime.getMonth() + 1) + '-' + this.disposeTime(startTime.getDate()) + ' ' + this.disposeTime(startTime.getHours()) + ':' + this.disposeTime(startTime.getMinutes()) + ':' + this.disposeTime(startTime.getSeconds())
      if (this.trackTime.length == 1) {
        this.$message({ message: '请选择结束时间', duration: 2000 })
        return
      }
      const endTime = new Date(this.trackTime[1])
      const end = endTime.getFullYear() + '-' + this.disposeTime(endTime.getMonth() + 1) + '-' + this.disposeTime(endTime.getDate()) + ' ' + this.disposeTime(endTime.getHours()) + ':' + this.disposeTime(endTime.getMinutes()) + ':' + this.disposeTime(endTime.getSeconds())
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'polylineLayer',
        type: 'VectorLayer'
      })
      let positionsArr = []
      await this.getHistoricalTrack({ start: start, end: end, channelId: this.currentSelectEquipment.channelId, type: this.navType }).then(res => {
        positionsArr = res
      })
      if (positionsArr.length < 1) {
        this.$message({
          message: '该设备暂无轨迹数据',
          type: 'warning'
        })
        return
      }
      let flag = positionsArr.every(item => item.longitude == positionsArr[0].longitude && item.latitude == positionsArr[0].latitude)
      if (flag) {
        this.$message({
          message: '该设备暂无轨迹数据',
          type: 'warning'
        })
        return
      }
      let positionStr = ''
      positionsArr.forEach(item => {
        positionStr = positionStr + item.longitude + ',' + item.latitude + ';'
      })
      this.$EventBus.$emit('layerPolylineAdd', {
        layerName: 'polylineLayer',
        positions: positionStr,
        material: new global.DC.PolylineLightingTrailMaterialProperty({
          color: global.DC.Color.RED,
          speed: 5.0
        }),
        width: 6
      })
      this.$EventBus.$emit('layerPointAdd', {
        layerName: 'polylineLayer',
        type: 'billboard',
        params: {
          lng: positionsArr[0].longitude,
          lat: positionsArr[0].latitude,
          alt: 1,
          url: '/img/icon/orgin.png'
        }
      })
      this.$EventBus.$emit('layerPointAdd', {
        layerName: 'polylineLayer',
        type: 'billboard',
        params: {
          lng: positionsArr[positionsArr.length - 1].longitude,
          lat: positionsArr[positionsArr.length - 1].latitude,
          alt: 1,
          url: '/img/icon/end.png'
        }
      })
      track = new global.DC.Track(positionStr, 5000, () => {
      }, {
        headingOffset: -90
      })
      track.setModel('/model/qiche.gltf', {
        scale: 1
      })
      tc.addTrack(track)
      this.$EventBus.$emit('toPosition', {
        siteJd: positionsArr[0].longitude,
        siteWd: positionsArr[0].latitude,
        siteGd: 1000,
        siteHeading: 0,
        sitePitch: -90
      })
      tc.play()
    },
    // 处理时间补零操作
    disposeTime (s) {
      return s < 10 ? '0' + s : s
    },
    setTableHeight () {
      this.currentTableHeight = this.$refs.tableBox.offsetHeight - this.$refs.tablePagination.offsetHeight
    },
    // 大小重置
    boxResize (val) {
      this.boxShow = val
    },
    async getHistoricalTrack (params) {
      let positionArr = []
      await getHistoricalTrack(params).then(res => {
        positionArr = res.data.data
      })
      return positionArr
    },
    // 大搜
    getSearchExtensively (ak, region, query) {
      getSearchExtensively(ak, region, query).then(res => {
        this.searchExtensivelyArray = res.data.result
      })
    },
    searchExtensivelyClick () {
      this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
      this.searchExtensivelyValBoxShow = false
      if (this.searchExtensivelyArray.length > 0) {
        this.$EventBus.$emit('toPosition', {
          siteJd: `${this.searchExtensivelyArray[0].location.lng}`,
          siteWd: `${this.searchExtensivelyArray[0].location.lat}`,
          siteGd: 200
        })
        this.searchExtensivelyValue = this.searchExtensivelyArray[0].name
        this.$EventBus.$emit('mapClearLayer', {
          layerName: 'searchLayer',
          type: 'VectorLayer'
        })
        this.$EventBus.$emit('layerPointAdd', {
          layerName: 'searchLayer',
          type: 'label',
          params: {
            lng: `${this.searchExtensivelyArray[0].location.lng}`,
            lat: `${this.searchExtensivelyArray[0].location.lat}`,
            alt: 1,
            text: this.searchExtensivelyArray[0].name
          }
        })
      }
    },
    searchExtensivelyChange () {
      if (this.searchExtensivelyValue == '') {
        this.searchExtensivelyValBoxShow = false
        this.isShowClearBtn = false
        this.searchExtensivelyArray = []
      } else {
        this.searchExtensivelyValBoxShow = true
        this.isShowClearBtn = true
        this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
      }
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'searchLayer',
        type: 'VectorLayer'
      })
    },
    searchExtensivelyVlaClick (item) {
      this.searchExtensivelyValBoxShow = false
      this.searchExtensivelyValue = item.name
      this.$EventBus.$emit('toPosition', {
        siteJd: `${item.location.lng}`,
        siteWd: `${item.location.lat}`,
        siteGd: 200
      })
      this.$EventBus.$emit('mapClearLayer', {
        layerName: 'searchLayer',
        type: 'VectorLayer'
      })
      this.$EventBus.$emit('layerPointAdd', {
        layerName: 'searchLayer',
        type: 'label',
        params: {
          lng: `${item.location.lng}`,
          lat: `${item.location.lat}`,
          alt: 1,
          text: item.name
        }
      })
      this.$EventBus.$emit('layerPointAdd', {
        layerName: 'searchLayer',
        type: 'billboard',
        params: {
          lng: `${item.location.lng}`,
          lat: `${item.location.lat}`,
          alt: 1,
          url: '/img/icon/location.png'
        }
      })
    },
    searchExtensivelyFocus () {
      this.searchExtensivelyValBoxShow = true
      this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
    },
    clearSearchValue () {
      this.searchExtensivelyValue = ''
      this.searchExtensivelyChange()
    }
  },
  destroyed () {
    this.$store.commit('SET_VIDEOROWCLICKPOPUP', false)
    this.$store.commit('SET_VIDEOLISTPOPUP', false)
    this.$EventBus.$emit('mapRemoveLayer', {
      layerName: 'carLayers',
      type: 'VectorLayer'
    })
    this.$EventBus.$emit('mapRemoveLayer', {
      layerName: 'policeMonitoringLayers',
      type: 'VectorLayer'
    })
    this.$EventBus.$emit('mapRemoveLayer', {
      layerName: 'polylineLayer',
      type: 'VectorLayer'
    })
    this.$EventBus.$emit('mapRemoveLayer', {
      layerName: 'searchLayer',
      type: 'VectorLayer'
    })
    if (tc && tc != null && tc != undefined) {
      tc.pause()
      tc.removeTrack(track)
    }
    clearInterval(policeTimeOut)
    window.removeEventListener('resize', this.setTableHeight)
    this.$parent.$parent.resize('0px')
  }
}
</script>
<style scoped lang="scss">
.container {
    position: relative;
  position: relative;
  width: 100%;
  height: 100%;
  &-content {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    color: #fff;
    background: $bg-color;
    &-content {
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 100%;
        color: #fff;
        background: $bg-color;
    .switch-box {
      padding: 6px;
      // background: blue;
      display: flex;
      align-items: center;
      justify-content: space-around;
        .switch-box {
            padding: 6px;
            // background: blue;
            display: flex;
            align-items: center;
            justify-content: space-around;
            &>div {
                flex: 1;
            }
        }
        .list-show {
            position: relative;
            height: calc(100% - 50px);
            .search-box {
                padding: 6px;
                padding-top: 0;
                height: 46px;
                display: flex;
                align-items: center;
                input {
                    flex: 1;
                    height: 100%;
                    font-size: 18px;
                    text-indent: 1em;
                    color: #ffffff;
                    background-color: rgba(24, 79, 202, 0.6);
                    // border: 1px solid rgb(0, 92, 169);
                    border: 1px solid rgb(24, 79, 202);
                }
                input:focus {
                    outline: none;
                }
                input::-webkit-input-placeholder {
                    color: rgba(238, 238, 238, 0.7);
                }
            }
            .list {
                height: calc(100% - 48px);
                display: flex;
                flex-direction: column;
                .pages {
                    height: 40px;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                }
                .state-box {
                    width: 20px;
                    height: 20px;
                    line-height: 20px;
                    text-align: center;
                    margin: 0 auto;
                    border-radius: 50%;
                    background-color: #adadad;
                }
                .online {
                    background-color: #4ccc7d;
                }
            }
            :deep(.el-table td.el-table__cell div) {
                overflow: hidden;
                white-space: nowrap;
                text-overflow: ellipsis;
            }
            :deep(.el-main) {
                padding: 0;
                width: 100%;
                overflow: hidden !important;
            }
        }
        .track-box {
            height: calc(100% - 50px);
            .back-btn {
                position: relative;
                height: 42px;
                line-height: 42px;
                text-align: center;
                color: #fff;
                border-bottom: 1px solid #fff;
                cursor: pointer;
            }
            .back-btn::before {
                content: '\e6ea';
                font-family: element-icons;
                height: 28px;
                line-height: 28px;
                color: #fff;
                position: absolute;
                top: 4px;
                left: 8px;
            }
            .back-btn:hover::before {
                color: #fff;
            }
            ul {
                margin: 0;
                padding: 0;
            }
            li {
                margin: 0;
                padding: 0 4px;
                list-style: none;
                height: 42px;
                line-height: 42px;
                display: flex;
                color: #fff;
                border-bottom: 1px solid #fff;
                &>div {
                    text-align: center;
                }
                &>div:first-child {
                    flex: 2;
                }
                &>div:last-child {
                    flex: 6;
                    &>div {
                        width: 100% !important;
                    }
                }
            }
            li:last-child {
                text-align: center;
                position: relative;
                .el-button {
                    position: absolute;
                    top: 0;
                    left: 0;
                    right: 0;
                    bottom: 0;
                    margin: auto;
                    padding: 0 !important;
                    width: 68px;
                    height: 32px;
                    line-height: 32px;
                }
            }
        }
      &>div {
        flex: 1;
      }
    }
    .search-content {
        position: absolute;
        position: fixed;
        z-index: 99;
        left: 760px;
        top: 40px;
        width: 460px;
        height: 36px;
    .list-show {
      position: relative;
      height: calc(100% - 50px);
      .search-box {
        padding: 6px;
        padding-top: 0;
        height: 46px;
        display: flex;
        align-items: center;
        input {
            flex: 1;
            width: 400px;
            height: 100%;
            font-size: 18px;
            text-indent: 1em;
            color: #ffffff;
            background-color: rgba(24, 79, 202, 0.75);
            border: 1px solid rgb(0, 92, 169);
            border-radius: 20px 0 0 20px;
            vertical-align: top;
          flex: 1;
          height: 100%;
          font-size: 18px;
          text-indent: 1em;
          color: #ffffff;
          background-color: rgba(24, 79, 202, 0.6);
          // border: 1px solid rgb(0, 92, 169);
          border: 1px solid rgb(24, 79, 202);
        }
        input:focus {
            outline: none;
          outline: none;
        }
        input::-webkit-input-placeholder {
            color: rgba(238, 238, 238, 0.7);
          color: rgba(238, 238, 238, 0.7);
        }
      }
        .clear {
            position: absolute;
            top: 0;
            right: 70px;
            cursor: pointer;
            img {
                width: 16px;
                height: 16px;
                margin-top: 10px;
            }
        }
        button {
            font-size: 24px;
            font-weight: 700;
            width: 60px;
            height: 100%;
            background-color: $table-body-tr-n-color;
            color: #fff;
            border: 1px solid rgb(0, 92, 169);
            cursor: pointer;
            border-radius: 0 20px 20px 0;
        }
        button:active {
            background-color: $table-body-tr-2n-color;
            border: 1px solid rgb(0, 92, 169);
        }
    }
    .searchExtensively-val-box {
      .list {
        height: calc(100% - 48px);
        display: flex;
        flex-direction: column;
        position: absolute;
        top: 80px;
        left: 760px;
        width: 380px;
        max-height: 160px;
        text-align: left;
        color: #fff;
        background: $el-dialog-bg-color;
        z-index: 1111;
        border-radius: 10px;
        .pages {
          height: 40px;
          display: flex;
          align-items: center;
          justify-content: center;
        }
        .state-box {
          width: 20px;
          height: 20px;
          line-height: 20px;
          text-align: center;
          margin: 0 auto;
          border-radius: 50%;
          background-color: #adadad;
        }
        .online {
          background-color: #4ccc7d;
        }
      }
      :deep(.el-table td.el-table__cell div) {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
      }
      :deep(.el-main) {
        padding: 0;
        width: 100%;
        overflow: hidden !important;
      }
    }
    .track-box {
      height: calc(100% - 50px);
      .back-btn {
        position: relative;
        height: 42px;
        line-height: 42px;
        text-align: center;
        color: #fff;
        border-bottom: 1px solid #fff;
        cursor: pointer;
      }
      .back-btn::before {
        content: '\e6ea';
        font-family: element-icons;
        height: 28px;
        line-height: 28px;
        color: #fff;
        position: absolute;
        top: 4px;
        left: 8px;
      }
      .back-btn:hover::before {
        color: #fff;
      }
      ul {
        margin: 0;
        padding: 0;
      }
      li {
        margin: 0;
        padding: 0 4px;
        list-style: none;
        height: 42px;
        line-height: 42px;
        display: flex;
        color: #fff;
        border-bottom: 1px solid #fff;
        &>div {
            height: 100%;
            overflow-y: auto;
            div {
                padding: 0 10px;
                line-height: 36px;
                cursor: pointer;
            }
          text-align: center;
        }
        &>div:first-child {
          flex: 2;
        }
        &>div:last-child {
          flex: 6;
          &>div {
            width: 100% !important;
          }
        }
      }
      li:last-child {
        text-align: center;
        position: relative;
        .el-button {
          position: absolute;
          top: 0;
          left: 0;
          right: 0;
          bottom: 0;
          margin: auto;
          padding: 0 !important;
          width: 68px;
          height: 32px;
          line-height: 32px;
        }
      }
    }
  }
  .search-content {
    position: absolute;
    position: fixed;
    z-index: 99;
    left: 760px;
    top: 40px;
    width: 460px;
    height: 36px;
    input {
      flex: 1;
      width: 400px;
      height: 100%;
      font-size: 18px;
      text-indent: 1em;
      color: #ffffff;
      background-color: rgba(24, 79, 202, 0.75);
      border: 1px solid rgb(0, 92, 169);
      border-radius: 20px 0 0 20px;
      vertical-align: top;
    }
    input:focus {
      outline: none;
    }
    input::-webkit-input-placeholder {
      color: rgba(238, 238, 238, 0.7);
    }
    .clear {
      position: absolute;
      top: 0;
      right: 70px;
      cursor: pointer;
      img {
        width: 16px;
        height: 16px;
        margin-top: 10px;
      }
    }
    button {
      font-size: 24px;
      font-weight: 700;
      width: 60px;
      height: 100%;
      background-color: $table-body-tr-n-color;
      color: #fff;
      border: 1px solid rgb(0, 92, 169);
      cursor: pointer;
      border-radius: 0 20px 20px 0;
    }
    button:active {
      background-color: $table-body-tr-2n-color;
      border: 1px solid rgb(0, 92, 169);
    }
  }
  .searchExtensively-val-box {
    display: flex;
    flex-direction: column;
    position: absolute;
    top: 80px;
    left: 760px;
    width: 380px;
    max-height: 160px;
    text-align: left;
    color: #fff;
    background: $el-dialog-bg-color;
    z-index: 1111;
    border-radius: 10px;
    overflow: hidden;
    &>div {
      height: 100%;
      overflow-y: auto;
      div {
        padding: 0 10px;
        line-height: 36px;
        cursor: pointer;
      }
    }
  }
}
</style>