<template> <div class="ucs-leaflet-map"> <div id="contain"> <div class="map-box"> <div :id="mapId" class="normal-map-content"> <tiled-map :hi-map="hiMap" :map-id="mapId" /> </div> </div> <div class="searchPoint"> <!-- 第一版 --> <!-- <el-autocomplete class="inline-input" prefix-icon="Search" v-model="state" :fetch-suggestions="querySearchAsync" placeholder="搜索地点" :trigger-on-focus="false" @select="handleSelect" :teleported="false" popper-class="my-autocomplete" > <template v-slot="{ item }"> <div style="margin-bottom: -10px" class="name"> {{ item.text || '' }} </div> <span style="font-size: 10px; color: #afbcc5"> {{ item.detail.address || '' }} </span> </template> <template v-slot:append>搜索</template> </el-autocomplete> --> <!-- 第二版 --> <el-select class="input-with-select" v-model="addressType" style="width: 115px" @change="address=''"> <el-option label="兴趣点" value="1" /> <el-option label="点位" value="2" /> </el-select> <el-autocomplete v-if="addressType==1" v-model="address" :fetch-suggestions="querySearch" clearable class="input-with-select" placeholder="请输入关键字" @select=" (addressItem) => { selectedAddress(addressItem, i) } " /> <!-- <el-input v-model="address" placeholder="请输入关键词" class="input-with-select" @keyup.enter="handleEnter" > </el-input> --> <el-autocomplete v-else-if="addressType==2" v-model="address" placeholder="请输入关键字" :fetch-suggestions=" (queryString, cb) => { searchAddressByKeyWord(queryString, cb, i) } " :trigger-on-focus="false" :popper-append-to-body="false" class="address-auto-complete-input" @select=" (addressItem) => { selectedAddress(addressItem, i) } " /> </div> <svg t="1656319660834" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1691" width="0.48rem" height="0.48rem" @click="circleMode()" > <path d="M736.21333333 638.08l69.76-54.08c5.22666667-4.05333333 8-10.45333333 7.46666667-17.06666667-0.53333333-6.61333333-4.37333333-12.48-10.24-15.57333333L450.02666666 361.38666666c-6.82666667-3.62666667-15.04-2.98666667-21.12 1.70666667-6.08 4.69333333-8.85333333 12.58666667-7.04 20.05333333l95.57333334 389.54666667c1.6 6.4 6.29333333 11.62666667 12.48 13.76 6.18666667 2.13333333 13.12 1.06666667 18.34666666-2.98666667l69.86666667-54.08L769.06666666 924.37333333c3.2 4.05333333 7.78666667 6.72 12.90666667 7.36 0.85333333 0.10666667 1.6 0.10666667 2.45333333 0.10666667 4.26666667 0 8.53333333-1.38666667 11.94666667-4.05333334l87.25333333-67.52c8.53333333-6.61333333 10.02666667-18.88 3.52-27.30666666L736.21333333 638.08zM178.24 282.02666666l-31.25333334-21.01333333c-14.61333333 21.76-27.30666667 44.90666667-37.86666666 68.90666667l34.56 15.14666666c9.6-21.86666667 21.22666667-43.09333333 34.56-63.04zM549.54666666 103.89333333l3.2-37.54666667c-26.02666667-2.24-52.69333333-2.13333333-78.50666666 0.21333334l3.41333333 37.54666666c23.57333333-2.13333333 48-2.24 71.89333333-0.21333333zM120.74666666 413.22666666l-36.69333333-8.74666666c-6.08 25.38666667-9.92 51.52-11.30666667 77.76l37.65333334 2.13333333c1.38666667-24 4.8-47.89333333 10.34666666-71.14666667zM112.64 556.26666666l-37.44 4.48c3.09333333 26.02666667 8.64 51.94666667 16.32 76.90666667l36.05333333-11.09333333c-7.04-22.82666667-12.05333333-46.50666667-14.93333333-70.29333334zM919.36 327.46666666c-10.66666667-23.89333333-23.46666667-46.93333333-38.29333334-68.58666666l-31.14666666 21.22666666c13.44 19.84 25.28 40.96 34.98666666 62.82666667l34.45333334-15.46666667zM831.36 197.97333333c-18.34666667-18.77333333-38.4-35.94666667-59.62666667-51.09333333L749.86666666 177.6c19.52 13.86666667 37.86666667 29.65333333 54.61333334 46.82666666l26.88-26.45333333zM703.89333333 107.09333333c-23.68-11.2-48.53333333-20.37333333-73.81333333-27.09333333l-9.81333334 36.37333333c23.14666667 6.18666667 45.86666667 14.61333333 67.52 24.85333333l16.10666667-34.13333333zM277.76 178.98666666l-22.08-30.50666666c-21.22666667 15.36-41.17333333 32.64-59.41333334 51.52l27.09333334 26.13333333c16.74666667-17.28 35.09333333-33.06666667 54.4-47.14666667zM348.90666666 918.08c24.32 9.81333333 49.6 17.49333333 75.2 22.82666666l7.68-36.90666666c-23.46666667-4.90666667-46.61333333-11.94666667-68.8-20.90666667l-14.08 34.98666667zM503.25333333 912.42666666l-1.06666667 37.65333334c4.16 0.10666667 8.42666667 0.21333333 12.58666667 0.21333333 21.97333333 0 44.16-1.6 65.81333333-4.90666667l-5.54666666-37.22666666c-23.57333333 3.52-47.89333333 4.90666667-71.78666667 4.26666666zM944.85333333 401.81333333l-36.58666667 8.96c5.65333333 23.14666667 9.28 47.14666667 10.77333334 71.04l37.65333333-2.34666667c-1.70666667-26.13333333-5.65333333-52.26666667-11.84-77.65333333zM396.8 80.64c-25.28 6.93333333-50.02666667 16.21333333-73.6 27.62666666l16.32 33.92c21.54666667-10.34666667 44.26666667-18.88 67.30666666-25.17333333L396.8 80.64zM121.17333333 710.4c11.94666667 23.25333333 26.13333333 45.54666667 42.13333333 66.34666666l29.86666667-22.93333333c-14.61333333-18.98666667-27.52-39.46666667-38.50666667-60.69333333L121.17333333 710.4zM216.42666666 834.66666666c19.30666667 17.70666667 40.42666667 33.70666667 62.50666667 47.68l20.05333333-31.89333333c-20.26666667-12.8-39.46666667-27.41333333-57.17333333-43.62666667l-25.38666667 27.84z" p-id="1692" fill="#1296db" data-spm-anchor-id="a313x.7781069.0.i0" ></path> </svg> <img class="icon-poylon" @click="areaMode()" src="~@/supermap/image/icon-poylon.png"> </div> <video-play v-if="openVideo" :key="channelCode" :channel-id="channelCode" ></video-play> </div> </template> <script> import { ElMessage } from 'element-plus' import { message } from 'ant-design-vue' import { HieimpMap } from '@/supermap/map-init' import TiledMap from './components/tiledMap' import { createCameraDetailsPop } from '@/supermap/createMarkerPopup' import VideoPlay from './components/VideoPlay' import { getCameraAll, getCameraLabel, getCameraAllLabel, searchCamera, getCameraAllOrgan, getCameraByParentId, selectByLabelName, selectByChannelName, } from '@/api/videoSurveillance' import { getCameraByCondition,getListForPOI,CameraConditionPlaceType } from '@/api/file' import mybus from '@/myplugins/mybus' import * as turf from '@turf/turf'; export default { data() { return { hiMap: new HieimpMap(), // 地图全局对象 mapId: 'map-single', // 地图容器的id cameraAllData: [], checkboxGroup: [], tabList: [], state: '', timeout: null, camreaTree: [], camreaTreeIsShow: true, camreaTreeSingle: [], checkStatus: '2', labelSearch: '', timer: null, openVideo: false, channelCode: [], circleModeFlag: false, areaModeFlag: false, addressMatchUrl: '', address: '', addressType:'1', whoShow1: whoShow, mapSearchParam: { // 地图搜索初始化数据 parentId: '', checkStatus: '1', pageNum: '1', pageSize: '20000', gpsX: '', gpsY: '', radius: '', borderPolygonList: [], type: 0, //0是无,1画圆,2不规则 }, pointAllData:[], restaurants:[], } }, components: { TiledMap, VideoPlay }, created() {}, watch: { checkStatus(newV, oldV) { console.log(newV) this.$refs.tree.filter(newV) }, }, mounted() { this.hiMapFun = this.hiMap.myMapFun(this.hiMap.mapObj) this.multiScreenFun = this.hiMap.multiScreenFun( this.hiMap.mapObj, this.hiMapFun ) // this.hiMap.mapObj.map.flyTo({ lat: 36.06, lng: 120.3899 }, 16) this.addressMatchUrl = window.SITE_CONFIG.POI_URL // 初始化地址检索服务 this.initAddressMatchService() this.getCameraAllLabel() // 初始化展示所有摄像头,地图上扎点 this.getCameraAllPage() // this.getMapPoint() // 点击左侧根据parentId查询摄像头列表 mybus.off('getCameraByParentId') mybus.on('getCameraByParentId', (parentId) => { this.mapSearchParam.parentId = parentId this.mapSearchParam.type = "1" this.mapSearchParam.pageSize = 10000 this.getCameraByParentId() }) //表格勾选 mybus.off('selectTablePoint') mybus.on('selectTablePoint', (pointlist) => { console.log("mounted -> pointlist", pointlist); for(let i=0;i<this.pointAllData.length;i++){ this.pointAllData[i].active = false for(let j=0;j<pointlist.length;j++){ if(this.pointAllData[i].channelCode == pointlist[j].channelCode){ this.pointAllData[i].active = true } } } //this.addResourceTomap('videoMap', this.pointAllData); }) //所有摄像头数据上图 mybus.off('cameraDataOnMap') mybus.on('cameraDataOnMap', (data) => { this.addResourceTomap('videoMap', data) }) //行政区划点击查询摄像头 mybus.off('CameraConditionPlaceType') mybus.on('CameraConditionPlaceType', (data) => { this.queryCameraConditionPlace(data) }) }, methods: { //查询标签视频 queryCameraConditionPlace(data) { let params = { placeTypeCode: data, pageNum: "1", pageSize: 30000, } CameraConditionPlaceType(params).then((res) => { this.addResourceTomap('videoMap', res.data.data) }) }, // 查询 querySearch (queryString, cb) { console.log('querySearch',queryString, cb,this.restaurants) if(queryString){ getListForPOI({keywords:queryString}).then(res => { if(res.data.data.rows[0]){ res.data.data.rows.map( val =>{ let arr = val.location.split(',') val.location = {y:arr[1],x:arr[0]} val.value = val.name }) const results =res.data.data.rows cb(results) }else{ ElMessage({ showClose: true, message: '未查询到兴趣点!', type: 'warning', }) } }) }else{ cb([]) } // const results = queryString // ? this.restaurants.filter(createFilter(queryString)) // : this.restaurants // call callback function to return suggestions }, createFilter (queryString) { return (restaurant) => { return ( restaurant.toLowerCase().indexOf(queryString.toLowerCase()) === 0 ) } }, // 查询 handleEnter(queryString, cb){ console.log('查询',this.address,this.addressType) if(this.address){ getListForPOI({keywords:this.address}).then(res => { console.log('POI=========>',res.data.data) if(res.data.data.rows[0]){ let arr = res.data.data.rows[0].location.split(',') this.selectedAddress({location:{y:arr[1],x:arr[0]}}) }else{ ElMessage({ showClose: true, message: '未查询到兴趣点!', type: 'warning', }) } }) }else{ ElMessage({ showClose: true, message: '请输入兴趣点!', type: 'warning', }) } }, selectedAddress(item, index) { mybus.emit('clearChoose') this.getCameraAllPage() // 跳转到相应经纬度 console.log('跳转', item) const latLng = { lat: item.location.y, lng: item.location.x, } this.hiMapFun.mapFlyTo(latLng) }, //框选 areaSelectResource(){ // 修改控件提示 L.drawLocal.draw.handlers.polygon.tooltip.start = '单击开始绘制形状' L.drawLocal.draw.handlers.polygon.tooltip.cont = '单击继续绘制形状' L.drawLocal.draw.handlers.polygon.tooltip.end = '单击继续绘制形状,双击结束绘制' this.hiMap.mapObj.map.off('draw:created') this.hiMap.mapObj.drawPolygon.enable() this.hiMap.mapObj.map.once('draw:created', (e) => { const type = e.layerType const circleLayer = e.layer console.log('查询图层draw:created', e) if (type === 'polygon') { const polygonLayer = e.layer; this.hiMap.mapObj.featureGroup.addLayer(polygonLayer); this.hiMap.mapObj.layerGroup.set('rectangleSelectLayer', polygonLayer); const arr = []; const latlngs = []; //选择的坐标组 polygonLayer._latlngs[0].map(item => { // const bdLonLat = wgs84LL2bdLL(); arr.push(turf.point([item.lng, item.lat])); latlngs.push([item.lat,item.lng]) }); const points = turf.featureCollection(arr); const rect = turf.convex(points); this.mapSearchParam.borderPolygonList = latlngs this.mapSearchParam.type = 2 const params = { borderPolygonList: latlngs, type: this.mapSearchParam.type, } // mybus.emit('getListByMap', params); this.getCameraByParentId('map'); console.log("areaSelectResource -> latlngs", latlngs) } }) }, // 圈选方法 circleSelectResource() { L.drawLocal.draw.handlers.circle.tooltip.start = '请圈选区域' L.drawLocal.draw.handlers.circle.radius = '半径' L.drawLocal.draw.handlers.circle.tooltip.end = '松开绘制完成' this.hiMap.mapObj.map.off('draw:created') this.hiMap.mapObj.drawCircle.enable() this.hiMap.mapObj.map.once('draw:created', (e) => { const type = e.layerType const circleLayer = e.layer if (type === 'circle') { const radius = e.layer._mRadius if (radius > 5000) { message.info('最大支持5km范围的圈选') } else { const circlePloygonLayer = this.multiScreenFun.createCircleLayer(circleLayer) this.hiMap.mapObj.featureGroup.addLayer(circlePloygonLayer) this.hiMap.mapObj.layerGroup.set( 'circlePloygonLayer', circlePloygonLayer ) console.log('查询图层为何发生了改变', e.layer) this.mapSearchParam.gpsX = e.layer._latlng.lng this.mapSearchParam.gpsY = e.layer._latlng.lat this.mapSearchParam.radius = radius this.mapSearchParam.type = 1 const params = { gpsX: this.mapSearchParam.gpsX, gpsY: this.mapSearchParam.gpsY, radius: radius, type: this.mapSearchParam.type, } // mybus.emit('getListByMap', params) this.getCameraByParentId('map') } } }) }, getCameraByParentId(type) { if (!this.whoShow1.itShowXiHaiAn) { getCameraByParentId(this.mapSearchParam).then((res) => { console.log('根据parent查询摄像头', res.data.data) this.addResourceTomap('videoMap', res.data.data) }) } else { console.log('根据parent查询摄像头111111',this.mapSearchParam) let params = { regionId: this.mapSearchParam.parentId || '70be8c5b664f4bcf869d82f2e8335051', pageNum: this.mapSearchParam.pageNum, pageSize: this.mapSearchParam.type!=0?this.mapSearchParam.pageSize:10, name: this.mapSearchParam.cameraName || '', longitude: this.mapSearchParam.gpsX || '', latitude: this.mapSearchParam.gpsY || '', radius: this.mapSearchParam.radius || '', type: this.mapSearchParam.type, borderPolygonList: this.mapSearchParam.borderPolygonList || [], } let paramsFather = '' let i = 1 for (var key in params) { if (params[key] === '') { delete params[key] } else { if (i != 1) { paramsFather += `&${key}=` + params[key] i += 1 } else if (i == 1) { paramsFather += `${key}=` + params[key] i += 1 } } } params.type='0'; getCameraByCondition(params).then((res) => { //console.log('根据parent查询摄像头44444', res.data.data) if(type=='map'){ let params = this.mapSearchParam; params.dataSource = res.data.data||0; params.total = res.data.count||0; mybus.emit('getListByMap', params); } this.pointAllData = res.data.data; if(this.mapSearchParam.type!=0){ this.addResourceTomap('videoMap', res.data.data) } else {this.addResourceTomap('videoMap', []) } //查询全部时不打点} }) } }, // 初始化地址匹配服务 initAddressMatchService() { this.L = window.L || {} // this.addressMatchService = L.supermap.addressMatchService( // this.addressMatchUrl // ) }, areaMode(){ // 转换不规则形状模式 if(this.circleModeFlag){ this.resetCircle(); this.circleModeFlag = false; } this.areaModeFlag = !this.areaModeFlag; if (this.areaModeFlag) { // 打开不规则形状模式模式 this.areaSelectResource() } else { this.resetArea(); } }, circleMode() { if(this.areaModeFlag){ this.resetArea(); this.areaModeFlag = false; } // 转换圈选模式 this.circleModeFlag = !this.circleModeFlag if (this.circleModeFlag) { // 打开圈选模式 this.circleSelectResource() } else { this.resetCircle(); } }, resetCircle(){ // 关闭圈选模式,清空圈选内容,重新上图 this.hiMapFun.removeLayerByLayerName('circlePloygonLayer') // 重置内容 this.mapSearchParam.gpsX = '' this.mapSearchParam.gpsY = '' this.mapSearchParam.radius = '' this.mapSearchParam.type = 0; const params = { gpsX: this.mapSearchParam.gpsX, gpsY: this.mapSearchParam.gpsY, radius: this.mapSearchParam.radius, type: this.mapSearchParam.type } this.getCameraByParentId('map') // mybus.emit('getListByMap', params); }, resetArea(){ // 关闭不规则形状模式模式,清空不规则形状模式内容,重新上图 this.hiMapFun.removeLayerByLayerName('rectangleSelectLayer'); // 重置内容 this.mapSearchParam.borderPolygonList = []; this.mapSearchParam.type = 0; const params = { borderPolygonList: this.mapSearchParam.borderPolygonList, type: this.mapSearchParam.type } this.getCameraByParentId('map') // mybus.emit('getListByMap', params); }, //查询地址建议匹配 async searchAddressByKeyWord(queryString, cb, indexX) { console.log('querySearch',queryString, cb,this.restaurants) if(queryString){ getCameraByCondition({ pageNum: 1, pageSize: 10, regionId: "70be8c5b664f4bcf869d82f2e8335051", type: "0", name:queryString, }).then(res => { if(res.data.data[0]){ res.data.data.map( val =>{ val.location = {y:val.gpsY,x:val.gpsX} val.value = val.channelName }) const results = res.data.data cb(results) }else{ ElMessage({ showClose: true, message: '未查询到点位!', type: 'warning', }) } }) }else{ cb([]) } }, getCameraAllPage(page) { let params = { regionId: "70be8c5b664f4bcf869d82f2e8335051", pageNum: "1", pageSize: 30000, type: 0, borderPolygonList: [] } getCameraByCondition(params).then((res) => { // let t1 = new Date().getTime(); // this.cameraAllData = res.data.data this.addResourceTomap('videoMap', res.data.data) // let t2 = new Date().getTime(); // console.log("时间#############" + (t2 - t1)); }) }, getCameraAllLabel() {}, tabChange(item) { if (this.checkboxGroup.indexOf(item.labelName) !== -1) { if (item.labelName == '全部') { this.addResourceTomap('全部', this.cameraAllData) this.checkboxGroup = ['全部'] } else { this.hiMapFun.removeLayerByLayerName('全部') getCameraLabel({ labelCode: item.labelCode }).then((res) => { this.addResourceTomap(item.labelName, res.data.data) res.data.data.forEach((item) => { this.camreaTreeSingle.forEach((val) => { if (item.nodeName == val.channelName) { val.children.push(item) } }) }) this.camreaTreeIsShow = false }) } } else { this.hiMapFun.removeLayerByLayerName(item.labelName) this.checkStatus = '2' this.camreaTreeIsShow = true getCameraAllOrgan({ parentId: 'S4NbecfYB1DBH8HNULGS34' }).then( (res) => { this.camreaTree = res.data.data } ) } }, addResourceTomap(type, data) { console.log('datadatadata',data); const dataEvent = [] if(data&&data.length>0){ data.forEach((item) => { const arr = [0, 0.0, '', '0', '0.0'] if (arr.indexOf(item.gpsX) == -1) { dataEvent.push({ latLng: { lat: Number(item.gpsY), lng: Number(item.gpsX) }, data: item, active: item.active, type: 'videoSurveillance', }) } }) } console.log('点击后上上图数据', dataEvent) this.getMapPoint(dataEvent, 'icon_camare.png', type) }, getMapPoint(data, img, type) { this.hiMapFun.clearAllLayers(); const features = data // debugger this.hiMapFun.addResourceOnMapWithoutSuperMapCluster( features, img, type, createCameraDetailsPop, 'icon_camare_active.png' ) }, querySearchAsync(queryString, cb) { if (queryString.length > 0) { searchCamera(queryString).then((res) => { cb(res.data.suggestions) }) } }, handleSelect(item) { console.log('1111',item) this.hiMapFun.clearAllLayers() //定时器方法 let arr = item.detail.location.split(',') const searchDataDetail = [ { latLng: { lat: arr[1], lng: arr[0] }, data: item, }, ] this.hiMap.mapObj.map.flyTo({ lat: arr[1], lng: arr[0] }) this.hiMapFun.openPopupVideoSurveillance(searchDataDetail[0]) this.hiMapFun.addResourceOnMapWithoutSuperMapCluster( searchDataDetail, 'poi-red.png', 'address' ) this.timer = setTimeout(() => { this.addResourceTomap('全部', this.cameraAllData) }, 1000) this.checkboxGroup = [] }, handleNodeClick(data) { console.log(data) getCameraAllOrgan({ parentId: data.id }).then((res) => { this.camreaTree.forEach((item) => { item.children = res.data.data }) console.log(this.camreaTree) }) }, treeCameraClick(data) { console.log(data) if (data.channelCode) { const cameraTree = [ { latLng: { lat: data.gpsY, lng: data.gpsX }, data: data, type: 'cameraTree', }, ] this.hiMapFun.removeLayerByLayerName('cameraTree') this.hiMapFun.openPopupVideoSurveillance(cameraTree[0]) const arr = [0, 0.0, '', '0', '0.0'] if (arr.indexOf(data.gpsX) == -1) { this.hiMapFun.addResourceOnMapWithoutSuperMapCluster( cameraTree, 'poi-red.png', 'cameraTree' ) this.hiMap.mapObj.map.flyTo({ lat: data.gpsY, lng: data.gpsX }) } } }, searchLabel(value) { const params = { labelName: value, } selectByLabelName(params).then((res) => { console.log(res) this.tabList = res.data.data }) }, searchCameraTree(value) { if (value.length > 0) { const params = { channelName: value, } selectByChannelName(params).then((res) => { console.log(res) this.camreaTree = [] res.data.data.forEach((item) => { this.camreaTree.push({ name: item.channelName, gpsX: item.gpsX, gpsY: item.gpsY, channelCode: item.channelCode, leaf: true, }) }) }) } else { getCameraAllOrgan({ parentId: 'S4NbecfYB1DBH8HNULGS34' }).then( (res) => { this.camreaTree = res.data.data } ) } }, refresh() { this.hiMapFun.clearAllLayers() this.addResourceTomap('全部', this.cameraAllData) this.checkboxGroup = [] }, reset() { this.checkboxGroup = [] this.checkStatus = '1' this.camreaTreeIsShow = true getCameraAllOrgan({ parentId: 'S4NbecfYB1DBH8HNULGS34' }).then( (res) => { this.camreaTree = res.data.data } ) document.getElementById('tree').scrollTop = 0 }, filterNode(value, data) { if (value == '2') return true if (value == '0') { return data.checkStatus == 0 } if (value == '1') { return data.checkStatus == 1 } }, }, beforeUnmount() { clearInterval(this.timer) // 清除定时器 this.timer = null }, } </script> <style scoped lang="less"> .map-box { width: 100%; height: 100%; // height: 624px; position: absolute; .normal-map-content { width: 100%; height: 100%; position: absolute; } } #contain { .searchPoint { position: absolute; z-index: 800; top: 0.1rem; right: 0.1rem; border-radius: 4px; .reset-button { margin-left: 20px; color: #fff; cursor: pointer; z-index: 1008; } } } </style> <style lang="less"> .ucs-leaflet-map { .iclient-leaflet-logo { display: none; } .leaflet-control-attribution { display: none; } svg,.icon-poylon { position: absolute; bottom: 0.1rem; right: 0.1rem; z-index: 988; cursor: pointer; } .input-with-select{ width: 2.4rem; svg{ position: relative; bottom: 0; right: 0; } } .icon-poylon { width: 0.46rem; bottom: 0.6rem; } .address-auto-complete-input { width: 2.4rem; } ::v-deep.el-autocomplete .el-popper { width: auto !important; max-width: 2.4rem; } } .input-with-select{ width: 2.4rem; svg{ position: relative; bottom: 0; right: 0; } } </style>