tongshanglei 3 years ago
parent
commit
a438ed4f69
5 changed files with 1623 additions and 1381 deletions
  1. 1 1
      src/router/index.js
  2. 249 862
      src/views/map/routeMap.vue
  3. 0 518
      src/views/map/routeMap_old.vue
  4. 985 0
      src/views/map/routeMap_old1.vue
  5. 388 0
      src/views/screen/index.scss

+ 1 - 1
src/router/index.js

@@ -32,7 +32,7 @@ export const constantRoutes = [
     children: [
       {
         path: 'maphydraulic',
-        component: () => import('@/views/device/maintenance'),
+        component: () => import('@/views/map/routeMap.vue'),
         name: 'Maphydraulic',
         meta: { title: '泵设备分布图', icon: 'el-icon-location', affix: true }
       }

File diff suppressed because it is too large
+ 249 - 862
src/views/map/routeMap.vue


+ 0 - 518
src/views/map/routeMap_old.vue

@@ -1,518 +0,0 @@
-<template>
-  <baidu-map class="bm-view" :center="center" :zoom="zoom" @ready="init">
-    <bm-map-type :map-types="['BMAP_NORMAL_MAP', 'BMAP_HYBRID_MAP']" anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-map-type>
-    <bm-control :offset="searchControlOffset">
-      <div id="searchbox">
-        <div id="searchbox-container">
-          <div id="sole-searchbox-content" class="searchbox-content">
-            <input
-              id="sole-input"
-              class="searchbox-content-common"
-              v-model="queryParam.device_number"
-              type="text"
-              name="word"
-              autocomplete="off"
-              maxlength="256"
-              placeholder="请输入设备号"
-              @change="startSearch"
-              value
-            />
-          </div>
-        </div>
-        <el-button type="info" id="search-button" @click="startSearch" >搜索</el-button>
-        <el-button type="info" id="search-button" @click="startSearch" >刷新</el-button>
-      </div>
-    </bm-control>
-    <bm-control anchor="BMAP_ANCHOR_TOP_RIGHT" :offset="listControlOffset">
-      <el-tabs type="border-card" @tab-click="clickTab" v-model="activeName">
-        <el-tab-pane label="设备列表" name="deviceList">
-            <div id="student-container">
-              <el-table
-                class="ontop-table"
-                ref="singleTable"
-                :data="data"
-                @row-click="clickStudentRow"
-                v-loading="loading"
-                highlight-current-row
-                height="440px"
-                style="width: 100%">
-                <el-table-column
-                  type="index"
-                  width="40"
-                  align="center">
-                </el-table-column>
-               
-                <el-table-column
-                  property="imei"
-                  align="center"
-                  label="设备号">
-                  <template slot-scope="scope">
-                     {{ scope.row.imei  ||  scope.row.rfid}}
-                  </template>
-                </el-table-column>
-              </el-table>
-              <el-pagination
-              small
-              background
-              class="pagination-container"
-              hide-on-single-page
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
-              :current-page="paginate.current"
-              :page-sizes="paginate.sizes"
-              :page-size="paginate.limit"
-              :pager-count="5"
-              layout="slot, prev, pager, next, total"
-              :total="paginate.total"/>
-            </div>
-        </el-tab-pane>
-        <el-tab-pane label="告警列表" name="alarmList">
-            <div id="student-container">
-              <el-table
-                class="ontop-table"
-                ref="singleTable"
-                v-loading="loading"
-                :data="alarm_data"
-                @row-click="clickStudentRow"
-                highlight-current-row
-                height="440px"
-                style="width: 100%">
-                <el-table-column
-                  type="index"
-                  width="40"
-                  align="center">
-                </el-table-column>
-               <el-table-column
-                  property="imei"
-                  align="center"
-                  label="设备号">
-                  <template slot-scope="scope">
-                     {{   scope.row.imei || scope.row.rfid}}
-                  </template>
-                </el-table-column>
-              </el-table>
-              <el-pagination
-              small
-              background
-              class="pagination-container"
-              hide-on-single-page
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
-              :current-page="paginate.current"
-              :page-sizes="paginate.sizes"
-              :page-size="paginate.limit"
-              :pager-count="5"
-              layout="slot, prev, pager, next, total"
-              :total="paginate.total"/>
-            </div>
-        </el-tab-pane>
-      </el-tabs>
-     
-    </bm-control>
-    <!-- <bm-marker :position="{lng: 120.197113, lat: 30.196912}"  @click="infoWindowOpen" :icon="{url: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/student.png',imageSize:{width:36, height: 36}, size: {width:150, height: 150}}"></bm-marker> -->
-    <!-- <bm-info-window :position="{lng: 120.197113, lat: 30.196912}" :show="show" @close="infoWindowClose" @open="infoWindowOpen">我爱北京天安门</bm-info-window> -->
-      <rfid-dialog
-        :displayVisible="formVisible"
-         v-if="formVisible"
-        @formCancel="closeDialog"
-        :activeRfid="currentActiveRfid"
-      />
-      <gps-dialog
-        v-if="gpsFormVisible"
-        :displayVisible="gpsFormVisible"
-        @formCancel="closeGpsDialog"
-        :activeRfid="currentActiveRfid"
-      />
-       <user-info-dialog
-        v-if="userFormVisible"
-        :displayVisible="userFormVisible"
-        @formCancel="closeUserDialog"
-        :userId="currentUserId"
-      />
-     <!-- 楼层平面图 -->
-        <!-- <el-dialog :title="currentBuildingInfo.name" fullscreen :visible.sync="visibleFloorMap" >
-            <floor-map ref="floor_map" :buildingId="currentBuildingInfo.id" :studentId="currentStudentInfo.id"/>
-        </el-dialog> -->
-  </baidu-map>
-    
-    
-</template>
-
-<script>
-import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
-import rfidDialog from "./rfidRouteDialog";
-import gpsDialog from "./gpsRouteDialog";
-import userInfoDialog from "./userInfoDialog";
-
-import $ from "jquery";
-export default {
-  mixins: [rlListOperate],
-  components:{rfidDialog,gpsDialog,userInfoDialog},
-  data() {
-    return {
-      activeName: 'deviceList',
-      loading: false,
-      center: '',
-      url:'map/queryDeviceList',
-      alarm_data:[],
-      currentUserId:'',
-      currentActiveRfid:'',
-      formVisible: false,
-      searchControlOffset:{},
-      listControlOffset:{},
-      zoom: 13,
-      mapData: [],
-      show: false,
-      map: null,
-      infoBox: null,
-      content: "",
-      opts: null,
-      queryParam:{
-        device_number:''
-      },
-      currentBuildingInfo: {}, // 当前建筑信息
-      currentStudentInfo:{},
-      visibleFloorMap: false, // 显示楼层平面图
-      gpsFormVisible:false,
-      userFormVisible:false,
-      markerIcons: { // 覆盖物图标
-                student: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/student.png', 
-                student_alarm: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/student_alarm.png', 
-                station: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/polyline_station.png', 
-                offline_station:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/offline_station.png',
-                building: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/building.png', 
-                school: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/school.png',  
-      },
-      // routeData:[],
-      // stationData:[],
-      // buildingnData:[],
-      currentRow: null,
-      alarmReasonList:[],
-    };
-  },
-  mounted(){
-    let topTables = document.getElementsByClassName('ontop-table');
-    this.alarmReasonList=this.$appConfig["alarmReasonList"];
-    topTables.forEach((item,index) => {
-      item.onwheel = function(e) {
-        e.stopPropagation();
-      }
-    })
-
-    let params = this.$router.currentRoute.query 
-    this.queryParam.device_number=params.device_number
-  },
-  created(){
-    window.showRfidRoute=this.showRfidRoute;
-    window.showGpsRoute=this.showGpsRoute;
-    window.showRoomAddress=this.showRoomAddress;
-    window.handleAlarm=this.handleAlarm;
-    window.shwoAlarmRecord=this.shwoAlarmRecord;
-    window.showUserInfo=this.showUserInfo;
-     
-  },
-  methods: {
-    init({ BMap, map }) {
-      this.map = map;
-      // 初始化地图,设置中心点坐标
-      
-      this.searchControlOffset=new BMap.Size(20, 20)
-      this.listControlOffset=new BMap.Size(0, 40)
-      // 添加鼠标滚动缩放
-      map.enableScrollWheelZoom();
-      //查询学生
-      
-      // this.queryLocationStationList()
-      // this.queryKqBuildingList()
-      this.queryLocationList()
-      // this.queryAlarmList()
-      
-    },
-
-    infoWindowClose () {
-      this.show = false
-    },
-    infoWindowOpen () {
-      this.show = true
-    },
-    addMarkerPoint(data,type) {
-      var myIcon;
-      Object.keys(data).forEach((k)=>{
-
-        let item=data[k]
-        var pt = new BMap.Point(item.longitude, item.latitude);
-        if(type=='student' && item.alarm_state>0){
-          myIcon = new BMap.Icon(this.markerIcons['student_alarm'], new BMap.Size(32, 32));
-          myIcon.setImageSize(new BMap.Size(32, 32));
-        }else{
-          myIcon = new BMap.Icon(this.markerIcons[type], new BMap.Size(32, 32));
-          myIcon.setImageSize(new BMap.Size(32, 32));
-        }
-        if(type=='station' && !item.online_time){
-          myIcon = new BMap.Icon(this.markerIcons['offline_station'], new BMap.Size(32, 32));
-          myIcon.setImageSize(new BMap.Size(32, 32));
-        }
-        var marker = new BMap.Marker(pt, {
-          icon: myIcon
-        }); // 创建标注
-      
-        let that=this
-        marker.addEventListener("click", function(){     
-          let content=that.createMarkerContent(item);
-          var opts = {
-            width : 320,     // 信息窗口宽度
-            enableAutoPan:false
-          }
-          var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象      
-          this.map.openInfoWindow(infoWindow, pt); //开启信息窗口
-        });
-        this.map.addOverlay(marker);
-      })
-    },
-    handleAlarm(imei){
-      // const query = {active_rfid:active_rfid}
-      // this.$http.post('AlarmRecords', query).then(response => {
-          this.$router.push({ path:'/alarm/alarmDevice',query:{imei}})
-      // })
-    },
-    shwoAlarmRecord(imei){
-      // const query = {active_rfid:active_rfid}
-      // this.$http.post('AlarmRecords', query).then(response => {
-          this.$router.push({ path:'/alarm/AlarmReport',query:{imei}})
-      // })
-    },
-    showRfidRoute(val){
-      this.currentActiveRfid=val
-      this.formVisible=true
-    },
-    showGpsRoute(val){
-      this.currentActiveRfid=val
-      this.gpsFormVisible=true
-    },
-    closeGpsDialog(){
-      this.gpsFormVisible=false
-    },
-    showUserInfo(val){
-      this.currentUserId=val
-      this.userFormVisible=true
-    },
-    closeUserDialog(){
-      this.userFormVisible=false
-    },
-    showRoomAddress(station_mac,active_rfid){
-      const query={station_mac:station_mac,active_rfid:active_rfid}
-       this.$http.get('map/queryBuildingInfo', {params: query}).then(resp => {
-            this.currentBuildingInfo = resp.data.build_info
-            this.currentStudentInfo=resp.data.student_info
-            this.visibleFloorMap = true;    
-      })
-        
-    },
-    addSingleMarker(data){
-        // 如果没有经纬度
-        if (!data.latitude || !data.longitude) {
-          this.$message.warning('暂无定位数据');
-          // return false;
-        }
-
-        var pt = new BMap.Point(data.longitude, data.latitude);
-        var opts = {
-            width : 320,     // 信息窗口宽度
-            enableAutoPan:false
-        }
-        let studentWindowContent=this.createMarkerContent(data)
-        var infoWindow = new BMap.InfoWindow(studentWindowContent,opts);  // 创建信息窗口对象 
-        this.map.openInfoWindow(infoWindow, pt); //开启信息窗口
-        this.map.centerAndZoom(pt,19);
-    },
-    createMarkerContent(data){
-      let address
-      if(data['loc_mode'] && data['loc_mode'].toLowerCase() =='wifi'){
-            address=data['address']
-            
-      }else{
-            var myGeo = new BMap.Geocoder();      
-                // 根据坐标得到地址描述    
-            myGeo.getLocation(new BMap.Point(data.longitude,data.latitude), function(result){          
-                address=result.address
-                $('#marker_address').text(address);
-            });
-      }
-         var content ='<div class="info_label">设备编号:' + (data.imei || data.rfid) + '</div>'
-         if(data.last_online_time){
-            content += '<div class="info_label">剩余电量:' + data.battery_level + '%</div>'
-         }else{
-            content += '<div class="info_label">剩余电量:--</div>'
-         }
-       
-        content += '<div class="info_label">定位地址:<a id="marker_address">' + address + '</a></div>' 
-         content += '<div class="info_label">定位类型:' + data.loc_mode + '</div>'
-         content += '<div class="info_label">在线时间:'+data.last_online_time+'</div>'
-        
-        if(data.alarm_state>0 && data.alarm_reason_list){
-          content += '<div class="info_label">告警标签:'
-          for (let i=0;i<data.alarm_reason_list.length;i++)
-          { 
-            // content+='<span class="el-tag el-tag--danger el-tag--small el-tag--light">'+data.alarm_reason_list[i].text+'</span> '
-            content+='<span class="el-tag el-tag--dark el-tag--small el-tag--light" style="border:0px;background-color:'+this.alarmReasonList[data.alarm_reason_list[i].value]+';">'+data.alarm_reason_list[i].text+'</span> '
-            
-          }
-          content +='</div>'
-        }
-        
-        
-        content+='<div class="handle_btn info_label">'
-        // content+='<button onclick="showRfidRoute(\''+data.rfid+'\')" class="el-button el-button--info el-button--small">RFID轨迹</button>'
-        // if(data.card_type==2){
-            content+='<button onclick="showGpsRoute(\''+data.imei+'\')" class="el-button el-button--info el-button--small">历史轨迹</button>';
-        // }
-        // if(data.station_type==3){
-        //   content+='<button id="floorMapBtn" onclick="showRoomAddress(\''+data.last_station_mac+'\',\''+data.rfid+'\')" class="el-button el-button--info el-button--small">室内地图</button>'
-        // }
-        if(data.alarm_state>0){
-          // content+='<button onclick="handleAlarm(\''+data.imei+'\')" class="el-button el-button--info el-button--small">前往处理</button>'
-          content+='<button onclick="shwoAlarmRecord(\''+data.imei+'\')" class="el-button el-button--info el-button--small">告警记录</button>'
-        }
-        content+='<button onclick="showUserInfo(\''+data.user_id+'\')" class="el-button el-button--info el-button--small">用户信息</button>'
-          
-        content+='</div>'
-          
-      return content
-    },
-    queryLocationList(){
-      const query = this.queryParam
-      this.$http.get("map/queryLocationList", { params: query }).then(response => {
-        if(response.data.length>0){
-          this.addMarkerPoint(response.data,'student');
-          let center=response.data[0]
-          // 第一个学生没有轨迹则不设置中心点
-          if (!center.longitude || !center.latitude) {
-            return false;
-          }
-          this.center = new BMap.Point(center.longitude, center.latitude);
-        }
-      })
-    },
-    queryAlarmList(){
-      const query = this.queryParam
-      this.$http.get("map/queryAlarmList", { params: query }).then(response => {
-          this.alarm_data=response.data
-      })
-    },
-    // queryLocationStationList(){
-    //   const query = { station_type: 2 }
-    //   this.$http.get("dwstation/getRangeData",{ params: query }).then(response => {
-    //     if(response.data.length>0){
-    //       this.addMarkerPoint(response.data,'station');
-    //     }
-    //   })
-    // },
-    queryKqBuildingList(){
-      this.$http.get("kqBuilding").then(response => {
-        if(response.data.length>0){
-          this.addMarkerPoint(response.data,'building');
-        }
-      })
-    },
-    
-    startSearch(){
-      this.map.clearOverlays()
-      this.getList()
-      this.queryLocationList()
-    },
-    clickStudentRow(row, column, event){
-      this.addSingleMarker(row)
-    },
-    clickTab(tab) {
-      let name = tab.name;
-      if (name == 'alarmList') {
-        this.url = 'map/queryAlarmList';
-      } else if (name == 'deviceList') {
-        this.url = 'map/queryDeviceList';
-      }
-      this.handleRefresh();
-    },
-    afterGetList() {
-      if (this.url == 'map/queryAlarmList') {
-        this.alarm_data = this.data;
-      }
-    },
-},
-  
-};
-</script>
-
-<style lang="scss" scoped>
-.bm-view {
-  width: 100%;
-  // height: 100vh;
-  height: calc(100vh - 100px);
-}
-#searchbox {
-  border-radius: 2px;
-  width: 464px;
-  position: relative;
-  z-index: 5;
-  display: flex;
-}
-#searchbox #searchbox-container {
-  display: flex;
-  position: relative;
-  z-index: 2;
-  pointer-events: auto;
-  width: 250px;
-  float: left;
-  box-sizing: border-box;
-  
-}
-#sole-searchbox-content {
-  position: relative;
-}
-.searchbox-content {
-  width: 250px;
-  border-radius: 2px 0 0 2px;
-  background: #fff;
-}
-#sole-searchbox-content #sole-input,
-#searchType {
-  box-sizing: border-box;
-  border: 0;
-  padding: 9px 0;
-  border-left: 10px solid transparent;
-  border-right: 10px solid transparent;
-  line-height: 20px;
-  font-size: 14px;
-  height: 38px;
-  color: #333;
-  position: relative;
-  border-radius: 2px 0 0 2px;
-}
-#sole-input {
-  width: 250px;
-}
-#sole-input:focus {
-  outline: none;
-}
-#student-container{
-  width:240px;
-  height: 500px;
-  background-color: #fff;
-}
-
-.app-container {
-    height: calc(100vh - 102px);
-}
-::v-deep .el-dialog__body {
-        padding: 0;
-    }
-::v-deep .info_label{
-  padding-top:5px;
-  font-size: 14px;
-}
-::v-deep .handle_btn{
-  margin-top: 10px;
-}
-#search-button{
-  margin-left:1px;
-}
-</style>

