功能点  
地图的初始化 显示电子围栏(先初始化在调接口显示电子围栏) 显示定位 显示轨迹 轨迹回放 (回放速度无法控制是因为高德地图的版本问题,不要设置版本,使用默认的即可生效) 获取当前城市及天气情况 设置地图样式 坐标拾取器   
 重点  
 
 
 
 this . map. on ( 'complete' ,  ( )  =>  { } ) 
  
清除地图上所有图形(若不想清除电子围栏,可以全部清除后重新显示电子围栏)   
this . map. clearMap ( ) ; 
  
自动适配到合适视野范围(无参数,默认包括所有覆盖物的情况)   
this . map. setFitView ( ) ; 
  
 
 
 
this . map. setCenter ( [ point. longitude,  point. latitude] ) ;  
  
< template> 
  < div class = "w100 h100 white relative" > 
    < ! --  地图区域 -- > 
    < div id= "container"  class = "w100 h100" > < / div> 
    < ! --  搜索框 -- > 
    < div class = "absolute"  style= "left: .2rem; top: .5rem;z-index: 9; " > 
      < div class = "bg-com white pdRem-20 sizeRem-30" > 
        < div class = "bold w100" > 
          < div class = "item pdRem-20" > 正在监测人员:共{ {  olderArr. length } } 人< / div> 
          < div class = "item pdRem-20" > 
            护理院
            < el- select v- model= "info.orgId"  class = "w100 mtRem-20"  @change= "changeOrgId"  : popper- append- to- body= "false" 
              : teleported= "false" > 
              < el- option v- for = "item in roomArr"  : key= "item.id"  : label= "item.label"  : value= "item.id" > < / el- option> 
            < / el- select> 
          < / div> 
          < div class = "item pdRem-20" > 
            老人姓名
            < el- select v- model= "info.syncUserId"  class = "w100 mtRem-20"  filterable  : filter- method= "remoteMethod" 
              : popper- append- to- body= "false"  : teleported= "false" > 
              < el- option v- for = "item in olderArr"  : key= "item.syncUserId"  : label= "item.userName" 
                : value= "item.syncUserId" > < / el- option> 
            < / el- select> 
          < / div> 
          < div class = "item pdRem-20" > 
            < div class = "mbRem-20" > 开始时间< / div> 
            < el- date- picker v- model= "info.dateRange"  @change= "handleDateRange"  style= "width: 100%;"  type= "datetimerange" 
              range- separator= ""  start- placeholder= "开始日期"  end- placeholder= "结束日期"  align= "right" 
              popper- class = "popperClass-my"  class = "picker"  : popper- append- to- body= "false" > 
            < / el- date- picker> 
          < / div> 
          < div class = "item pdRem-20" > 
            < el- tag class = "btn-time"  @click= "getTime(0)" > 当天< / el- tag> 
            < el- tag class = "btn-time mlrRem-20"  @click= "getTime(3)" > 近3 天< / el- tag> 
            < el- tag class = "btn-time"  @click= "getTime(7)" > 近7 天< / el- tag> 
          < / div> 
        < / div> 
        < ! --  按钮 -- > 
        < div class = "center mtRem-80" > 
          < el- button size= "medium"  class = "block btn-bg"  @click= "submit(1)" > 实时定位< / el- button> 
          < el- button size= "medium"  class = "block mlRem-40 btn-bg"  @click= "submit(2)" > 轨迹回放< / el- button> 
        < / div> 
      < / div> 
    < / div> 
    < ! --  告警 -- > 
    < div class = "absolute"  style= "right: 1.5rem; top: .5rem;z-index: 9; " > 
      < div v- for = "(alarmInfo, index) in alarmList"  : key= "index"  class = "item-bg pdRem-30 sizeRem-26" > 
        < div class = "flex_r" > < el- tag type= "warning"  effect= "dark"  size= "mini" > { {  alarmInfo. alarmLevelName } } < / el- tag> 
        < / div> 
        < div class = "flex1" > 
          < div style= "width: 90%;" > 
            < div class = "" > { {  alarmInfo. alarmContent } } < / div> 
          < / div> 
          < div style= "width:10%" > 
            < img : src= "require('./components/img/alarm-icon.png')"  alt= ""  style= "width:0.4rem;height: 0.4rem;" > 
          < / div> 
        < / div> 
      < / div> 
    < / div> 
  < / div> 
