From 9342d91f064ab3056d0fcfad5ad3f78833e8c536 Mon Sep 17 00:00:00 2001
From: y505174330 <505174330@qq.com>
Date: 星期六, 18 五月 2024 17:20:14 +0800
Subject: [PATCH] 1

---
 src/pages/territory/territory.vue |  259 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 156 insertions(+), 103 deletions(-)

diff --git a/src/pages/territory/territory.vue b/src/pages/territory/territory.vue
index 8e94f77..74aae92 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,24 +142,30 @@
           "
           @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
@@ -177,10 +215,13 @@
 import L from "leaflet";
 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,
@@ -329,6 +370,7 @@
       ],
       // 鎼滅储鍚庢槸鍚︽樉绀哄脊妗�
       isSearch: false,
+      currentMark: null,
       SearchArr: [
         {
           id: 1,
@@ -355,101 +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() {
-      // var map = L.map("map", {
-
-      //   center: [34.26, 108.96],
-
-      //   zoom: 4,
-
-      //   maxZoom: 18, //鏈�澶х缉鏀惧眰绾�
-
-      //   minZoom: 1, //鏈�灏忕缉鏀惧眰绾�
-
-      //   tileSize: 256, //鍒囩墖澶у皬
-
-      //   attributionControl: false, // 绉婚櫎鍙充笅瑙抣eaflet鏍囪瘑
-
-      //   zoomControl: false, //绂佺敤 + - 鎸夐挳
-
-      //   maxBounds: bounds, //璁剧疆杈圭晫
-
-      //   preferCanvas: true, //榛樿浣跨敤svg娓叉煋锛岃缃甤anvas娓叉煋
-
-      //   doubleClickZoom: false, //鍏抽棴鍙屽嚮缂╂斁
-
-      //   // dragging: false, //榧犳爣绉诲姩浜嬩欢
-      // });
+    initMap(markerList) {
       var map = L.map("map", {
-        attributionControl: false,
         preferCanvas: true,
-        withPopup: L.latLng(34.261, 108.96),
-      }).setView([39.91667, 116.41667], 4);
-
-      // L.tileLayer(
-      //   "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
-      // ).addTo(map);
-      L.tileLayer(
-        "http://t0.tianditu.gov.cn/vec_c/wmts?tk=36ef7d20eba483627b043f0909c493ee"
-      ).addTo(map);
+        attributionControl: false,
+      }).setView([39.91667, 116.41667], 3);
 
       L.tileLayer
-        .wmts(
-          "http://t{s}.tianditu.gov.cn/vec_c/wmts?tk=36ef7d20eba483627b043f0909c493ee",
-          {
-            layer: "vec", // 鐭㈤噺鍥惧眰
-            style: "default",
-            tilematrixset: "c", // 缂╂斁绾у埆
-            format: "tiles",
-            attribution: "Map Data &copy; 2023 Tencent",
-            subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
-          }
-        )
+        .chinaProvider("TianDiTu.Normal.Map", {
+          key: "76bc34ead7e30e663a4eded8aeaf5860",
+          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寜閽�
@@ -458,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) {
@@ -477,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%;
@@ -601,5 +653,6 @@
   width: 100%;
   margin: 0 auto;
   font-size: 14px !important;
+  /* z-index: -1 !important; */
 }
 </style>

--
Gitblit v1.9.1