+ 985 - 0
src/views/map/routeMap_old1.vue

@@ -0,0 +1,985 @@
+<template>
+  <baidu-map class="bm-view" :center="center" :zoom="zoom" @ready="init">
+    <!-- <bml-marker-clusterer :averageCenter="true">
+      <bm-marker v-for="(marker,index) of markers" :key="index" :position="{lng: marker.position.lng, lat: marker.position.lat}"></bm-marker>
+    </bml-marker-clusterer> -->
+    <bm-map-type :map-types="['BMAP_NORMAL_MAP', 'BMAP_HYBRID_MAP']" anchor="BMAP_ANCHOR_TOP_LEFT" :offset="mapTypeControlOffset"></bm-map-type>
+    <bm-navigation anchor="BMAP_ANCHOR_TOP_LEFT" :offset="navigationControlOffset"></bm-navigation>
+
+    <bm-control anchor="BMAP_ANCHOR_TOP_LEFT" class="bottom_box" :offset="listControlOffset">
+        <div id="control-container">
+             <!-- <button @click="openDistanceTool">开启测距</button> -->
+             <!-- <div class="head_control_time" @click="openDistanceTool">{{flash_time}}秒</div> -->
+             <!-- <div class="head_control_btn" @click="openDistanceTool"><i class="el-icon-location-information"></i>跟踪</div> -->
+             <!-- <div class="head_control_btn" @click="openDistanceTool"><i class="el-icon-place"></i>轨迹</div> -->
+             
+             <div class="head_control_btn" @click="openDistanceTool"><i class="el-icon-paperclip"></i>测距</div>
+             <div class="head_control_select" >
+                <el-radio-group v-model="route_radio" @change="RouteTypeChange">
+                  <el-radio :label="1">轨迹回放</el-radio>
+                  <el-radio :label="2">实时监控</el-radio>
+                 </el-radio-group>
+             </div>
+        </div>
+    </bm-control>
+    <!-- 地图右边控件 设备列表 -->
+    <bm-control anchor="BMAP_ANCHOR_TOP_RIGHT" class="right_box" :offset="listControlOffset">
+      <div id="right-search-box">
+        <div class="search_title">
+           <div v-if="queryRouteParam.imei != ''">{{queryRouteParam.imei}}</div>
+          <div v-else>请先选择一个设备</div>
+        </div>
+        <div class="search_content" v-if="showSearchContent">
+            <el-select v-model="queryRouteInterval" size="mini" @change="handleTimeChange" class="time_select">
+              <el-option
+                v-for="item in timePickerOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>    
+            <div class="search_btn" @click="searchRoute" v-show="showSearchBtn"><i class="el-icon-search"></i>&nbsp;搜索</div>
+            <div class="search_btn" @click="playRoute" v-show="showSearchBtn"><i class="el-icon-video-play"></i>&nbsp;播放</div>
+            <div class="search_btn" @click="pauseRoute" v-show="showPauseBtn"><i class="el-icon-video-pause"></i>&nbsp;暂停</div>
+            <div class="search_btn" @click="keepOnRoute" v-show="showkeepOnBtn"><i class="el-icon-video-play"></i>&nbsp;继续</div>
+            <div class="search_btn" @click="stopRoute" v-show="!showSearchBtn"><i class="el-icon-switch-button"></i>&nbsp;停止</div>
+            <div v-show="showTimeRange">
+              <el-date-picker
+                v-model="queryRouteParam.time_range"
+                class="time_range_select"
+                type="datetimerange"
+                size="mini"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期">
+              </el-date-picker>
+            </div>
+            <el-select v-model="move_speed" size="mini" class="time_select">
+              <el-option
+                v-for="item in speedOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>    
+        </div>
+        <div class="search_content" v-else>
+            <div class="interval_title">每隔</div>
+            <el-select v-model="queryInterval" size="mini" class="interval_select">
+              <el-option
+                v-for="item in intervalPickerOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>    
+            <div class="search_btn" @click="FreshMonitorRoute"><i class="el-icon-refresh-right"></i>&nbsp;刷新</div>
+            <div class="interval_title">计时</div>
+             <div class="interval_content">{{countdownInterval}}秒</div>
+            <!-- <div class="search_btn btn_onlyred" @click="StartCountDown"><i class="el-icon-caret-right"></i>&nbsp;开始</div> -->
+            <div :class="[StartBtnReadOnly==true ?'search_btn btn_onlyred':'search_btn']" @click="StartCountDown"><i class="el-icon-caret-right"></i>&nbsp;开始</div>
+            <div :class="[StopBtnReadOnly==true ?'search_btn btn_onlyred':'search_btn']" @click="StopCountDown"><i class="el-icon-switch-button"></i>&nbsp;停止</div>
+
+          
+        </div>
+      </div>
+      <el-button id="toggleListBtn" @click="toggleTabs" :icon="'el-icon-arrow-'+toggleIcon"></el-button>
+      <el-tabs type="card" @tab-click="clickTab" v-model="activeName" v-show="showTabs">
+        <el-tab-pane label="我的设备" name="deviceList">
+            <div id="student-container">
+              <el-table class="ontop-table"  ref="multipleTable" row-key="id" :data="data"  @row-click="currentRowClick" highlight-current-row>
+                  <!-- <el-table-column type="selection" width="50" align="center" reserve-selection></el-table-column> -->
+                  <el-table-column prop="status_icon" align="center"  label="类型" width="45">
+                    <template slot-scope="scope">
+                      <img :src="statusIcons[ scope.row.status_icon]" class="status_img">
+                      
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="imei" align="center"  label="设备号">
+                    <template slot-scope="scope">
+                      {{ scope.row.imei  ||  scope.row.rfid}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="status_text" label="状态" align="center"  width="60"></el-table-column>
+              </el-table>
+              <el-pagination
+                small
+                background
+                class="pagination-container"
+                hide-on-single-page
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :current-page="paginate.current"
+                :page-sizes="paginate.sizes"
+                :page-size="paginate.limit"
+                :pager-count="5"
+                layout="slot, prev, pager, next, total"
+                :total="paginate.total"/>
+            </div>
+        </el-tab-pane>
+      </el-tabs>
+    </bm-control>
+    <!-- 地图底部控件 -->
+    <bm-control anchor="BMAP_ANCHOR_BOTTOM_LEFT" class="bottom_box" :offset="listControlOffset">
+      <el-button id="bottomToggleBtn" @click="bottomToggleTabs" :icon="'el-icon-arrow-'+BotToggleIcon"></el-button>
+      <div id="route-container" v-show="bottomShowTabs">
+        <div class="route_content" >
+          <el-table :data="Routedata" class="route_table" v-show="showRouteContent" @row-click="clickRouteRow" highlight-current-row>
+              <el-table-column type="index" width="50"> </el-table-column>
+              <el-table-column prop="SignalType" align="center"  label="定位类型"></el-table-column>
+              <el-table-column prop="PassTime" align="center" label="定位时间"></el-table-column>
+              <el-table-column prop="BatteryLevel" align="center" label="电量"></el-table-column>
+              <!-- <el-table-column prop="address" align="center"  label="经纬度"></el-table-column> -->
+              <el-table-column label="经纬度" align="center"  >
+                  <template slot-scope="scope">
+                    <div> {{scope.row.Longitude}},{{scope.row.Latitude}}
+                      <span v-if="scope.row.Address">@{{scope.row.Address}}</span>
+                    </div> 
+                  </template>
+              </el-table-column>
+            <!-- <el-table-column prop="address" align="center"  label="查看"></el-table-column> -->
+          </el-table>
+        </div>
+      </div>
+    </bm-control>
+
+     <bml-lushu
+        @stop="resetRoute"
+        :path="path"
+        :icon="icon"
+        :play="playState"
+        :speed="move_speed"
+        :rotation="true">
+      </bml-lushu>
+  </baidu-map>
+    
+    
+</template>
+
+<script>
+import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
+import DistanceTool from '@/utils/DistanceTool'
+import {BmlMarkerClusterer} from 'vue-baidu-map'
+import userInfoDialog from "./userInfoDialog";
+import {BmlLushu} from 'vue-baidu-map'
+import $ from "jquery";
+export default {
+  mixins: [rlListOperate],
+  components:{BmlMarkerClusterer,userInfoDialog,BmlLushu},
+  data() {
+    return {
+      playState: false,
+      showSearchContent:true,
+      route_radio:1,
+      pointArr:[],
+      path: [],
+      move_speed:200,
+      icon: {
+        url: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/car/car_p_3.png',
+        size: {width: 36, height: 36},
+        opts: {anchor: {width: 18, height:13}}
+      },
+      activeName: 'deviceList',
+      loading: false,
+      center: '杭州市滨江区',
+      url:'map/queryDeviceList',
+      alarm_data:[],
+      StartBtnReadOnly:false,
+      StopBtnReadOnly:true,
+      infoWindow:{},
+      currentUserId:'',
+      showSearchBtn:true,
+      showPauseBtn:false,
+      showkeepOnBtn:false,
+      formVisible: false,
+      mapTypeControlOffset:{},
+      navigationControlOffset:{},
+      showTabs:true,
+      bottomShowTabs:false,
+      showRouteContent:true,
+      currentShowTab:'realinfo',
+      listControlOffset:{},
+      toggleIcon: 'right',
+      BotToggleIcon: 'up',
+      zoom: 13,
+      mapData: [],
+      show: false,
+      map: null,
+      markers:[],
+      pointArr:[],
+      content: "",
+      opts: null,
+      queryParam:{
+        limit:15
+      },
+
+      userFormVisible:false,
+      statusIcons:{
+        stop:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/stop.png',
+        alarm:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/alarm.png',
+        offline:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/offline.png',
+        online:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/online.png',
+        run:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/run.png',
+        unuse:'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/icon/unuse.png',
+      },
+      markerIcons: { // 覆盖物图标
+                car: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/catch_fd/car/car_2_0.png',
+                origin: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/origin_icon.png', 
+                terminus: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/terminus_icon.png', 
+                alarm: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/alarm_icon.png', 
+                // node_gps: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/node_gps.png', 
+                node: 'https://rlfd.oss-cn-hangzhou.aliyuncs.com/wxt_school/node_wifi.png',  
+
+      },
+      currentRow: null,
+      alarmReasonList:[],
+      queryInterval:15,
+      countdownInterval:15,
+      intervalPickerOptions:[{
+          value: 5,
+          label: '5秒'
+        },{
+          value: 8,
+          label: '8秒'
+        },{
+          value: 10,
+          label: '10秒'
+        },{
+          value: 12,
+          label: '12秒'
+        },{
+          value: 15,
+          label: '15秒'
+        },{
+          value: 20,
+          label: '20秒'
+        },{
+          value: 25,
+          label: '25秒'
+        }, {
+          value: 30,
+          label: '30秒'
+      }],
+      timePickerOptions: [{
+          value: 3*3600,
+          label: '3小时内'
+        }, {
+          value: 6*3600,
+          label: '6小时内'
+        }, {
+          value: 12*3600,
+          label: '12小时内'
+        }, {
+          value: 24*3600,
+          label: '24小时内'
+        }, {
+          value: 48*3600,
+          label: '3天内'
+        }, {
+          value: 0,
+          label: '自定义'
+      }],
+      startDateTime:'',
+      queryRouteInterval:6*3600,
+      queryRouteParam: {
+        imei:'',
+        time:'',
+        time_range:'',
+      },
+      showTimeRange:false,
+      speedOptions:[{
+          value: 50,
+          label: '很慢(50)'
+        }, {
+          value: 100,
+          label: '慢速(100)'
+        }, {
+          value: 200,
+          label: '一般(200)'
+        }, {
+          value: 500,
+          label: '比较快(500)'
+        }, {
+          value: 1000,
+          label: '很快(1000)'
+      }, {
+          value: 5000,
+          label: '超快(5000)'
+      }],
+      
+      trackMarkers:[],
+      Routedata:[],
+    };
+  },
+  unmount () {
+    distanceTool && distanceTool.close()
+  },
+  mounted(){
+    let topTables = document.getElementsByClassName('ontop-table');
+    let routeTables = document.getElementsByClassName('route_table');
+    this.alarmReasonList=this.$appConfig["alarmReasonList"];
+    topTables.forEach((item,index) => {
+      item.onwheel = function(e) {
+        e.stopPropagation();
+      }
+    })
+    routeTables.forEach((item,index) => {
+      item.onwheel = function(e) {
+        e.stopPropagation();
+      }
+    })
+    let params = this.$router.currentRoute.query 
+    // this.queryParam.device_number=params.device_number
+  },
+  created(){
+    window.showUserInfo=this.showUserInfo;
+  },
+  methods: {
+    init({ BMap, map }) {
+      this.map = map;
+      // 初始化地图,设置中心点坐标
+
+      this.mapTypeControlOffset= new BMap.Size(10, 40)
+      this.navigationControlOffset=new BMap.Size(10, 80)
+      this.listControlOffset=new BMap.Size(0, 0)
+     //开始测量
+     this.distanceTool = new BMapLib.DistanceTool(map);
+      // 添加鼠标滚动缩放
+      map.enableScrollWheelZoom();
+
+      
+    },
+    
+    openDistanceTool (e) {
+      const {distanceTool} = this
+      distanceTool && distanceTool.open()
+    },
+
+
+    showUserInfo(val){
+      this.currentUserId=val
+      this.userFormVisible=true
+    },
+    closeUserDialog(){
+      this.userFormVisible=false
+    },
+  
+    currentRowClick(val){
+       this.map.clearOverlays()
+      this.addSingleMarker(val)
+    },
+  
+    addSingleMarker(data){
+      let that=this
+      // 如果没有经纬度
+      if (!data.latitude || !data.longitude) {
+          this.queryRouteParam.imei='';
+          this.$message.warning('暂无定位数据');
+          return false;
+      }
+      this.queryRouteParam.imei=data.imei;
+      var pt = new BMap.Point(data.longitude, data.latitude);
+      var opts = {
+          width : 320,     // 信息窗口宽度
+          enableAutoPan:false
+      }
+      var  myIcon = new BMap.Icon(this.markerIcons['car'], new BMap.Size(32, 32));
+      myIcon.setImageSize(new BMap.Size(32, 32));
+      var marker = new BMap.Marker(pt, {
+          icon: myIcon
+      }); // 创建标注
+
+      let windowContent=this.createMarkerContent(data)
+      this.infoWindow = new BMap.InfoWindow(windowContent,opts);  // 创建信息窗口对象 
+
+      marker.addEventListener("click", function(){     
+          this.map.openInfoWindow(that.infoWindow, pt); //开启信息窗口
+      });
+      this.map.addOverlay(marker);
+
+      this.map.openInfoWindow(this.infoWindow, pt); //开启信息窗口
+      this.map.centerAndZoom(pt,13);
+    },
+    createMarkerContent(data){
+      let address
+      if(data['loc_mode'] && data['loc_mode'].toLowerCase() =='rfid'){
+            address=data['address']
+      }else{
+          var myGeo = new BMap.Geocoder();      
+          // 根据坐标得到地址描述    
+          myGeo.getLocation(new BMap.Point(data.longitude,data.latitude), function(result){          
+              address=result.address
+              $('#marker_address').text(address);
+          });
+      }
+      var content ='<div class="info_label">设备编号:' + (data.imei || data.rfid) + '</div>'
+      if(data.online_time){
+          content += '<div class="info_label">剩余电量:' + data.battery_level + '%</div>'
+      }else{
+          content += '<div class="info_label">剩余电量:--</div>'
+      }
+      content += '<div class="info_label">定位地址:<a id="marker_address">' + address + '</a></div>' 
+      content += '<div class="info_label">定位类型:' + data.loc_mode + '</div>'
+      content += '<div class="info_label">在线时间:'+data.online_time+'</div>'
+        
+        // if(data.alarm_state>0 && data.alarm_reason_list){
+        //   content += '<div class="info_label">告警标签:'
+        //   for (let i=0;i<data.alarm_reason_list.length;i++)
+        //   { 
+        //     content+='<span class="el-tag el-tag--dark el-tag--small el-tag--light" style="border:0px;background-color:'+this.alarmReasonList[data.alarm_reason_list[i].value]+';">'+data.alarm_reason_list[i].text+'</span> '
+        //   }
+        //   content +='</div>'
+        // }
+
+      return content
+    },
+   
+    
+    clickTab(tab) {
+      let name = tab.name;
+      if (name == 'deviceList') {
+        this.url = 'map/queryDeviceList';
+      }
+      this.handleRefresh();
+    },
+    
+    toggleTabs(e) {
+            this.showTabs = !this.showTabs
+             var toggleListBtn = document.getElementById('toggleListBtn')
+              var rightSearchBox = document.getElementById('right-search-box')
+             
+             var list_container = document.getElementById('route-container')
+             var  control_container = document.getElementById('control-container')
+            
+             var bottomToggleBtn = document.getElementById('bottomToggleBtn')
+            if (this.showTabs) {
+             
+              this.toggleIcon = 'right'
+              toggleListBtn && (toggleListBtn.style.right = '310px')
+              rightSearchBox && (rightSearchBox.style.right = '310px')
+              list_container && (list_container.style.width = 'calc(100% - 310px)')
+              control_container && (control_container.style.width = 'calc(100% - 310px)')
+              bottomToggleBtn && (bottomToggleBtn.style.left = 'calc(50% - 140px)')
+            } else {
+             
+              this.toggleIcon = 'left'
+              toggleListBtn && (toggleListBtn.style.right = '0px')
+              rightSearchBox && (rightSearchBox.style.right = '0px')
+              list_container && (list_container.style.width = '100%')
+              control_container && (control_container.style.width = '100%')
+              bottomToggleBtn && (bottomToggleBtn.style.left = '50%')
+            }
+            
+    },
+    bottomToggleTabs(e) {
+            this.bottomShowTabs = !this.bottomShowTabs
+            var bottomToggleBtn = document.getElementById('bottomToggleBtn')
+            if (this.bottomShowTabs) {
+              this.BotToggleIcon = 'down'
+              bottomToggleBtn && (bottomToggleBtn.style.bottom = '195px')
+            } else {
+             
+              this.BotToggleIcon = 'up'
+              bottomToggleBtn && (bottomToggleBtn.style.bottom = '0px')
+            }
+            
+    },
+    handleTimeChange(val){
+      if(val==0){
+        this.showTimeRange=true
+      }else{
+        this.showTimeRange=false
+      }
+    },
+    searchRoute(){
+       this.playState=false
+      if(this.queryRouteParam.imei==''){
+        this.$message.error('请先选择设备');
+          return false;
+      }
+      this.queryRouteParam.time=this.queryRouteInterval
+      if(this.queryRouteParam.time==0 && this.queryRouteParam.time_range==''){
+        this.$message.error('请选择自定义时间段');
+        return false;
+      }
+      this.queryRouteGps()
+      
+    },
+    queryRouteGps(){
+      this.loading = true;
+      this.$http.get('map/queryDeviceRouteGps',{ params: this.queryRouteParam,timeout:60000}).then(res=>{
+          this.map.clearOverlays()
+          let data=[]
+          let trackLength=res.data.length
+          if(trackLength>0){
+            for (var i = 0; i < trackLength; i++){
+                let item=res.data[i]
+                item['index']=i
+                data[i]=item
+            }
+            this.DrawMapLine(data)
+          }
+          this.Routedata=data 
+          this.loading = false;
+          var bottomToggleBtn = document.getElementById('bottomToggleBtn')
+          if(!this.bottomShowTabs){
+             this.bottomShowTabs = !this.bottomShowTabs
+             this.BotToggleIcon = 'down'
+             bottomToggleBtn && (bottomToggleBtn.style.bottom = '195px')
+          }
+          
+          
+      }).catch(e => {
+        this.loading = false;
+      });
+    },
+    //播放按钮
+    playRoute(){
+      this.path=this.pointArr
+      //显示暂停 停止按钮
+      this.showSearchBtn=false
+      this.showPauseBtn=true
+      this.playState=true
+    },
+    //播放结束回调
+    resetRoute(){
+      this.showSearchBtn=true
+      this.playState=false
+      this.showPauseBtn=false
+      this.showkeepOnBtn=false
+    },
+    //暂停
+    pauseRoute(){
+      this.showkeepOnBtn=true
+      this.showPauseBtn=false
+      this.playState=false
+    },
+    //继续
+    keepOnRoute(){
+       this.showkeepOnBtn=false
+       this.showPauseBtn=true
+       this.playState=true
+    },
+    //停止
+    stopRoute(){
+      this.path=[]
+      this.showSearchBtn=true
+      this.showkeepOnBtn=false
+      this.showPauseBtn=false
+      this.playState=false
+    },
+    //监控轨迹刷新
+    FreshMonitorRoute(){
+      if(this.queryRouteParam.imei==''){
+        this.$message.error('请先选择设备');
+          return false;
+      }
+      // console.log('query');
+      var endDateTime = new Date();
+      var time = Math.round((endDateTime-this.startDateTime)/1000)
+      this.queryRouteParam.time=time
+      this.queryRouteGps()
+    },
+    //开始监控
+    StartCountDown(){
+      if(this.queryRouteParam.imei==''){
+        this.$message.error('请先选择设备');
+          return false;
+      }
+      this.StartBtnReadOnly=true
+      this.StopBtnReadOnly=false
+      this.startDateTime = new Date();
+      console.log('start',this.startDateTime)
+      this.timer= setInterval(() => {
+        this.countdownInterval--  
+        if(this.countdownInterval<0){
+          this.countdownInterval=this.queryInterval-1
+          //开始查询
+          this.FreshMonitorRoute()
+        }
+      }, 1000)
+    },
+    //停止监控
+    StopCountDown(){
+      clearInterval(this.timer);
+      this.StartBtnReadOnly=false
+      this.StopBtnReadOnly=true
+      this.countdownInterval=this.queryInterval
+    },
+
+    DrawMapLine(data){
+
+        var pointType = "node";//点类型
+        var pointLogLat = new BMap.Point(data[0].Longitude, data[0].Latitude);//终点
+        this.pointArr=[]
+        var trackCount=data.length
+        var onLineCoordinates = [];
+        for (var i = trackCount-1; i >= 0; i--)
+        {
+            //线上的点
+            pointLogLat = new BMap.Point(data[i].Longitude, data[i].Latitude);
+
+            this.pointArr.push(pointLogLat)
+            onLineCoordinates.push(pointLogLat);
+            //描点
+            if (i == 0){
+                pointType = "terminus";
+            }else if (i==(trackCount - 1)){
+                pointType = "origin";
+            }else if (data[i].AlarmType >0 ){
+                pointType = "alarm";
+            }else{
+                pointType = "node";
+            }   
+            var pointMarker = this.CreatePointMarkers(data[i], pointType);
+            this.trackMarkers.push(pointMarker);
+            
+        }
+        var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
+            scale: 0.6,//图标缩放大小
+            strokeColor:'#fff',//设置矢量图标的线填充颜色
+            strokeWeight: '2',//设置线宽
+        });
+        var icons = new BMap.IconSequence(sy, '10', '30');
+        //画线
+        var polyline = new BMap.Polyline(onLineCoordinates,{
+          enableEditing: false,//是否启用线编辑,默认为false
+          enableClicking: true,//是否响应点击事件,默认为true
+          icons:[icons],
+          strokeWeight:'4',//折线的宽度,以像素为单位
+          strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1
+          strokeColor:"blue" //折线颜色
+        });
+        this.map.addOverlay(polyline);
+        //最佳视野
+        this.map.setViewport(onLineCoordinates,{margins: [0, 200, 100,0] ,zoomFactor:-1});
+    },
+    CreatePointMarkers(pointInfo, pType)
+    {
+        // console.log(pType)
+        var _this=this
+        var trackMarker;
+        var trackPoint = new BMap.Point(pointInfo.Longitude, pointInfo.Latitude);
+
+        if(pType=='node_gps'){
+          var pointIcon = new BMap.Icon(this.markerIcons[pType], new BMap.Size(20, 20))
+          pointIcon.setImageSize(new BMap.Size(20, 20));
+
+        }else{
+          var pointIcon = new BMap.Icon(this.markerIcons[pType], new BMap.Size(27, 32));
+        }
+        // var pointIcon = new BMap.Icon(this.markerIcons[pType], new BMap.Size(27, 32));
+            //描点,创建标注 
+        pointIcon.iconAnchor = new BMap.Point(5, 5);
+        pointIcon.shadow = "";
+        trackMarker = new BMap.Marker(trackPoint, { icon: pointIcon });
+
+        if(pType=='node_gps'){
+          // trackMarker.setOffset(new BMap.Size(-1, -5));//大图标,偏移确定图片在点正上方
+        }else{
+          trackMarker.setOffset(new BMap.Size(-1, -15));//大图标,偏移确定图片在点正上方
+        }
+        
+        
+        trackMarker.addEventListener("click", function ()
+        {
+              var myGeo = new BMap.Geocoder();      
+                // 根据坐标得到地址描述    
+              myGeo.getLocation(new BMap.Point(pointInfo.Longitude,pointInfo.Latitude), function(result){     
+                          let index=pointInfo['index']     
+                          pointInfo['Address']=result.address
+                          _this.Routedata[index]=pointInfo
+                          var trackPoint = new BMap.Point(pointInfo.Longitude, pointInfo.Latitude);
+                          var content ='<p>经过时间:' + pointInfo.PassTime + '</p><p>地址:' + pointInfo.Address + '</p><p>定位类型:' + pointInfo.SignalType + '</p>'
+                          var opts = {
+                                width : 320,     // 信息窗口宽度
+                                enableAutoPan:false
+                            }
+                          var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象  
+                          _this.map.openInfoWindow(infoWindow,trackPoint);
+              });
+              // var content ='<p>经过时间:' + pointInfo.PassTime + '</p><p>地址:' + pointInfo.Address + '</p><p>定位类型:' + pointInfo.SignalType + '</p>'
+            
+            
+           
+        });
+        this.map.addOverlay(trackMarker);
+
+        return trackMarker;
+    },
+    clickRouteRow(row){
+      // console.log(row)
+      var _this=this
+      var myGeo = new BMap.Geocoder();      
+                // 根据坐标得到地址描述    
+      myGeo.getLocation(new BMap.Point(row.Longitude,row.Latitude), function(result){     
+          let index=row['index']     
+          row['Address']=result.address
+          _this.Routedata[index]=row
+          var trackPoint = new BMap.Point(row.Longitude, row.Latitude);
+          var content ='<p>经过时间:' + row.PassTime + '</p><p>地址:' + row.Address + '</p><p>定位类型:' + row.SignalType + '</p>'
+          var opts = {
+              width : 320, // 信息窗口宽度
+              enableAutoPan:false
+          }
+          var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象  
+          _this.map.centerAndZoom(trackPoint, 19);
+          _this.map.openInfoWindow(infoWindow,trackPoint);
+          
+      });
+    },
+    RouteTypeChange(value){
+      // if(this.queryRouteParam.imei==''){
+      //   this.$message.error('请先选择设备');
+      //     return false;
+      // }
+      if(value==1){
+        clearInterval(this.timer);
+        this.showSearchContent=true
+      }else{
+        this.map.clearOverlays()
+        this.showSearchContent=false
+      }
+
+    }
+
+    
+  },
+  beforeDestroy() {
+    
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.bm-view {
+  width: 100%;
+  // height: 100vh;
+  height: calc(100vh - 84px);
+}
+
+
+#sole-input {
+  width: 250px;
+}
+#sole-input:focus {
+  outline: none;
+}
+
+
+.app-container {
+    height: calc(100vh - 102px);
+}
+::v-deep .el-dialog__body {
+        padding: 0;
+    }
+::v-deep .info_label{
+  padding-top:5px;
+  font-size: 14px;
+}
+::v-deep .handle_btn{
+  margin-top: 10px;
+}
+#search-button{
+  margin-left:1px;
+}
+#student-container{
+  width:310px;
+  height: calc(100vh - 102px);
+  background-color: #fff;
+}
+.ontop-table{
+   width:100%;
+  height: calc(100% - 100px);
+  max-height: 700px;
+  overflow: auto;
+}
+
+#toggleListBtn {
+  background:#5c90d2 ;
+  color:#fff;
+  font-size: 21px;
+  height: 50px;
+  width: 20px !important;
+  text-align: center !important;
+  position: absolute;
+  top:calc(50vh - 50px);
+  right: 310px;
+  padding:14px 0px !important;
+}
+#right-search-box{
+  background:#5c90d2 ;
+  color:#fff;
+  font-size: 21px;
+  height: 145px;
+  border: 1px solid #5c90d2;
+  width: 280px;
+   position: absolute;
+  top:50px;
+  right: 310px;
+}
+.search_title{
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 27px;
+  padding-left: 10px;
+  width:100%;
+  height:28px;
+}
+.search_content{
+  width:100%;
+  height:115px;
+  background-color: #fff;
+}
+.time_select{
+  width:120px;
+  float: left;
+  margin-left:10px;
+  margin-top:5px;
+}
+.interval_select{
+  width:100px;
+  float: left;
+  margin-right:10px;
+  margin-top:5px;
+}
+
+.time_range_select{
+  width:260px;
+  float: left;
+  margin-left:10px;
+  margin-top:5px;
+}
+.interval_title{
+  width:40px;
+  font-size: 13px;
+  line-height: 25px;
+  text-align: left;
+  height: 28px;
+  float: left;
+  color:#000;
+  margin-left:20px;
+  margin-top:5px;
+
+}
+.interval_content{
+  width:35px;
+  font-size: 13px;
+  line-height: 25px;
+  text-align: left;
+  height: 28px;
+  float: left;
+  color:#000;
+  margin-left:10px;
+  margin-top:5px;
+  color:blue;
+}
+
+.search_btn{
+  width:55px;
+  padding: 1px;
+  background:#5c90d2 ;
+  font-size: 13px;
+  line-height: 25px;
+  text-align: center;
+  height: 28px;
+  float: left;
+  margin-left:10px;
+  margin-top:5px;
+  cursor: pointer;
+}
+.search_btn:hover{
+  background:#5497f0 ;
+}
+#bottomToggleBtn{
+  background:#5c90d2 ;
+  color:#fff;
+  font-size: 20px;
+  height: 21px;
+  width: 50px;
+  text-align: center !important;
+  position: absolute;
+  bottom:0px;
+  left: calc(50% - 140px);
+  padding:0px 14px !important;
+}
+#route-container{
+  background-color: #fff;
+  width:calc(100% - 310px);
+  height: 195px;
+}
+#control-container{
+   background-color: #fff;
+  width:calc(100% - 310px);
+  padding-right: 30px;
+  height: 30px;
+}
+.bottom_box{
+  z-index: 98 !important;
+  // border-top:2px #accdea solid;
+  width:100%;
+}
+.route_table{
+  height:192px;
+  width:100%;
+  overflow: auto;
+}
+
+.status_icon{
+ width:60px;
+ height: 100%;
+ text-align: left;
+ margin-right:5px ;
+ display: inline-block;
+}
+.status_img{
+  float: left;
+  margin-top:7px;
+}
+.el-radio{
+  margin-right: 10px !important;
+}
+.head_control_select{
+  width:200px;
+  height: 24px;
+  text-align: center;
+  line-height: 22px;
+  margin-top: 3px;
+  margin-right: 5px;
+  float: right;
+  font-size: 14px;
+}
+.head_control_btn{
+   width:60px;
+  height: 24px;
+  text-align: center;
+  line-height: 22px;
+  margin-top: 3px;
+  margin-right: 5px;
+  float: right;
+  border: 1px solid #d64635;
+  color: #666;
+  font-size: 14px;
+  cursor: pointer;
+  color: #fff;
+  background: #d64635;
+}
+
+
+.route_content{
+  // background-color: #eee;
+  border-top:1.5px #5c90d2 solid;
+  width:100%;
+}
+
+.right_box{
+   background-color: #fff;
+  z-index: 99 !important;
+  border-left:1px #accdea solid;
+}
+.btn_onlyred{
+  pointer-events: none;
+  cursor: default;
+  opacity: 0.6;
+}
+</style>

