From f65eb0dfefd593058abaf51404a7472677c4473e Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期一, 20 五月 2024 16:54:40 +0800 Subject: [PATCH] 地图层级 --- src/pages/territory/territory.vue | 219 ++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 154 insertions(+), 65 deletions(-) diff --git a/src/pages/territory/territory.vue b/src/pages/territory/territory.vue index 5337057..6221934 100644 --- a/src/pages/territory/territory.vue +++ b/src/pages/territory/territory.vue @@ -1,7 +1,11 @@ <template> <view class="pageBox"> <!-- 椤堕儴瀵艰埅 --> - <headNav :idIndex="idIndex" text="涓尰鍦板煙鍖昏氨" /> + <headNav + :idIndex="idIndex" + text="涓尰鍦板煙鍖昏氨" + style="z-index:999" + /> <view class="flex flex-center" style="width: 100%; margin: 0.2rem 0 0.34rem; justify-content: flex-start" @@ -11,9 +15,14 @@ placehold="杈撳叆濮撳悕/鍒悕/鏈濅唬/浼犱富鑱屼笟鎼滅储" @onSearch="onSearch" :isAvancedTrue="false" + :keyword="keyword" /> <ul class="flex"> - <li style="" v-for="(item, index) in dynasty" :key="item.id"> + <li + style="" + v-for="(item, index) in dynasty" + :key="item.id" + > <view @click="SchoolClick(item.id)" class="flex flex-center font-family school" @@ -41,7 +50,10 @@ border-radius: 50%; " ></view> - <view class="" style="color: #2c2c2c; font-size: 0.12rem">{{ + <view + class="" + style="color: #2c2c2c; font-size: 0.12rem" + >{{ item.name }}</view> </view> @@ -61,7 +73,10 @@ top: 2.2rem; " > - <div slot="header" class="clearfix"> + <div + slot="header" + class="clearfix" + > <span>浜虹墿 ({{ SearchArr.length }})</span> <el-button style=" @@ -72,14 +87,26 @@ " @click="isSearch = false" type="text" - >鍏抽棴</el-button - > + >鍏抽棴</el-button> </div> - <view class="" style="overflow: auto; height: 2.5rem"> - <ul class="information" v-for="(item, index) in SearchArr" :key="index"> - <li style="font-size: 0.18rem; font-weight: 700">{{ item.name }}</li> - <li>鐢熷崚骞�: {{ item.birthAndDeath }}</li> - <li>鏉ユ簮: {{ item.source }}</li> + <view + class="" + style="overflow: auto; height: 2.5rem" + > + <ul + class="information" + v-for="(item, index) in SearchArr" + :key="index" + @click="showCard(item)" + > + <li style="font-size: 0.18rem; font-weight: 700"> + {{ item.name ? item.name : "-" }} + </li> + <li> + 鐢熷崚骞�: + {{ item.birthAndDeath ? item.birthAndDeath : "-" }} + </li> + <li>鏉ユ簮: {{ item.source ? item.source : "-" }}</li> <li v-if="SearchArr.length - 1 !== index" style="margin: 0.1rem 0; border-bottom: 1px solid #d8d8d8" @@ -99,8 +126,13 @@ " :style="{ top: isTop, left: isLeft }" > - <div slot="header" class="clearfix"> - <span>{{ information[0].content }}</span> + <div + slot="header" + class="clearfix" + > + <span v-if="currentMark">{{ + currentMark.name ? currentMark.name : "-" + }}</span> <el-button style=" float: right; @@ -110,29 +142,35 @@ " @click="isEchTrue = false" type="text" - >鍏抽棴</el-button - > + >鍏抽棴</el-button> </div> - <ul class="information"> - <li v-for="(item, index) in information" :key="index"> - {{ item.label }}: {{ item.content }} + <ul + class="information" + v-if="currentMark" + > + <li> + 濮撳悕: + {{ currentMark.name ? currentMark.name : "-" }} </li> + <li>鍒悕: {{ currentMark.nikeName ? currentMark.nikeName : "-" }}</li> + <li> + 绫嶈疮: {{ currentMark.nativePlace ? currentMark.nativePlace : "-" }} + </li> + <li>鍖诲鍒嗙: {{ currentMark.barnch ? currentMark.barnch : "-" }}</li> + <li>灏忎紶: {{ currentMark.medical ? currentMark.medical : "-" }}</li> </ul> <el-button class="flex" @click="viewMoreClick" style="width: 100%; padding: 3px 0; font-size: 0.12rem; color: #597aa5" type="text" - >鏌ョ湅鏇村>></el-button - > + >鏌ョ湅鏇村>></el-button> </el-card> - <!-- echarts鍦板浘 --> - <!-- <view id="main" style="width: 100vw; position: relative"></view> --> <div id="map"></div> <!-- 鏈濅唬 --> <view class="flex flex-center" - style="width: 100%; position: fixed; bottom: 0.33rem; left: 0" + style="width: 100%; position: fixed; bottom: 0.33rem; left: 0; z-index: 99;" > <ul class="flex"> <li @@ -178,10 +216,12 @@ import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; import "leaflet.chinatmsproviders"; +import { getRetrieval } from "@/api/index.js"; export default { data() { return { // echarts鍏冪礌鐐瑰嚮鏃跺嚭鏉ョ殑寮圭獥鍜屽潗鏍� + keyword: "", isEchTrue: false, isLeft: 0, isTop: 0, @@ -330,6 +370,7 @@ ], // 鎼滅储鍚庢槸鍚︽樉绀哄脊妗� isSearch: false, + currentMark: null, SearchArr: [ { id: 1, @@ -356,64 +397,103 @@ // this.innt(); // }); // }) - this.initMap(); + this.getDataList(); }, methods: { + showCard(info) { + console.log(info); + console.log(this.markerList); + console.log(this.map); + const item = this.markerList.find((f) => f.id == info.id); + var latlng = L.latLng(item.yCoord, item.xCoord); + this.map.setView(latlng, 10); + }, + getDataList() { + getRetrieval({ keyword: this.keyword, dynasty: "" }).then((res) => { + let markerList = []; + const listData = res.object.personList; + for (let i = 0; i < listData.length; i++) { + const item = listData[i]; + if (item.NATIVE_PLACE?.length > 0) { + item.NATIVE_PLACE.forEach((citem) => { + if (citem.xCoord && citem.yCoord) { + markerList.push({ ...citem, ...item }); + } + }); + } + } + this.initMap(markerList); + this.SearchArr = markerList.map((item) => ({ + birthAndDeath: item?.BIRTH_YEAR[0]?.content1 + ? item?.BIRTH_YEAR[0]?.content1 + + "-" + + item?.DEATH_YEAR[0]?.content1 + : "-", + name: item?.NAME[0]?.content1, + source: "-", + id: item.id, + })); + this.markerList = markerList; + }); + }, //鍒濆鍖栧湴鍥� - initMap() { + initMap(markerList) { var map = L.map("map", { - attributionControl: false, preferCanvas: true, - withPopup: L.latLng(34.261, 108.96), - }).setView([39.91667, 116.41667], 4); + attributionControl: false, + }).setView([39.91667, 116.41667], 3); L.tileLayer .chinaProvider("TianDiTu.Normal.Map", { key: "76bc34ead7e30e663a4eded8aeaf5860", - // maxZoom: 18, - // minZoom: 5, + maxZoom: 18, + minZoom: 3, }) .addTo(map); - let DefaultIcon1 = L.icon({ iconUrl: this.icoName, iconSize: [24, 41], // 鍥炬爣鐨勫ぇ灏� 銆愬��1锛屽��2銆� 涓哄叿浣撲綘鑷畾涔夊浘鏍囩殑灏哄锛屾瘮濡傛垜鍥炬爣灏哄鏄�32脳52锛岃〃绀鸿鍥炬爣锛氬搴�32鍍忕礌锛岄珮搴︼細52鍍忕礌锛岄偅涔堝��1:灏辨槸32锛屽��2锛氬氨鏄�52 iconAnchor: [24, 41], // 鍥炬爣灏嗗搴旀爣璁扮偣鐨勪綅缃� 杩欎釜鏄噸鐐癸紝 銆愬��1锛屽��2銆戯紝鍊�1锛氫负鍥炬爣鍧愭爣绗竴涓��(鍗�32)鐨勪竴鍗婏紝鍊�2锛氫负鍥炬爣鍧愭爣绗簩涓��(鍗�52) popupAnchor: [1, -24], // 璇ョ偣鏄浉瀵逛簬iconAnchor寮瑰嚭淇℃伅鐨勪綅缃� 杩欎釜鏄垜鎵嬪姩璋冨嚭鏉ョ殑锛屾枃妗i粯璁ゅ師濮嬪�兼槸[-1锛�-76]锛屾垜鏄幓涓�鍗婂�硷紝鍙栦竴鍗婂�艰皟鍑烘潵鐨� }); - const marker1 = L.marker([34.261, 108.96], { - icon: DefaultIcon1, - }).addTo(map); - L.marker([39.90609, 116.38543], { - icon: DefaultIcon1, - }) - .addTo(map) - .bindPopup(this.popContent); //鍖椾含 - L.marker([29.55546, 106.5448], { - icon: DefaultIcon1, - }).addTo(map); // 閲嶅簡 - L.marker([30.56781, 114.30222], { - icon: DefaultIcon1, - }).addTo(map); //婀栧寳 - L.marker([18.23522, 109.51085], { - icon: DefaultIcon1, - }).addTo(map); //娴峰崡 - marker1.on("click", (e) => { - this.isEchTrue = true; - console.log(document.querySelector(".echartsTrue").offsetWidth); - console.log(document.querySelector(".echartsTrue").offsetHeight); - this.$nextTick(() => { - this.isTop = - e.containerPoint.y - - document.querySelector(".echartsTrue").offsetHeight / 2 + - "px"; - this.isLeft = - e.containerPoint.x - - document.querySelector(".echartsTrue").offsetWidth / 2 + - "px"; - }); + let htmlStr = '<p><span class="map-circle-name">'; + ('</span><br><span class="map-circle-count">'); + ("</span><p/>"); + let icon = L.divIcon({ + html: "<div class='map-circle-name'></div>", + iconSize: [80, 80], + className: "map-circle", }); + this.map = map; + if (markerList.length) { + for (let i = 0; i < markerList.length; i++) { + const item = markerList[i]; + const temp_mark = L.marker([item.yCoord, item.xCoord], { + icon: icon, + }).addTo(map); + temp_mark.on("click", (e) => { + this.isEchTrue = true; + this.currentMark = { + name: item?.WEAK_NAME[0]?.content1, + nikeName: item?.ALIAS[0]?.content2, + nativePlace: item?.content1, + barnch: item?.MEDICAL_BRANCH[0]?.content1, + medical: item?.MEDICAL_EXPERTISE[0]?.content1, + }; + this.$nextTick(() => { + this.isTop = + e.containerPoint.y - + document.querySelector(".echartsTrue").offsetHeight / 2 + + "px"; + this.isLeft = + e.containerPoint.x - + document.querySelector(".echartsTrue").offsetWidth / 2 + + "px"; + }); + }); + } + } }, // 鐐瑰嚮涓嬮潰鐨勬湞浠f寜閽� @@ -422,9 +502,11 @@ this.dynasty1Color = id; }, onSearch(val) { - console.log(val); - // this.isSearch = true; + this.keyword = val.text; + this.map.invalidateSize(); + + this.getDataList(); }, // 鐐瑰嚮涓婇潰鐨勬湞浠f寜閽� SchoolClick(id) { @@ -441,6 +523,12 @@ </script> <style> +::v-deep .map-circle-name { + width: 20px; + height: 20px; + border-radius: 50%; + background-color: #2070bc; +} .pageBox { width: 100%; height: 100%; @@ -561,9 +649,10 @@ } #map { - height: 600px; + height: 100%; width: 100%; margin: 0 auto; font-size: 14px !important; + z-index: 10 !important; } </style> -- Gitblit v1.9.1