| | |
| | | <template> |
| | | <div class="main_body"> |
| | | <el-container |
| | | style="height: 100%" |
| | | style="height: 100%" |
| | | > |
| | | <el-aside |
| | | v-if="this.$store.state.aside" |
| | | width="300px" |
| | | style="background-color: rgb(238, 241, 246);padding-top:10px" |
| | | v-if="this.$store.state.aside" |
| | | width="300px" |
| | | style="background-color: rgb(238, 241, 246);padding-top:10px" |
| | | > |
| | | <span style="font-size:13px;padding-left:10px;font-weight:500;color:rgb(64, 158, 255)">走航车设备</span> |
| | | <el-menu style="margin-top:10px"> |
| | | <el-menu-item |
| | | v-for="(item,index) in defaultData" |
| | | :key="index" |
| | | style="display: flex;justify-content: space-between;align-items: center;padding-right: 0;border-bottom:1px solid #eee" |
| | | :index="(index+1 + '-' + index + 1).toString()" |
| | | @click="changeCarData(item)" |
| | | v-for="(item,index) in defaultData" |
| | | :key="index" |
| | | style="display: flex;justify-content: space-between;align-items: center;padding-right: 0;border-bottom:1px solid #eee" |
| | | :index="(index+1 + '-' + index + 1).toString()" |
| | | @click="changeCarData(item)" |
| | | > |
| | | <span>{{ item.name }}</span> |
| | | <i |
| | |
| | | class="iconfont iconfaxianzuobiao" |
| | | @click="deviceDetail(item.mac,null,item,0)" |
| | | /> |
| | | <!-- @click="deviceDetail('p5dnd7a0245390',null,item,0)"--> |
| | | <!-- @click="deviceDetail('p5dnd7a0245390',null,item,0)"--> |
| | | </el-menu-item> |
| | | </el-menu> |
| | | </el-aside> |
| | |
| | | <el-button size="medium" type="primary" icon="el-icon-setting" @click="dialogFormVisible = true">6参设定</el-button> |
| | | </span> |
| | | <span |
| | | v-for="(item, index) in snesorParams" |
| | | :key="index" |
| | | class="left" |
| | | :class="{ click: changeColor == index }" |
| | | @click="changeCode(index)" |
| | | v-for="(item, index) in snesorParams" |
| | | :key="index" |
| | | class="left" |
| | | :class="{ click: changeColor == index }" |
| | | @click="changeCode(index)" |
| | | >{{ item }} |
| | | </span> |
| | | <span |
| | | v-for="(item,index) in viewOptions" |
| | | :key="index+ '-only'" |
| | | class="right" |
| | | :class="{ click: changeColor1 == index }" |
| | | @click="changeCode1(index)" |
| | | v-for="(item,index) in viewOptions" |
| | | :key="index+ '-only'" |
| | | class="right" |
| | | :class="{ click: changeColor1 == index }" |
| | | @click="changeCode1(index)" |
| | | >{{ item }} |
| | | </span> |
| | | <span v-if="webSocketView" style="float:right;margin: 2px 10px 0 0;"> |
| | | <el-button size="medium" type="primary" @click="wsStart()">开启实时</el-button> |
| | | </span> |
| | | <!-- <el-date-picker |
| | | v-if="historyView" |
| | | v-model="dateValue" |
| | | value-format="yyyy-MM-dd" |
| | | style="float:right;margin-right: 10px;line-height: 40px;" |
| | | align="right" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | :picker-options="pickerOptions" |
| | | @change="dateChange" |
| | | />--> |
| | | <!-- <el-date-picker |
| | | v-if="historyView" |
| | | v-model="dateValue" |
| | | value-format="yyyy-MM-dd" |
| | | style="float:right;margin-right: 10px;line-height: 40px;" |
| | | align="right" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | :picker-options="pickerOptions" |
| | | @change="dateChange" |
| | | />--> |
| | | <!-- 选择时间段 --> |
| | | <el-time-picker |
| | | :disabled="isDisTime" |
| | | style="float:right;width: 210px" |
| | | is-range |
| | | v-model="timeValue" |
| | | @blur="blurChange" |
| | | range-separator="至" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | placeholder="选择时间范围"> |
| | | </el-time-picker> |
| | | <!-- <el-time-picker--> |
| | | <!-- :disabled="isDisTime"--> |
| | | <!-- style="float:right;width: 210px"--> |
| | | <!-- is-range--> |
| | | <!-- v-model="timeValue"--> |
| | | <!-- @blur="blurChange"--> |
| | | <!-- range-separator="至"--> |
| | | <!-- start-placeholder="开始时间"--> |
| | | <!-- end-placeholder="结束时间"--> |
| | | <!-- placeholder="选择时间范围">--> |
| | | <!-- </el-time-picker>--> |
| | | <!-- 历史日期选择下拉框 --> |
| | | <el-select v-if="historyView" v-model="dateValue" placeholder="选择日期" style="float:right;line-height:40px;margin-right:10px;width:140px" @change="dateChange"> |
| | | <el-option |
| | | v-for="item in isDataList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | @click.native="dataChangeClick" |
| | | /> |
| | | </el-select> |
| | | <!-- <el-select v-if="historyView" v-model="dateValue" placeholder="选择日期" style="float:right;line-height:40px;margin-right:10px;width:140px" @change="dateChange">--> |
| | | <!-- <el-option--> |
| | | <!-- v-for="item in isDataList"--> |
| | | <!-- :key="item.value"--> |
| | | <!-- :label="item.label"--> |
| | | <!-- :value="item.value"--> |
| | | <!-- @click.native="dataChangeClick"--> |
| | | <!-- />--> |
| | | <!-- </el-select>--> |
| | | <el-date-picker |
| | | style="float:right;margin-right:10px;" |
| | | @change="dateChange" |
| | | v-model="dateValue" |
| | | type="datetimerange" |
| | | :picker-options="threeOptions" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期"> |
| | | </el-date-picker> |
| | | <!-- 历史/实时切换下拉框 --> |
| | | <el-select v-model="dataTypeValue" placeholder="数据类型" style="float:right;line-height:40px;margin-right:10px;width:103px"> |
| | | <el-option |
| | | v-for="item in dataTypeList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | v-for="item in dataTypeList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | |
| | | <!-- <el-descriptions title="设备标准值" border> |
| | | </el-descriptions> --> |
| | | <div |
| | | style="font-size: 16px;font-weight: 700;margin:10px 0 20px 0;font-size: 16px; |
| | | style="font-size: 16px;font-weight: 700;margin:10px 0 20px 0;font-size: 16px; |
| | | font-weight: 700;color: #303133;" |
| | | >设备标准值</div> |
| | | <el-table :data="sensorTableData" border> |
| | | <el-table-column |
| | | prop="sensorName" |
| | | label="名称" |
| | | prop="sensorName" |
| | | label="名称" |
| | | /> |
| | | <el-table-column |
| | | prop="unit" |
| | | label="单位" |
| | | prop="unit" |
| | | label="单位" |
| | | /> |
| | | <el-table-column label="一级"> |
| | | <template slot-scope="scope"> |
| | |
| | | <script> |
| | | import $ from 'jquery' |
| | | import '@/assets/icon/iconfont.css' |
| | | import requestObj from '@/utils/request' |
| | | var GPS = { |
| | | PI: 3.14159265358979324, |
| | | x_pi: 3.14159265358979324 * 3000.0 / 180.0, |
| | |
| | | '平铺', |
| | | '立体' |
| | | ], |
| | | dateValue: null, |
| | | dateValue: [], |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | return time.getTime() > Date.now() |
| | |
| | | picker.$emit('pick', date) |
| | | } |
| | | }] |
| | | }, |
| | | timeOne: '', |
| | | threeOptions: { |
| | | onPick: ({ maxDate, minDate }) => { |
| | | // 最大时间 最小时间 |
| | | this.timeOne = minDate.getTime() // 当选一个日期时 就是最小日期 |
| | | // 如何你选择了两个日期了,就把那个变量置空 |
| | | if (maxDate) this.timeOne = '' |
| | | }, |
| | | disabledDate: time => { |
| | | if (this.timeOne) { |
| | | const WEEK = 3 * 24 * 3600 * 1000 - 1 // 这里乘以3再减去1相当于 限制3天以内 |
| | | const minTime = this.timeOne// 三天之前 |
| | | const maxTime = this.timeOne + WEEK // 三天之后 |
| | | return time.getTime() < minTime || time.getTime() > maxTime || time.getTime() > new Date() |
| | | } else { |
| | | return time.getTime() > new Date() |
| | | } |
| | | } |
| | | }, |
| | | sensorDate: null, |
| | | noneData: false, |
| | |
| | | watch: { |
| | | dataTypeValue(n, o) { |
| | | if (this.dataTypeValue === 'webSocket') { |
| | | this.dateValue = null |
| | | this.dateValue = [] |
| | | this.historyView = false |
| | | this.webSocketView = true |
| | | } else { |
| | | this.dateValue = null |
| | | this.dateValue = [] |
| | | this.historyView = true |
| | | this.webSocketView = false |
| | | } |
| | | }, |
| | | dateValue(n, o) { |
| | | if (n === null) { |
| | | this.dateValue = [] |
| | | } |
| | | }, |
| | | viewKey(n, o) { |
| | | // console.log(n) |
| | | } |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | // timeValue: { |
| | | // handler(newVal, oldVal) { |
| | | // this.sensorTime = this.newTime() |
| | |
| | | this.newTime(this.timeValue) |
| | | this.newDate() |
| | | this.getCarData() |
| | | this.$watch('carMac', () => { |
| | | this.getMacDate() |
| | | }) |
| | | // this.$watch('carMac', () => { |
| | | // this.getMacDate() |
| | | // }) |
| | | }, |
| | | methods: { |
| | | // 时间处理函数 |
| | | newTime2(timeArr) { |
| | | var arr = [] |
| | | timeArr.map(v => { |
| | | var date = new Date(v) |
| | | var y = date.getFullYear() |
| | | var m = date.getMonth() + 1 |
| | | m = m < 10 ? '0' + m : m |
| | | var d = date.getDate() |
| | | d = d < 10 ? '0' + d : d |
| | | var h = date.getHours() |
| | | h = h < 10 ? '0' + h : h |
| | | var minute = date.getMinutes() |
| | | minute = minute < 10 ? '0' + minute : minute |
| | | var s = date.getSeconds() |
| | | s = s < 10 ? '0' + s : s |
| | | arr.push(y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + s) |
| | | }) |
| | | return arr |
| | | }, |
| | | // 跳转设备详情页 |
| | | deviceDetail(mac, item, items, indexs) { |
| | | // console.log('这是传输过去的值') |
| | |
| | | this.$request({ |
| | | url: '/cruiser/selectCruisers', |
| | | method: 'get' |
| | | }).then(res => { |
| | | this.defaultData = res.data |
| | | this.carMac = res.data[0].mac |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | | .then(res => { |
| | | this.defaultData = res.data |
| | | this.carMac = res.data[0].mac |
| | | }) |
| | | .catch(err => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | // 通过mac请求设备有数据的日期 |
| | | getMacDate() { |
| | |
| | | params: { |
| | | mac: this.carMac |
| | | } |
| | | }).then(res => { |
| | | for (let i = 0; i < res.data.length; i++) { |
| | | // this.isDataList[i].value = res.data.data[i] |
| | | // this.isDataList[i].label = res.data.data[i] |
| | | // this.isDataList[i] = { value: res.data.data[i], label: res.data.data[i] } |
| | | this.isDataList.push({ |
| | | value: res.data[i], |
| | | label: res.data[i] |
| | | }) |
| | | } |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | | .then(res => { |
| | | for (let i = 0; i < res.data.length; i++) { |
| | | // this.isDataList[i].value = res.data.data[i] |
| | | // this.isDataList[i].label = res.data.data[i] |
| | | // this.isDataList[i] = { value: res.data.data[i], label: res.data.data[i] } |
| | | this.isDataList.push({ |
| | | value: res.data[i], |
| | | label: res.data[i] |
| | | }) |
| | | } |
| | | }) |
| | | .catch(err => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | // 进行经纬度转换为距离的计算 |
| | | Rad(d) { |
| | |
| | | var a = radLat1 - radLat2 |
| | | var b = this.Rad(lng1) - this.Rad(lng2) |
| | | var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + |
| | | Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))) |
| | | Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))) |
| | | s = s * 6378.137 // EARTH_RADIUS; |
| | | s = Math.round(s * 10000) / 10000 // 输出为公里 |
| | | // s=s.toFixed(4); |
| | |
| | | }, |
| | | // 数据类型 |
| | | dateChange(e) { |
| | | this.sensorDate = e; |
| | | // if (this.view) { |
| | | // this.view.removeAllLayers() |
| | | // this.map.clearOverlays() |
| | | // // console.log('清除图层') |
| | | // } |
| | | // this.dataType = 'history' |
| | | // // this.map = null |
| | | // this.getStart() |
| | | }, |
| | | // 日期选择点击事件 |
| | | dataChangeClick(e) { |
| | | if (!this.isDisTime) { |
| | | // 更改时间格式 |
| | | this.newTime(this.timeValue) |
| | | if (e === null) { |
| | | this.sensorDate = [] |
| | | } else { |
| | | this.sensorDate = this.newTime2(e) |
| | | if (this.view) { |
| | | this.view.removeAllLayers() |
| | | this.map.clearOverlays() |
| | |
| | | // this.map = null |
| | | this.getStart() |
| | | } |
| | | this.isDisTime = false |
| | | }, |
| | | // 日期选择点击事件 |
| | | // dataChangeClick(e) { |
| | | // if (!this.isDisTime) { |
| | | // // 更改时间格式 |
| | | // if (this.dateValue.length <= 1) { |
| | | // this.newTime(this.timeValue) |
| | | // } |
| | | // if (this.view) { |
| | | // this.view.removeAllLayers() |
| | | // this.map.clearOverlays() |
| | | // // console.log('清除图层') |
| | | // } |
| | | // this.dataType = 'history' |
| | | // // this.map = null |
| | | // this.getStart() |
| | | // } |
| | | // this.isDisTime = false |
| | | // }, |
| | | // 时间选框失去焦点 |
| | | blurChange() { |
| | | // 更改时间格式 |
| | |
| | | } |
| | | that.dataType = 'webSocket' |
| | | // 拼写URL |
| | | // const baseUrl = `${requestObj.baseUrl}` |
| | | var socketUrl = 'cruiserWebsocket/' + this.carMac |
| | | // 替换http为WS |
| | | socketUrl = socketUrl.replace('https', 'ws').replace('http', 'ws') |
| | |
| | | var lon = parseFloat(JSON.parse(msg.data).flylon) |
| | | if (that.msgTemp.length < 2) { |
| | | that.msgTemp.push({ lat: lat, lon: lon }) |
| | | } |
| | | } |
| | | var distance = that.GetDistance(that.msgTemp[0].lat, that.msgTemp[0].lon, that.msgTemp[1].lat, that.msgTemp[1].lon) |
| | | if (distance >= 0.05) { |
| | | that.msgTemp.shift() |
| | |
| | | that.msgTemp.pop() |
| | | } |
| | | } |
| | | |
| | | }, |
| | | // 走航车轨迹数据 |
| | | getStart() { |
| | |
| | | this.view.removeAllLayers() |
| | | this.map.clearOverlays() |
| | | } |
| | | var time1 = this.sensorDate + ' ' + this.sensorTime[0] |
| | | var time2 = this.sensorDate + ' ' + this.sensorTime[1] |
| | | |
| | | this.$request({ |
| | | url: '/cruiser/cruiserTrajectory', |
| | | method: 'get', |
| | | params: { |
| | | mac: this.carMac, |
| | | time1, |
| | | time2 |
| | | time1: this.sensorDate[0], |
| | | time2: this.sensorDate[1] |
| | | } |
| | | }).then(res => { |
| | | console.log(res); |
| | | if (!res.data.length) { |
| | | this.noneData = true |
| | | this.loading = false |
| | |
| | | this.loading = false |
| | | if (this.responseJSON.length > 0) { |
| | | this.noneData = false |
| | | console.log(that.carMac, 'mac') |
| | | $.each(this.responseJSON, (item, value) => { |
| | | if (typeof (value.flylon) === 'undefined') { |
| | | showNoPoints() |
| | |
| | | point.a21005 = parseFloat(value.a21005).toFixed(3) |
| | | point.a05024 = parseInt(value.a05024) |
| | | point.a99054 = parseFloat(value.a99054).toFixed(3) |
| | | if (value.dustld - 0 !== 0 && value.dustld - 0 < 100 && that.carMac === 'p5dnd7a0243622') { |
| | | if (value.dustld - 0 !== 0 && value.dustld - 0 < 100 && (that.carMac === 'p5dnd7a0243622' || that.carMac === 'p5dnd7a0243625')) { |
| | | point.dustld = 100 |
| | | } else { |
| | | point.dustld = value.dustld - 0 |
| | |
| | | that.mapZoom = that.viewport.zoom |
| | | that.centerPoint = that.viewport.center |
| | | if (that.firstPlayFlag) { |
| | | that.map.centerAndZoom(that.centerPoint, that.mapZoom) |
| | | that.map.centerAndZoom(that.centerPoint, that.mapZoom) |
| | | that.view = new mapvgl.View({ |
| | | map: that.map |
| | | }) |
| | |
| | | var levels = getGrading(sensor, type, carMac) |
| | | $.each(levels, function(index, value) { |
| | | var color = value.color |
| | | var data = value.data |
| | | var data = value.data |
| | | if (data.length > 0) { |
| | | // 创建MapVGL图层管理器,需要使用插件mapvgl |
| | | that.shapeLayer = new mapvgl.ShapeLayer({ |
| | | color: color, // 柱状图颜色 |
| | | enablePicked: true, // 是否可以拾取 |
| | | selectedIndex: -1, // 选中项 |
| | | selectedColor: '#ee1111', // 选中项颜色 |
| | | selectedColor: '#ee1111', // 选中项颜色 |
| | | autoSelect: true, // 根据鼠标位置来自动设置选中项 |
| | | riseTime: 1800 // 楼块初始化升起时间 |
| | | }) |
| | |
| | | var sw = getPoint(225, point.lng, point.lat, that.distance) |
| | | var ne = getPoint(45, point.lng, point.lat, that.distance) |
| | | var data = point[sensor] |
| | | // 根据因子浓度变换方块颜色 |
| | | // 根据因子浓度变换方块颜色 |
| | | color = getColorAndLevel(sensor, data).color |
| | | var polygon = new BMapGL.Polygon([ |
| | | new BMapGL.Point(sw.lng, sw.lat), // 左下角 |
| | |
| | | }) |
| | | var lineLayer = new mapvgl.LineLayer({ |
| | | color: 'red', |
| | | width: 3, |
| | | width: 3, |
| | | animation: true, |
| | | duration: 10, // 循环时间2s |
| | | trailLength: 0.1, // 拖尾长度占间隔的0.4 |
| | |
| | | // point上添加label文本 |
| | | function setLabelStyle(content, point) { |
| | | var label = new BMapGL.Label("<span class='my-maptip'>" + content + '<br /><span>', // 为lable填写内容 |
| | | { |
| | | offset: new BMapGL.Size(-8, -10), // label的偏移量,为了让label的中心显示在点上 |
| | | position: point |
| | | } |
| | | { |
| | | offset: new BMapGL.Size(-8, -10), // label的偏移量,为了让label的中心显示在点上 |
| | | position: point |
| | | } |
| | | )// label的位置 |
| | | |
| | | var offsetSize = new BMapGL.Size(0, 0) |
| | |
| | | body, |
| | | html, |
| | | #map_container { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | margin: 0; |
| | | z-index: 0; |
| | | font-size: 14px; |
| | | font-family: "微软雅黑"; |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | margin: 0; |
| | | z-index: 0; |
| | | font-size: 14px; |
| | | font-family: "微软雅黑"; |
| | | } |
| | | |
| | | .main_body { |
| | | border: 0; |
| | | margin: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | border: 0; |
| | | margin: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | } |
| | | |
| | | #cpm { |
| | | width: 300px; |
| | | height: 100px; |
| | | position: absolute; |
| | | background-color: #ffffff; |
| | | display: none; |
| | | left: 50%; |
| | | top: 50%; |
| | | margin-left: -150px; |
| | | margin-top: -50px; |
| | | z-index: 11; |
| | | color: #000000; |
| | | border: 2px solid #FF7F50; |
| | | font-size: 28px; |
| | | line-height: 100px; |
| | | text-align: center; |
| | | width: 300px; |
| | | height: 100px; |
| | | position: absolute; |
| | | background-color: #ffffff; |
| | | display: none; |
| | | left: 50%; |
| | | top: 50%; |
| | | margin-left: -150px; |
| | | margin-top: -50px; |
| | | z-index: 11; |
| | | color: #000000; |
| | | border: 2px solid #FF7F50; |
| | | font-size: 28px; |
| | | line-height: 100px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .BMap_pop > img { |
| | | top: 42px !important; |
| | | margin-left: -10px; |
| | | top: 42px !important; |
| | | margin-left: -10px; |
| | | } |
| | | |
| | | .BMap_pop div:nth-child(1) div { |
| | | display: none; |
| | | display: none; |
| | | } |
| | | |
| | | .BMap_pop div:nth-child(3) { |
| | | display: none; |
| | | display: none; |
| | | } |
| | | |
| | | .BMap_pop div:nth-child(5) { |
| | | display: none; |
| | | display: none; |
| | | } |
| | | |
| | | .BMap_pop div:nth-child(7) { |
| | | display: none; |
| | | display: none; |
| | | } |
| | | |
| | | .BMap_pop div:nth-child(9) { |
| | | top: 35px !important; |
| | | border-radius: 5px; |
| | | top: 35px !important; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | #selectSenor { |
| | | position: absolute; |
| | | z-index: 1; |
| | | left: 30px; |
| | | top: 20px; |
| | | font-size: 20px; |
| | | background: lightgrey; |
| | | position: absolute; |
| | | z-index: 1; |
| | | left: 30px; |
| | | top: 20px; |
| | | font-size: 20px; |
| | | background: lightgrey; |
| | | } |
| | | |
| | | #type { |
| | | position: absolute; |
| | | z-index: 1; |
| | | left: 30px; |
| | | top: 50px; |
| | | font-size: 20px; |
| | | background: lightgrey; |
| | | position: absolute; |
| | | z-index: 1; |
| | | left: 30px; |
| | | top: 50px; |
| | | font-size: 20px; |
| | | background: lightgrey; |
| | | } |
| | | |
| | | button { |
| | | font-size: 15px; |
| | | font-size: 15px; |
| | | } |
| | | |
| | | .sensorLevel { |
| | | position: absolute; |
| | | z-index: 1; |
| | | bottom: 50px; |
| | | left: 10px; |
| | | width: 100px; |
| | | height: 200px; |
| | | position: absolute; |
| | | z-index: 1; |
| | | bottom: 50px; |
| | | left: 10px; |
| | | width: 100px; |
| | | height: 200px; |
| | | } |
| | | .carTop { |
| | | position: absolute; |
| | |
| | | border-right: 1px solid #aaa; |
| | | } |
| | | .carTop{ |
| | | &>.left:nth-child(1){ |
| | | border-radius: 5px 0 0 5px; |
| | | } |
| | | &>.left:nth-child(1){ |
| | | border-radius: 5px 0 0 5px; |
| | | } |
| | | } |
| | | .carTop { |
| | | .left{ |