+ 388 - 0
src/views/screen/index.scss

@@ -0,0 +1,388 @@
+#body{
+  width:100%;
+  min-width: 1280px;
+  height:100%;
+  background-image: url("../../assets/screen/bg_body.png");
+    background-position-x: initial;
+    background-position-y: initial;
+    background-size: 100% 100%;
+    background-attachment: initial;
+    background-origin: initial;
+    background-clip: initial;
+    background-color: initial;
+}
+#index {
+  color: #d3d6dd;
+  width: 100%;
+  min-width: 1280px;
+  overflow-x:scroll;
+  height: 100%;
+  padding: 0.2rem 0.2rem 0 0.2rem;
+  font-size: 14px;
+}
+.head-title{
+  height: 8vh;
+  min-height: 48px;
+}
+.el-row {
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
+.el-col {
+  border-radius: 4px;
+}
+.grid-content {
+  border-radius: 4px;
+  min-height: 2vh;
+}
+.chart {
+  display: inline-block;
+}
+/*标题*/
+.title {
+  overflow: hidden;
+
+  // font-size: 36px;
+  font-size: 2vw;
+  color: rgb(8, 240, 255);
+  font-weight: bold;
+  text-align: center;
+}
+.title_l {
+  // background-image: url("../../assets/screen/ksh31.png");
+  height: 4vh;
+  min-height: 24px;
+  background-size: cover;
+  background-position: center center;
+}
+.title_r{
+  // background-image: url("../../assets/screen/ksh32.png");
+  height: 4vh;
+  min-height: 24px;
+  background-size: cover;
+  background-position: center center;
+}
+
+/*日期栏*/
+.time-box-row{
+  height:4vh;
+  min-height: 24px;
+  // margin-top: 25px;
+}
+.time-box-left{
+  width:40%;
+  margin-left: 5px;
+  padding-left: 5px;
+  border-radius: 0px;
+  margin-top: 2px;
+  line-height: 3.5vh;
+  height:3.5vh;
+  min-height: 21px;
+  background-image: url("../../assets/screen/time_left.png");
+  background-size: cover;
+  background-position: center center;
+  display: inline-block;
+}
+.time-box-right{
+  text-align: right;
+  display: inline-block;
+  border-radius: 0px;
+  margin-top: 2px;
+  line-height: 3.5vh;
+  width:40%;
+  height:3.5vh;
+  min-height: 21px;
+  margin-right: 5px;
+  padding-right: 10px;
+  background-image: url("../../assets/screen/time_right.png");
+  background-size: cover;
+  background-position: center center;
+}
+.time-box{
+  font-weight: 600;
+  font-size: 1.7vh;
+}
+/*表格栏*/
+.left-chart{
+  padding: 5px;
+  height:20vw;
+  min-height: 288px;
+  background-color: #111d41;
+  margin:5px;
+}
+/*告警统计*/
+.alarm-title{
+  font-weight: 600;
+  font-size: 18px;
+  color: #3fd5f1;
+  margin-bottom:5px;
+  padding-left: 8px;
+}
+.alarm-total-box{
+  height:2vw;
+  min-height: 24px;
+  text-align: center;
+  line-height:2vw;
+  font-weight: 500;
+  font-size: 1.5vh;
+  background-color:#15265f;
+  margin:5px 10px;
+}
+//右侧表格
+.right-chart{
+  padding: 5px;
+  height:19vw;
+  min-height: 269px;
+  background-color: #111d41;
+  margin:5px;
+}
+//右侧告警
+.right-alarm{
+  padding: 15px 5px;
+  height:21vw;
+  min-height: 305px;
+  margin:5px;
+  background-color: #111d41;
+}
+/*中间地图*/
+.center-box{
+  height:40.3vw;
+  min-height: 578px;
+  margin-top:5px;
+  padding: 5px;
+  background-color: #111d41;
+}
+.center-alarm{
+  position : relative;
+  top:0;
+  left:0;
+  height:38.5vw;
+  min-height: 384px;
+  overflow: hidden;
+}
+
+.bm-view {
+  width: 100%;
+  height:46vh;
+}
+.map-left-top{
+  width: 16.5vh;
+  height: 18vh;
+
+  font-size: 2vh;
+  position : absolute;
+  background-image: url("../../assets/screen/map_top_bg.png");
+  background-size: cover;
+  top:20px;
+  left : 20px; 
+  z-index: 999;
+
+}
+
+.alarm-label-title{
+  width:50%;
+  text-align: center;
+  display: inline-block;
+}
+.alarm-label-value{
+  width:50%;
+  display: inline-block;
+  text-align: center;
+}
+.back-btn{
+  position: fixed;
+  top:10px;
+  right:25px;
+  cursor: pointer;
+  font-family: datavfont!important;
+    font-style: normal;
+    font-weight: 400;
+    font-variant: normal;
+    text-transform: none;
+    line-height: 1;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    padding-top: 5px;
+    display: block;
+    color: #3fd5f1;
+    text-align: center;
+}
+.el-icon-edit-outline{
+  font-size: 20px;
+}
+.back-btn a{
+  font-size: 12px;
+}
+.back-btn:hover{
+  color:#1bb0cc;
+}
+
+@media (min-width: 1560px){
+  
+  .grid-content {
+    border-radius: 4px;
+    min-height: 4vh;
+  }
+  /*标题*/
+  .title {
+    overflow: hidden;
+  
+    font-size: 36px;
+    // font-size: 2vw;
+    color: rgb(8, 240, 255);
+    font-weight: bold;
+    text-align: center;
+  }
+  .title_l {
+    // background-image: url("../../assets/screen/ksh31.png");
+    height: 4vh;
+    min-height: 24px;
+    background-size: cover;
+    background-position: center center;
+  }
+  .title_r{
+    // background-image: url("../../assets/screen/ksh32.png");
+    height: 4vh;
+    min-height: 24px;
+    background-size: cover;
+    background-position: center center;
+  }
+  
+  /*日期栏*/
+  .time-box-row{
+    height:4vh;
+    min-height: 24px;
+    // margin-top: 25px;
+  }
+  .time-box-left{
+    width:40%;
+    margin-left: 5px;
+    padding-left: 5px;
+    border-radius: 0px;
+    margin-top: 2px;
+    line-height: 3.5vh;
+    height:3.5vh;
+    min-height: 21px;
+    background-image: url("../../assets/screen/time_left.png");
+    background-size: cover;
+    background-position: center center;
+    display: inline-block;
+  }
+  .time-box-right{
+    text-align: right;
+    display: inline-block;
+    border-radius: 0px;
+    margin-top: 2px;
+    line-height: 3.5vh;
+    width:40%;
+    height:3.5vh;
+    min-height: 21px;
+    margin-right: 5px;
+    padding-right: 10px;
+    background-image: url("../../assets/screen/time_right.png");
+    background-size: cover;
+    background-position: center center;
+  }
+  .time-box{
+    font-weight: 600;
+    font-size: 1.7vh;
+  }
+  /*表格烂*/
+  .left-chart{
+    padding: 5px;
+    height:40.5vh;
+    min-height: 188px;
+    background-color: #111d41;
+    margin:5px;
+  }
+  /*告警统计*/
+  .alarm-title{
+    font-weight: 600;
+    font-size: 18px;
+    color: #3fd5f1;
+    margin-bottom:5px;
+    padding-left: 8px;
+  }
+  .alarm-total-box{
+    height:4vh;
+    min-height: 24px;
+    text-align: center;
+    line-height: 4vh;
+    font-weight: 500;
+    font-size: 1.8vh;
+    background-color:#15265f;
+    margin:5px 20px;
+  }
+  //右侧表格
+  .right-chart{
+    padding: 5px;
+    height:36.5vh;
+    min-height: 259px;
+    background-color: #111d41;
+    margin:5px;
+  }
+  //右侧告警
+  .right-alarm{
+    padding: 15px 5px;
+    height:45vh;
+    margin:5px;
+    min-height: 300px;
+    background-color: #111d41;
+  }
+  /*中间地图*/
+  .center-box{
+    height:82vh;
+    min-height: 578px;
+    margin-top:5px;
+    padding: 5px;
+    background-color: #111d41;
+  }
+  .center-map{
+    position : relative;
+    top:0;
+    left:0;
+    height:52vh;
+    min-height: 384px;
+  }
+  .center-bottom{
+    height:29vh;
+    min-height: 179px;
+  }
+  .bm-view {
+    width: 100%;
+    height:46vh;
+  }
+  .map-left-top{
+    width: 16.5vh;
+    height: 18vh;
+    font-size: 2vh;
+    position : absolute;
+    background-image: url("../../assets/screen/map_top_bg.png");
+    background-size: cover;
+    top:20px;
+    left : 20px; 
+    z-index: 999;
+  
+  }
+  .center-alarm{
+    position : relative;
+    top:0;
+    left:0;
+    height:38vw;
+    min-height: 384px;
+    overflow: hidden;
+  }
+  .alarm-label-title{
+    width:50%;
+    text-align: center;
+    display: inline-block;
+  }
+  .alarm-label-value{
+    width:50%;
+    display: inline-block;
+    text-align: center;
+  }
+  
+  
+}