< / template> 
< script> 
import  {  selectCompanyList,  userInfoList,  fenceList,  userLocation,  trajectory }  from  './components/js/api' 
import  AMapLoader from  '@amap/amap-jsapi-loader' ; 
import  redIcon from  "./components/img/point-red1.png" ; 
import  originIcon from  "./components/img/origin.png" ; 
import  endIcon from  "./components/img/end.png" ; 
import  olderManIcon from  "./components/img/olderMan.png" ; 
window. _AMapSecurityConfig =  { 
  securityJsCode :  "bc0077d71423eedb1d25df186610f740" , 
} ; 
export  default  { 
  props :  [ 'alarmList' ] ,  
  data ( )  { 
    return  { 
      isOrgId :  true ,  
      map :  null , 
      trackLineArr :  [ ] , 
      fenceArr :  [ ] ,  
      
      num :  0 , 
      info :  { 
        orgId :  '' , 
        syncUserId :  '' , 
        dateRange :  [ ] , 
      } , 
      roomArr :  [ ] , 
      olderArr :  [ ] , 
      olderArrCopy :  [ ] , 
    } 
  } , 
  watch :  { 
    "info.dateRange" ( newVal)  { 
      if  ( newVal ==  null )  { 
        this . info. dateRange =  [ ] ; 
      } 
    } , 
  } , 
  mounted ( )  { 
    console. log ( 'mounted' ,  33333333333 ) 
    this . isOrgId =  localStorage. getItem ( "isOrgId" )  ==  'true'  ?  true  :  false ; 
    this . initAMap ( ) ; 
  } , 
  beforeDestroy ( )  { 
    this . map. destroy ( ) ; 
  } , 
  methods :  { 
    
    changeOrgId ( )  { 
      console. log ( 'changeOrgId' ,  this . info. orgId) 
      
      userInfoList ( { 
        orgId :  this . info. orgId
      } ) . then ( res  =>  { 
        this . olderArr =  res. data; 
        this . olderArrCopy =  res. data; 
        this . $set ( this . info,  'syncUserId' ,  res. data. length ?  res. data[ 0 ] . syncUserId :  '' ) 
      } ) 
      
      fenceList ( { 
        orgId :  this . info. orgId
      } ) . then ( res  =>  { 
        console. log ( '电子围栏' ,  res. rows) 
        this . fenceArr =  res. rows; 
        this . getFenceInfoList ( res. rows) 
      } ) 
    } , 
    remoteMethod ( query )  { 
      if  ( query)  { 
        console. log ( 'query' ,  query) 
        this . olderArr =  this . olderArrCopy. filter ( item  =>  { 
          console. log ( item. userNamePingYin. includes ( query) ,  '999' ,  item. userNamePingYin) ; 
          return  item. userNamePingYin. toLowerCase ( ) . includes ( query. toLowerCase ( ) )  ||  item. userName. includes ( query) ; 
        } ) ; 
      }  else  { 
        this . olderArr =  this . olderArrCopy; 
      } 
    } , 
    formatDate ( date )  { 
      const  year =  date. getFullYear ( ) ; 
      const  month =  String ( date. getMonth ( )  +  1 ) . padStart ( 2 ,  '0' ) ; 
      const  day =  String ( date. getDate ( ) ) . padStart ( 2 ,  '0' ) ; 
      const  hours =  String ( date. getHours ( ) ) . padStart ( 2 ,  '0' ) ; 
      const  minutes =  String ( date. getMinutes ( ) ) . padStart ( 2 ,  '0' ) ; 
      const  seconds =  String ( date. getSeconds ( ) ) . padStart ( 2 ,  '0' ) ; 
      return  ` ${ year} - ${ month} - ${ day}   ${ hours} : ${ minutes} : ${ seconds} ` ; 
    } , 
    getTime ( day )  { 
      this . info. dateRange =  [ '' ,  '' ] 
      const  now =  new  Date ( ) ; 
      const  startOfDay =  new  Date ( now. getFullYear ( ) ,  now. getMonth ( ) ,  now. getDate ( ) ) 
      this . info. dateRange[ 1 ]  =  now; 
      this . info. dateRange[ 0 ]  =  day ==  0  ?  startOfDay :  new  Date ( now. getTime ( )  -  day *  24  *  60  *  60  *  1000 ) ; 
    } , 
    
    handleDateRange ( )  { 
      if  ( this . info. dateRange)  { 
        const  minDate =  new  Date ( this . info. dateRange[ 0 ] ) . getTime ( ) ; 
        const  maxDate =  new  Date ( this . info. dateRange[ 1 ] ) . getTime ( ) ; 
        if  ( maxDate -  minDate >  7  *  24  *  60  *  60  *  1000 )  { 
          this . msgError ( "选择的时间范围不能超过7天" ) ; 
          
          this . info. dateRange =  [ ] ; 
        } 
      }  else  { 
        this . info. dateRange =  [ ] ; 
      } 
    } , 
    submit ( type )  { 
      
      console. log ( type,  this . info,  999 ) ; 
      if  ( type ==  1 )  { 
        if  ( ! this . info. syncUserId)  { 
          this . msgError ( '请选择老人' ) ; 
        }  else  { 
          userLocation ( { 
            syncUserId :  this . info. syncUserId, 
          } ) . then ( res  =>  { 
            this . createMarker ( res. data) 
          } ) 
        } 
      }  else  { 
        if  ( ! this . info. syncUserId)  { 
          this . msgError ( '请选择老人' ) ; 
        }  else  if  ( this . info. dateRange. length ==  0 )  { 
          this . msgError ( '请选择时间' ) ; 
        }  else  { 
          trajectory ( { 
            syncUserId :  this . info. syncUserId, 
            startTime :  this . formatDate ( this . info. dateRange[ 0 ] ) , 
            endTime :  this . formatDate ( this . info. dateRange[ 1 ] ) , 
          } ) . then ( res  =>  { 
            if  ( res. data. length ==  0 )  { 
              this . msgError ( '未查询到轨迹数据' ) ; 
            }  else  { 
              this . handleTrack ( 2 ,  res) 
              
              
              
            } 
          } ) 
        } 
      } 
    } , 
    
    initAMap ( )  { 
      AMapLoader. load ( { 
        key :  "d3e34dd987d36d98958ea35f97303089" ,  
        
        plugins :  [ "AMap.ControlBar" , 
          "AMap.ToolBar" , 
          'AMap.Weather' , 
          'AMap.CitySearch' , 
          'AMap.Marker' , 
          "AMap.MouseTool" , 
          "AMap.PolyEditor" , 
          "AMap.Driving" , 
          "AMap.Polyline" , 
          "AMap.Geolocation" , 
          "AMap.GraspRoad" , 
          "AMap.Geocoder" , 
          "AMap.GeometryUtil.ringArea" , 
          "AMap.DistrictSearch" , 
          "AMap.MoveAnimation" , 
        ] ,  
      } ) 
        . then ( ( AMap )  =>  { 
          this . map =  new  AMap. Map ( "container" ,  { 
            
            rotateEnable :  true , 
            pitchEnable :  true , 
            zoom :  17 , 
            pitch :  50 , 
            rotation :  - 15 , 
            viewMode :  '3D' ,  
            zooms :  [ 2 ,  20 ] , 
            center :  [ 116.930096 ,  34.758164 ] , 
            mapStyle :  "amap://styles/blue" ,  
          } ) ; 
          
          var  controlBar =  new  AMap. ControlBar ( { 
            position :  { 
              right :  '10px' , 
              top :  '10px' 
            } 
          } ) ; 
          this . map. addControl ( controlBar) 
          
          
          
          
          
          
          
          this . map. on ( 'complete' ,  ( )  =>  { 
            let  idObj =  JSON . parse ( localStorage. getItem ( 'formJx' ) ) 
            
            selectCompanyList ( { 
              orgId :  this . isOrgId ?  '-1'  :  idObj. orgId, 
              groupId :  idObj. groupId, 
            } ) . then ( res  =>  { 
              this . roomArr =  res. data; 
              this . $set ( this . info,  'orgId' ,  res. data[ 0 ] . id) 
              this . changeOrgId ( ) 
            } ) 
          } ) 
        } ) 
        . catch ( ( e )  =>  { 
          console. log ( e) ; 
        } ) ; 
    } , 
    
    getWeather ( )  { 
      const  city =  new  AMap. CitySearch ( ) 
      city. getLocalCity ( ( status,  result )  =>  { 
        if  ( status ===  'complete'  &&  result. info ===  'OK' )  { 
          console. log ( '当前城市:' ,  result. city) ; 
          
          
          const  weather =  new  AMap. Weather ( ) ; 
          
          weather. getLive ( result. city,  ( error,  data )  =>  { 
            if  ( error)  { 
              console. error ( '获取天气失败:' ,  error) ; 
            }  else  { 
              console. log ( '实时天气数据:' ,  data,  ` 天气 ${ data. weather}  温度 ${ data. temperature} ℃ 风向 ${ data. windDirection} ` ) ; 
              this . $emit ( 'getWeather' ,  ` 天气 ${ data. weather}  温度 ${ data. temperature} ℃ 风向 ${ data. windDirection} ` ) 
              
              
              
              
              
              
            } 
          } ) ; 
        }  else  { 
          console. error ( '获取当前城市失败:' ,  result. info) ; 
        } 
      } ) ; 
    } , 
    
    createMarker ( arr =  [ ]  )  { 
      if  ( arr. length !=  0 )  { 
        
        this . map. clearMap ( ) ; 
        this . getFenceInfoList ( this . fenceArr) 
        arr. map ( ( item )  =>  { 
          var  marker =  new  AMap. Marker ( { 
            position :  new  AMap. LngLat ( item. longitude,  item. latitude) , 
            icon :  new  AMap. Icon ( { 
              image :  redIcon, 
              imageSize :  new  AMap. Size ( 28 ,  28 ) , 
            } ) , 
            
            
            
            
            
          } ) ; 
          this . map. add ( marker) ; 
        } ) ; 
        
        
        this . map. setFitView ( ) ; 
      }  else  { 
        this . msgError ( '未有相关定位消息' ) ; 
      } 
    } , 
    
    getFenceInfoList ( arr =  [ ]  )  { 
      if  ( arr. length ==  0 )  { 
        
        this . map. clearMap ( ) ; 
        
        let  point =  this . roomArr. filter ( item  =>  item. id ==  this . info. orgId) [ 0 ] 
        console. log ( point,  this . roomArr,  99999999999 ) 
        
        this . map. setCenter ( [ point. longitude,  point. latitude] ) ; 
        return ; 
      } 
      let  arr1 =  [ ] ; 
      for  ( let  i =  0 ;  i <  arr. length;  i++ )  { 
        if  ( arr[ i] . fenceType ==  0 )  { 
          if  ( arr[ i] . useFence)  { 
            arr1. push ( { 
              radius :  arr[ i] . radius, 
              center :  arr[ i] . point, 
              fillColor :  "#16d46b" , 
              fillOpacity :  0.35 , 
              strokeColor :  "#16d46b" , 
              strokeOpacity :  0.8 , 
              strokeStyle :  "solid" , 
              zIndex :  10 , 
            } ) ; 
          }  else  { 
            arr1. push ( { 
              radius :  arr[ i] . radius, 
              center :  arr[ i] . point, 
              fillColor :  "#1791fc" , 
              fillOpacity :  0.5 , 
              strokeStyle :  "solid" , 
              strokeColor :  "#FF33FF" , 
              strokeOpacity :  0.8 , 
              zIndex :  10 , 
            } ) ; 
          } 
        }  else  if  ( arr[ i] . fenceType ==  1 )  { 
          if  ( arr[ i] . useFence)  { 
            arr1. push ( { 
              path :  arr[ i] . optimal, 
              fillColor :  "#16d46b" , 
              fillOpacity :  0.35 , 
              strokeColor :  "#16d46b" , 
              strokeOpacity :  0.8 , 
              strokeStyle :  "solid" , 
              zIndex :  10 , 
            } ) ; 
          }  else  { 
            arr1. push ( { 
              path :  arr[ i] . optimal, 
              fillColor :  "#1791fc" , 
              fillOpacity :  0.5 , 
              strokeColor :  "#FF33FF" , 
              strokeOpacity :  0.8 , 
              strokeStyle :  "solid" , 
              zIndex :  10 , 
            } ) ; 
          } 
        }  else  { 
          for  ( let  j =  0 ;  j <  arr[ i] . optimal. length;  j++ )  { 
            if  ( arr[ i] . useFence)  { 
              arr1. push ( { 
                path :  arr[ i] . optimal[ j] , 
                fillColor :  "#16d46b" , 
                fillOpacity :  0.35 , 
                strokeColor :  "#16d46b" , 
                strokeOpacity :  0.8 , 
                strokeStyle :  "solid" , 
                zIndex :  10 , 
              } ) ; 
            }  else  { 
              arr1. push ( { 
                path :  arr[ i] . optimal[ j] , 
                fillColor :  "#1791fc" , 
                fillOpacity :  0.5 , 
                strokeColor :  "#FF33FF" , 
                strokeOpacity :  0.8 , 
                strokeStyle :  "solid" , 
                zIndex :  10 , 
              } ) ; 
            } 
          } 
        } 
      } 
      this . handleDrawPolygon ( arr1) ; 
    } , 
    
    handleDrawPolygon ( data )  { 
      for  ( let  i =  0 ;  i <  data. length;  i++ )  { 
        let  polygon =  null ; 
        if  ( data[ i] . radius)  { 
          polygon =  new  AMap. Circle ( data[ i] ) ; 
        }  else  { 
          polygon =  new  AMap. Polygon ( data[ i] ) ; 
        } 
        this . map. add ( polygon) ; 
        
        this . map. setFitView ( ) ; 
      } 
    } , 
    
    handleTrack ( type,  res )  { 
      
      this . map. clearMap ( ) ; 
      this . getFenceInfoList ( this . fenceArr) 
      this . trackLineArr =  res. data. map ( item  =>  { 
        return  { 
          x :  parseFloat ( item. longitude) , 
          y :  parseFloat ( item. latitude) , 
          createTime :  item. createTime, 
          address :  item. address, 
          sp :  0 , 
          ag :  0 , 
          tm :  6 
        } 
      } ) ; 
      
      let  lineArr =  res. data. map ( item  =>  [ item. longitude,  item. latitude] ) 
      this . handleGraspRoad ( lineArr,  type) 
    } , 
    
    handleGraspRoad ( graspArr,  type )  { 
      
      let  marker1 =  null ; 
      marker1 =  new  AMap. Marker ( { 
        map :  this . map, 
        position :  graspArr[ 0 ] , 
        icon :  new  AMap. Icon ( { 
          image :  originIcon, 
          size :  new  AMap. Size ( 48 ,  48 ) ,  
          imageSize :  new  AMap. Size ( 32 ,  32 ) , 
        } ) , 
        offset :  new  AMap. Pixel ( - 13 ,  - 26 ) , 
      } ) ; 
      marker1. setMap ( this . map) ; 
      
      let  marker2 =  null ; 
      marker2 =  new  AMap. Marker ( { 
        map :  this . map, 
        position :  graspArr[ graspArr. length -  1 ] , 
        icon :  new  AMap. Icon ( { 
          image :  endIcon, 
          size :  new  AMap. Size ( 48 ,  48 ) ,  
          imageSize :  new  AMap. Size ( 32 ,  32 ) , 
        } ) , 
        offset :  new  AMap. Pixel ( - 13 ,  - 26 ) , 
      } ) ; 
      
      this . map. setFitView ( ) ; 
      marker2. setMap ( this . map) ; 
      
      if  ( type ==  1 )  { 
        console. log ( 666 ,  '轨迹的坐标点' ,  graspArr) 
        
        const  polyline =  new  AMap. Polyline ( { 
          map :  this . map, 
          path :  graspArr, 
          showDir :  true , 
          strokeColor :  "red" ,  
          
          strokeWeight :  6 ,  
        } ) ; 
      }  else  { 
        
        var  markerSign =  new  AMap. Marker ( { 
          map :  this . map, 
          position :  graspArr[ 0 ] , 
          icon :  new  AMap. Icon ( { 
            image :  olderManIcon, 
            size :  new  AMap. Size ( 48 ,  48 ) ,  
            imageSize :  new  AMap. Size ( 44 ,  44 ) , 
          } ) , 
          
          offset :  new  AMap. Pixel ( - 13 ,  - 26 ) , 
          autoRotation :  true , 
          angle :  - 90 , 
        } ) ; 
        
        const  polyline =  new  AMap. Polyline ( { 
          map :  this . map, 
          path :  graspArr, 
          showDir :  true , 
          strokeColor :  "#28F" ,  
          strokeOpacity :  1 ,      
          strokeWeight :  6 ,  
        } ) ; 
        
        const  passedPolyline =  new  AMap. Polyline ( { 
          map :  this . map, 
          strokeColor :  "#68d068" ,  
          strokeOpacity :  1 ,      
          strokeWeight :  6 ,  
          strokeStyle :  "solid"   
        } ) ; 
        markerSign. on ( "moving" ,  function  ( e )  { 
          passedPolyline. setPath ( e. passedPath) ; 
          
        } ) ; 
        this . map. setFitView ( ) ; 
        setTimeout ( ( )  =>  { 
          markerSign. moveAlong ( graspArr,  300 ) ; 
        } ,  1000 ) ; 
        
        
        
        
        
        
      } 
    } , 
  } , 
} 
< / script> 
< style lang= "scss" > 
. popperClass- my { 
  border :  1px solid #66729b; 
  background- color:  rgba ( 0 ,  0 ,  0 ,  0.7 ) ; 
  color :  white; 
  . el- date- range- picker__content. is- left, 
  . el- picker- panel__content . el- date- range- picker__content . is- left, 
  . el- picker- panel__content . el- date- range- picker__content . is- right, 
  . el- date- range- picker__time- header, 
  . el- date- range- picker__time- picker- wrap, 
  . el- input__inner, 
  . el- picker- panel__footer, 
  . el- time- panel . el- popper, 
  . el- button, 
  . el- time- spinner, 
  . el- time- spinner__item, 
  . el- time- panel . el- popper { 
    border :  0 ; 
  } 
  . el- time- spinner, 
  . el- picker- panel__footer, 
  . el- time- spinner__item { 
    background :  rgba ( 0 ,  0 ,  0 ,  0.7 ) ; 
    
    
  } 
  . is- disabled . el- input__inner { 
    background :  rgba ( 0 ,  20 ,  38 ,  1 ) ; 
    color :  white; 
  } 
  . el- input__inner { 
    background :  rgba ( 0 ,  20 ,  38 ,  1 ) ; 
    color :  white; 
    
  } 
  . el- time- panel__footer { 
    background :  rgba ( 0 ,  20 ,  38 ,  1 ) ; 
    border :  0 ; 
  } 
  ul. el- scrollbar_view. el- time- spinner_list: : before { 
    background :  rgba ( 0 ,  20 ,  38 ,  1 ) ; 
  } 
  
  . available. in- range div { 
    background- color:  black; 
    color :  white; 
  } 
  . available. in- range div: hover { 
    background- color:  black; 
    color :  white; 
  } 
  . el- button, 
  . el- button. is- plain: hover { 
    color :  white; 
    background :  rgba ( 0 ,  20 ,  38 ,  1 ) ; 
    border :  0 ; 
  } 
  . el- time- spinner__item: hover: not ( . disabled)  { 
    
    background :  rgba ( 0 ,  0 ,  0 ,  0.7 ) ; 
    font- size:  medium; 
    color :  white; 
  } 
} 
< / style> 
< style scoped lang= "scss" > 
@import  "./components/css/rem.scss" ; 
: : v- deep . el- input, 
: : v- deep . el- input__inner, 
: : v- deep . btn- bg, 
: : v- deep . el- range- editor-- medium . el- range- input { 
  background :  url ( "./components/img/search1.png" )  no- repeat center center; 
  background- size:  100 %  100 % ; 
  color :  #fff; 
  border :  0px; 
  text- align:  center; 
} 
: : v- deep . el- select- dropdown, 
: : v- deep . popperClass . el- date- picker . el- range- input { 
  border :  0 ; 
  background- image:  url ( "./components/img/search-bg.png" ) ; 
  background- position:  center; 
  background- repeat:  no- repeat; 
  background- size:  100 %  100 % ; 
  . el- select- dropdown__item { 
    color :  #fff; 
  } 
} 
. btn- time { 
  background :  url ( "./components/img/search1.png" )  no- repeat center center; 
  background- size:  100 %  100 % ; 
  color :  white; 
  border :  0 ; 
} 
. picker . el- date- range- picker { 
  background- color:  transparent ! important; 
  
  
  
  
  
} 
: : v- deep . amap- marker- label { 
  background- color:  transparent ! important; 
  color :  #ffcd09; 
  border :  0px solid #00f; 
  white- space:  nowrap; 
  font- size:  16px; 
  transform :  translateX ( - 50 % ) ; 
  font- weight:  700 ; 
} 
. bg- com { 
  width :  18vw; 
  padding :  . 375rem; 
  background :  url ( './components/img/bg-2.png' )  no- repeat center center; 
  background- size:  100 %  100 % ; 
  z- index:  10 ; 
  . item { 
    max- width:  26vw; 
  } 
} 
. item- bg { 
  width :  4 . 125rem; 
  background :  url ( './components/img/alarm-bg.png' )  no- repeat center center; 
  background- size:  100 %  100 % ; 
} 
< / style>