<template> <div> <div style="width: 100vw; height: 100vh" id="container"></div> <div class="btn-wrapper"> <div class="myBtn"> <div class="el-btn" :class="{ active: targetNum == 1 }" @click.stop="addDevice" > <template v-if="iconClass == 'icon-create'"> <span class="left"> <i class="iconfont" :class="iconClass" /> </span> <span class="right">{{ createLabel }}</span> </template> <template v-else> <span class="newLetf">{{ createLabel }}</span> <span class="newRight"> <i class="iconfont" :class="iconClass" /> </span> </template> </div> <div class="el-btn" :class="{ active: targetNum == 2 }" @click.stop="editDevice" > <span class="left"> <i class="iconfont icon-compile" /> </span> <span class="right">编辑</span> </div> <div class="el-btn" :class="{ active: targetNum == 3 }" @click.stop="deleteDevice" > <span class="left"> <i class="iconfont icon-delete" /> </span> <span class="right">删除</span> </div> </div> <div class="animate"> <el-collapse-transition> <div v-show="deviceType"> <div v-for="item in changeBtnData" :key="item.value" class="option"> <div class="op-btn" :class="{ active: item.value == createValue }" @click.stop="createChange($event, item)" > <span class="left"> <i class="iconfont" :class="item.icon" /> </span> <span class="right">{{ item.label }}</span> </div> </div> </div> </el-collapse-transition> </div> </div> <el-input v-model="keyWord" placeholder="点击输入" id="tipinput" class="search-input" /> <el-button icon="el-icon-search" class="search-but" @click="search()" >搜索</el-button > <el-button icon="el-icon-refresh" class="refresh-but" @click="refreshMap()" >重置</el-button > <div class="leftBar-wrapper"> <div v-for="item in changeBtnData" :key="item.value" class="box" :class="{ active: leftBarNum.indexOf(item.value) >= 0 }" @click="leftBarChange(item)" > <div class="left"> <i class="iconfont" :class="item.icon"></i> </div> <div class="right"> {{ item.label }} </div> <i class="el-icon-check"></i> </div> </div> </div> </template> <script> import gaodeMap from "utils/gaodeMap.js"; import { pipeAllInfoList } from "@/api/device/pipe.js"; import { map, DEVICE_TYPE, mapOperateType } from "utils/gaodeMap.js"; import { getAllDeviceInfo } from "@/api/device/deviceInfo"; export default { data() { return { gaoMap: null, deviceType: false, value: "", operateType: "", radio1: "", // 1新建,2编辑,3删除,点按钮变色 targetNum: 0, // 左边的bar的active判定 leftBarNum: [1, 2, 3, 4, 7], // 新建里的值 iconClass: "icon-create", createValue: 0, createLabel: "新增", changeBtnData: [ { value: 1, icon: "icon-gd", label: "管道", }, { value: 2, icon: "icon-tyx", label: "调压箱", }, { value: 3, icon: "icon-fmj", label: "阀门井", }, { value: 4, icon: "icon-llj", label: "流量计", }, { value: 7, icon: "icon-ylb", label: "压力表", }, ], keyWord: "", }; }, mounted() { this.initMap(); }, methods: { initMap() { let gaoMap = new gaodeMap("石家庄"); this.gaoMap = gaoMap; window.addEventListener("click", this.barClose); gaoMap.addMouseTool(); gaoMap.searchTips("tipinput"); this.getDeviceInfo(); this.getPipeList(); }, // 左边的Bar修改值 leftBarChange(item) { // this.leftBarNum= this.leftBarNum != item.value ? item.value:0; const index = this.leftBarNum.indexOf(item.value); if (index >= 0) { this.leftBarNum.splice(index, 1); } else { this.leftBarNum.push(item.value); } // 1,2,3,4,7分别对应数据库type5,1,2,3,4 console.log(this.leftBarNum); if (this.leftBarNum.includes(1)) { this.gaoMap.lineShow(true); } else { this.gaoMap.lineShow(false); } // console.log("marks",this.gaoMap.markers) // this.gaoMap.markerShow(); if (this.leftBarNum.includes(2)) { this.gaoMap.markerShow(1, true); } else { this.gaoMap.markerShow(1, false); } if (this.leftBarNum.includes(3)) { this.gaoMap.markerShow(2, true); } else { this.gaoMap.markerShow(2, false); } if (this.leftBarNum.includes(4)) { this.gaoMap.markerShow(3, true); } else { this.gaoMap.markerShow(3, false); } if (this.leftBarNum.includes(7)) { this.gaoMap.markerShow(4, true); } else { this.gaoMap.markerShow(4, false); } }, addDevice() { if (this.iconClass == "icon-create") { this.targetNum = this.targetNum != 1 ? 1 : 0; } else { if (this.deviceType) { this.targetNum = 0; this.createReset(); this.gaoMap.newLineReset(); } } if (this.targetNum == 1 && this.createValue == 1) { this.gaoMap.lineType = 1; } else { this.gaoMap.lineType = 0; this.gaoMap.mouseTool.close(); } // 关闭当前的infowindow this.gaoMap.closeInfoWindow(); this.deviceType = !this.deviceType; this.gaoMap.mapOperateType = "add"; this.gaoMap.removeMarkerDragg(); }, // 选择新建项目哪个 createChange(e, item) { // e.stopPropagation(); this.deviceType = false; this.iconClass = item.icon; this.createValue = item.value; this.createLabel = item.label; if (this.targetNum == 1 && this.createValue == 1) { // 0是初始,1是新建 2是编辑 3删除 this.gaoMap.lineType = 1; if (this.gaoMap.newLineObj == null) { this.gaoMap.createNewLine(); } } else { // 如果不是管道,就归位 this.gaoMap.lineType = 0; // 如果不是管道了,把之前的管道清空 this.gaoMap.newLineReset(); // this.createReset(); // 其他 this.gaoMap.draw(this.createValue.toString()); } // 清空所有正在编辑状态的线 this.gaoMap.linePolyEditorAllClose(); }, // 新建按钮还原 createReset() { this.iconClass = "icon-create"; this.createValue = 0; this.createLabel = "新建"; this.gaoMap.closeAddMarker(); }, editDevice() { this.targetNum = this.targetNum != 2 ? 2 : 0; this.gaoMap.lineType = this.targetNum; if (this.targetNum != 2) { this.gaoMap.linePolyEditorAllClose(); this.gaoMap.removeMarkerDragg(); this.gaoMap.mapOperateType = "normal"; } else { // 如果正在新建线条,则清空 this.gaoMap.newLineReset(); this.deviceType = false; this.gaoMap.mapOperateType = "edit"; this.gaoMap.addMarkerDragg(); // this.gaoMap.placeSearch.clear(); this.gaoMap.closeAddMarker(); } // 关闭当前的infowindow this.gaoMap.closeInfoWindow(); this.createReset(); }, deleteDevice() { this.targetNum = this.targetNum != 3 ? 3 : 0; this.gaoMap.lineType = this.targetNum; if (this.targetNum != 3) { this.gaoMap.removeMarkerDragg(); this.gaoMap.mapOperateType = "normal"; } else { // 如果正在新建线条,则清空 this.gaoMap.newLineReset(); // 清空所有正在编辑状态的线 this.gaoMap.linePolyEditorAllClose(); this.deviceType = false; this.gaoMap.mapOperateType = "delete"; this.gaoMap.removeMarkerDragg(); //this.gaoMap.placeSearch.clear(); this.gaoMap.closeAddMarker(); } // 关闭当前的infowindow this.gaoMap.closeInfoWindow(); this.createReset(); }, selectDeviceType(val) { // if("add" == this.operationType){ this.gaoMap.draw(val); // } this.deviceType = false; this.value = ""; // 如果选择的是新建管道 if (val == 1) { this.gaoMap.lineType = 1; this.gaoMap.createNewLine(); } }, getDeviceInfo(queryParams) { this.loading = true; getAllDeviceInfo(queryParams).then((response) => { if (response.code == 200) { for (var i = 0; i < response.data.length; i++) { if ("1" == response.data[i].deviceType) { this.gaoMap.addMarker( DEVICE_TYPE.REGEULATORBOX, response.data[i] ); } if ("2" == response.data[i].deviceType) { this.gaoMap.addMarker(DEVICE_TYPE.VALUEWELL, response.data[i]); } if ("3" == response.data[i].deviceType) { this.gaoMap.addMarker(DEVICE_TYPE.FLOWMETER, response.data[i]); } if ("4" == response.data[i].deviceType) { this.gaoMap.addMarker(DEVICE_TYPE.PRESSUREGAGE, response.data[i]); } } } this.loading = false; }); }, getPipeList(queryParams) { pipeAllInfoList(queryParams).then((res) => { console.log("管道", res); if (res.code == 200) { this.gaoMap.addPolyline(res.data); } }); }, searchClear() { this.iconClass = "icon-create"; this.createValue = 0; this.createLabel = "新建"; this.targetNum = 0; this.gaoMap.lineType = 0; this.gaoMap.newLineReset(); this.gaoMap.linePolyEditorAllClose(); this.gaoMap.closeAddMarker(); this.gaoMap.removeMarkerDragg(); this.gaoMap.mapOperateType = "normal"; this.leftBarNum=[1,2,3,4,7] // map.remove(this.gaodeMap.markerOverlays); }, search() { this.searchClear(); map.clearMap(); this.gaoMap.placeSearch.clear(); if (!(!this.gaoMap.searchSelectAdcode && !this.gaoMap.searchSelectName)) { this.gaoMap.placeSearch.setCity(this.gaoMap.searchSelectAdcode); this.gaoMap.placeSearch.search(this.gaoMap.searchSelectName); this.getDeviceInfo({ deviceName: this.gaoMap.searchSelectName }); this.gaoMap.polyLines = []; this.getPipeList({ pipeName: this.gaoMap.searchSelectName }); this.gaoMap.searchSelectAdcode = undefined; this.gaoMap.searchSelectName = undefined; } else { this.gaoMap.placeSearch.search(this.keyWord); this.getDeviceInfo({ deviceName: this.keyWord }); this.gaoMap.polyLines = []; this.getPipeList({ pipeName: this.keyWord }); } }, // 新建下拉列表关闭 window点击事件 barClose() { console.log("window"); this.deviceType = false; // 关闭当前线条的infowindow this.gaoMap.closeInfoWindow(); // 如果没有选择的时候点window 则高亮消失 if (this.targetNum == 1 && this.iconClass == "icon-create") { this.targetNum = 0; } // 辅助新建重新画线 // if (!this.gaoMap.lineFlag || this.gaoMap.lineType != 1) return; console.log("利用window把lineFlagh恢复"); this.gaoMap.lineFlag = false; // this.gaoMap.createNewLine(); }, refreshMap() { this.iconClass = "icon-create"; this.createValue = 0; this.createLabel = "新建"; this.targetNum = 0; map.clearMap(); this.initMap(); this.leftBarNum=[1,2,3,4,7]; this.keyWord=""; }, }, beforeDestroy() { console.log("移除window事件"); window.removeEventListener("click", this.barClose); }, }; </script> <style lang="scss" scoped> // 解决地图下拉框 #container{ position: fixed; top: 80px; bottom:0; width: 100%; } // 左边的bar .leftBar-wrapper { position: fixed; left: 100px; top: 150px; .box { width: 180px; height: 48px; display: flex; background-color: #ffffff; box-sizing: border-box; border: 1px solid rgba(0, 0, 0, 0.1); border-top: none; cursor: pointer; position: relative; > i { position: absolute; line-height: 48px; right: 20px; color: #fff; } &:hover { // background-color: #053b6a; // color: #ffffff; // > i { // color:#fff; // } } &:hover .left, &:hover .right { // color: #ffffff; } &.active { // background-color: #053b6a; .left, .right { color: #053b6a; } > i { color: #053b6a; } } .left { color: #053b6a; line-height: 48px; margin-left: 40px; } .right { color: #1d1d1d; line-height: 48px; margin-left: 20px; } } } .btn-wrapper { position: fixed; right: 32px; top: 100px; .myBtn { display: flex; justify-content: space-between; .el-btn { width: 144px; height: 44px; background-color: #053b6a; margin-right: 22px; border-radius: 4px; text-align: center; line-height: 44px; color: #fff; cursor: pointer; font-size: 18px; display: flex; justify-content: space-between; &.active { background: #31eaea; color: #053b6a !important; } .left { padding-left: 38px; i { font-size: 18px; } } .right { padding-right: 38px; } .newLetf { margin-left: 20px; } .newRight { margin-right: 20px; position: relative; i { position: absolute; right: 0px; top: 1px; font-size: 30px; } } } } .animate { .option { .op-btn { width: 144px; height: 38px; border-radius: 0; color: #053b6a; line-height: 38px; background-color: #fff; cursor: pointer; position: relative; border: 1px solid #cccccc; border-top: 0; &.active { background-image: url("../../../assets/images/bac1.png"); } .left { position: relative; margin-right: 30px; margin-left: 22px; i { position: absolute; top: -7px; font-size: 20px; } } .right { display: inline-block; font-size: 14px; line-height: 38px; } &:hover { background-image: url("../../../assets/images/bac1.png"); } } } } } .input-card { display: flex; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border-radius: 0.25rem; width: 22rem; border-width: 0; border-radius: 0.4rem; box-shadow: 0 2px 6px 0 rgba(114, 124, 245, 0.5); position: fixed; bottom: 1rem; right: 1rem; -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 0.75rem 1.25rem; } .input-item { position: relative; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: center; align-items: center; width: 100%; height: 2.2rem; } input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; -webkit-box-sizing: border-box; box-sizing: border-box; padding: 0; margin: 0 0.5rem 0 0; } .btn { display: inline-block; font-weight: 400; text-align: center; white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border: 1px solid transparent; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; background-color: transparent; background-image: none; color: #25a5f7; border-color: #25a5f7; padding: 0.25rem 0.5rem; line-height: 1.5; border-radius: 1rem; -webkit-appearance: button; cursor: pointer; width: 6rem; margin: 0 1rem 0 2rem; } .btn:hover { color: #fff; background-color: #25a5f7; border-color: #25a5f7; } .input-text { width: 4rem; margin-right: 1rem; } .search-input { position: fixed; top: 100px; left: 7%; width: 240px; } .search-but { position: fixed; top: 100px; left: 23%; width: 85px; color: white; background-color: #053b6a; } .refresh-but { position: fixed; top: 100px; left: 28%; width: 85px; color: white; background-color: #053b6a; } </style>