From 1ff13ceb222d4059252201504cd963df26cafec8 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期三, 23 八月 2023 17:13:43 +0800
Subject: [PATCH] 添加点击矢量图层详细信息展示功能,修改图层管理加载顺序

---
 src/views/query/detailsQuery.vue |  241 ++++++++++++++++++++++++++++++++++++++++
 src/api/api.js                   |   17 ++
 src/assets/js/Map/server.js      |   37 ++++++
 src/views/layer/doubleLayer.vue  |    4 
 src/views/layer/layerDetail.vue  |    1 
 src/views/layer/layerManage.vue  |   12 +
 src/views/Index.vue              |    5 
 src/store/index.ts               |    5 
 8 files changed, 313 insertions(+), 9 deletions(-)

diff --git a/src/api/api.js b/src/api/api.js
index 5bc39ee..e6a93e0 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -53,3 +53,20 @@
 export function res_selectByPageAndCount(params) {
   return request.get("/res/selectByPageAndCount", { params: params });
 }
+
+//鏁版嵁鏌ヨ=>鏍规嵁瀹炰綋鍚嶆煡璇㈣〃鍚�
+export function dataQuery_selectTabByEntity(params) {
+  return request.get('/dataQuery/selectTabByEntity', { params: params });
+}
+//鏁版嵁绠$悊=>鏁版嵁妫�绱�=>鏌ヨ瀛楁淇℃伅
+export function inquiry_selectFields(params) {
+  return request.get('/inquiry/selectFields', { params: params });
+}
+//鏁版嵁绠$悊=>鏁版嵁妫�绱�=>鏌ヨ鍊煎煙淇℃伅
+export function inquiry_selectDomains(params) {
+  return request.get('/inquiry/selectDomains', { params: params });
+}
+//鏁版嵁鏌ヨ=>鏍规嵁GID鏌ヨ
+export function dataQuery_selectByGid(params) {
+  return request.get('/dataQuery/selectByGid', { params: params });
+}
diff --git a/src/assets/js/Map/server.js b/src/assets/js/Map/server.js
index 642d15a..65ea768 100644
--- a/src/assets/js/Map/server.js
+++ b/src/assets/js/Map/server.js
@@ -1,7 +1,7 @@
 import { getToken } from "@/utils/auth";
 //閰嶇疆鏂囦欢鍦板潃
 import config from "./config";
-
+import store from "@/store";
 const server = {
   layerList: [],
   addTreeData(treeNode) {
@@ -341,9 +341,16 @@
   //鍔犺浇GeoServer-WMS鏈嶅姟
   setAddGeoWmsLayer(res) {
     var url = this.getLayrUrl(res);
+    var that = this
+    var getFeatureInfoFormat = new SmartEarth.Cesium.GetFeatureInfoFormat("html", null, function (html) {
+      that.getFeatureInfo(html)
+    });
     let layer = new SmartEarth.Cesium.WebMapServiceImageryProvider({
       url: url,
       layers: res.tab,
+      getFeatureInfoParameters: { info_format: 'text/html' },
+      enablePickFeatures: true,
+      getFeatureInfoFormats: [getFeatureInfoFormat],
       parameters: {
         transparent: true,
         format: "image/png",
@@ -357,5 +364,33 @@
     let img_layer = window.Viewer.imageryLayers.addImageryProvider(layer);
     this.layerList.push({ id: res.id, layerData: img_layer, type: "wmts" });
   },
+  getFeatureInfo(html) {
+    store.state.details.showDetails = false;
+    var start = html.indexOf("<caption class=\"featureInfo\">") + "<caption class=\"featureInfo\">".length;
+    var end = html.indexOf("</caption>");
+    var tab = html.substr(start, end - start);
+    var std = html.substr(html.indexOf('<th>'), html.lastIndexOf('</th>') - html.indexOf('<th>') + 5).replaceAll(' ', '').replaceAll('\n', '').split('</th>')
+    var gindex = null;
+    for (var i = 0; i < std.length; i++) {
+      if (std[i].indexOf('gid') > -1) {
+        gindex = i;
+        break;
+      }
+    }
+    if (!gindex) return
+    var str = html.substr(html.indexOf('<td>'), html.lastIndexOf('</td>') - html.indexOf('<td>') + 5).replaceAll(' ', '').replaceAll('\n', '').split('</td>')
+    var gid = parseInt(str[gindex].replaceAll(
+      '<td>', ''
+    ))
+    if (gid && tab) {
+
+      store.state.details = {
+        gid: gid,
+        tab: tab,
+        showDetails: true
+      }
+    }
+
+  },
 };
 export default server;
diff --git a/src/store/index.ts b/src/store/index.ts
index e9a5441..29cfd72 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -21,6 +21,11 @@
     tab: null,
     doubleMap: false,
     doubleMenu: false,
+    details: {
+      gid: null,
+      tab: null,
+      showDetails: false,
+    },
   },
   mutations: {
     //鑾峰彇鐧诲綍Code
diff --git a/src/views/Index.vue b/src/views/Index.vue
index 0cb8b40..cec7aeb 100644
--- a/src/views/Index.vue
+++ b/src/views/Index.vue
@@ -18,9 +18,10 @@
       v-if="layerLocationshow"
       @SETcoordClose="setCoordLocation"
     >
-
     </coord-location>
+    <details-query v-if="store.state.details.showDetails">
 
+    </details-query>
   </div>
 </template>
 
@@ -48,6 +49,8 @@
 import CoordLocation from "@/views/query/CoordLocation.vue";
 //闃村奖鍒嗘瀽
 import mapclock from "@/views/mapClock/index.vue";
+//鐭㈤噺鏁版嵁淇℃伅寮圭獥
+import detailsQuery from "@/views/query/detailsQuery.vue";
 
 import router from "@/router";
 import { useStore } from "vuex"; // 寮曞叆useStore 鏂规硶
diff --git a/src/views/layer/doubleLayer.vue b/src/views/layer/doubleLayer.vue
index 50ad3e8..ee246a4 100644
--- a/src/views/layer/doubleLayer.vue
+++ b/src/views/layer/doubleLayer.vue
@@ -43,7 +43,7 @@
                 Delete
               </a>
             </span> -->
-            <span
+            <!-- <span
               class="button"
               v-if="data.isLayer == 1"
             >
@@ -63,7 +63,7 @@
                   </el-dropdown-menu>
                 </template>
               </el-dropdown>
-            </span>
+            </span> -->
           </span>
         </template>
       </el-tree>
diff --git a/src/views/layer/layerDetail.vue b/src/views/layer/layerDetail.vue
index 0fba9f8..c55479a 100644
--- a/src/views/layer/layerDetail.vue
+++ b/src/views/layer/layerDetail.vue
@@ -217,6 +217,7 @@
   height: 400px;
   margin-left: 20px;
   margin-top: 40px;
+  min-width: 200px;
   z-index: 30;
   position: absolute;
   .title {
diff --git a/src/views/layer/layerManage.vue b/src/views/layer/layerManage.vue
index 08ec5d9..623181b 100644
--- a/src/views/layer/layerManage.vue
+++ b/src/views/layer/layerManage.vue
@@ -192,10 +192,12 @@
     layerAttributeIsshow.value = true;
     store.state.tab = e;
   } else {
-    if (!e.checked) {
+    var val = estreeRef.value!.getCheckedKeys(false);
+    if (val.indexOf(e.id) > -1) {
+      layerDetailIsshow.value = true;
+    } else {
       return ElMessage.error("璇峰厛鍕鹃�夊浘灞�");
     }
-    layerDetailIsshow.value = true;
   }
 };
 const setSpatialClose = (res) => {
@@ -251,12 +253,12 @@
   const dt = await perms_selectLayers();
   if (dt.code == 200) {
     treeData.value = setTreeData(dt.result).sort(function (a, b) {
-      return a.sort - b.sort;
+      return a.orderNum - b.orderNum;
     });
     var std = [];
     var terrainId = null;
     dt.result.filter((res) => {
-      if (res.isLayer == 1 && res.status == 1) {
+      if (res.isLayer == 1 && res.isShow == 1) {
         if (res.type == 1 && res.data == 2) {
           if (!terrainId) {
             terrainId = res.id;
@@ -288,7 +290,7 @@
     let branchArr = cloneData.filter((child) => father.id == child.pid);
     if (branchArr.length > 0) {
       branchArr.sort(function (a, b) {
-        return a.sort - b.sort;
+        return a.orderNum - b.orderNum;
       });
     }
 
diff --git a/src/views/query/detailsQuery.vue b/src/views/query/detailsQuery.vue
new file mode 100644
index 0000000..99f7277
--- /dev/null
+++ b/src/views/query/detailsQuery.vue
@@ -0,0 +1,241 @@
+<template>
+  <div
+    v-drag="true"
+    class="showDetailsBox"
+  >
+    <div class="detailsTitles">
+      <div>
+        灞炴�т俊鎭�
+      </div>
+      <div>
+        <el-icon
+          @click="setDetailsClose"
+          :size="14"
+        >
+          <Close />
+        </el-icon>
+      </div>
+    </div>
+    <div class="detailsContent">
+      <ul>
+        <li
+          v-for="(value,key) in tableData"
+          :key="key"
+        >
+          {{ key }} {{value}}
+        </li>
+      </ul>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import {
+  ref,
+  onMounted,
+  onBeforeUnmount,
+  reactive,
+  defineProps,
+  defineEmits,
+  nextTick,
+} from "vue";
+import store from "@/store";
+import {
+  dataQuery_selectTabByEntity,
+  inquiry_selectFields,
+  inquiry_selectDomains,
+  dataQuery_selectByGid,
+} from "@/api/api";
+import { ElMessage } from "element-plus";
+const detailsData = ref({
+  gid: null,
+  name: null,
+});
+const tabByEntity = ref();
+const fieldData = ref([]);
+const domainData = ref([]);
+const attributeData = ref([]);
+const optionData = ref([]);
+const tableData = ref({});
+const setDetailsClose = () => {
+  store.state.details.showDetails = false;
+};
+//鏌ヨ瀹炰綋绫�
+const getTableByEntity = async () => {
+  const res = await dataQuery_selectTabByEntity({
+    name: detailsData.value.name,
+  });
+  if (res.code != 200) {
+    ElMessage.error("鏈煡璇㈠埌瀹炰綋绫�");
+    return;
+  }
+  tabByEntity.value = res.result;
+  getLayerFileds();
+};
+//鏌ヨ瀛楁淇℃伅
+const getLayerFileds = async () => {
+  const data = await inquiry_selectFields({
+    name: detailsData.value.name,
+  });
+  if (data.code != 200) {
+    ElMessage.error("鏈煡璇㈠埌瀛楁淇℃伅");
+    return;
+  }
+  fieldData.value = data.result;
+  getLayerDomains();
+};
+const getLayerDomains = async () => {
+  const data = await inquiry_selectDomains({ name: detailsData.value.name });
+  if (data.code != 200) {
+    ElMessage.error("鏈煡璇㈠埌鍊煎煙淇℃伅");
+    return;
+  }
+  domainData.value = data.result;
+  optionData.value = data.result;
+  getLayerAttribute();
+};
+const getLayerAttribute = () => {
+  for (var i in fieldData.value) {
+    if (fieldData.value[i].showtype == 1) {
+      attributeData.value.push(fieldData.value[i]);
+    }
+  }
+  getLayrData();
+};
+const getLayrData = async () => {
+  const data = await dataQuery_selectByGid(detailsData.value);
+  if (data.code != 200) {
+    ElMessage.error("鏈煡璇㈠埌灞炴�т俊鎭�");
+    return;
+  }
+  var valste = data.result;
+  valste.dirid = valste.dirName;
+  valste.depid = valste.depName;
+  valste.verid = valste.verName;
+  valste.createuser = valste.createName;
+  valste.updateuser = valste.updateName;
+  if (valste.createtime) {
+    valste.createtime = format(valste.createtime);
+  }
+  if (valste.updatetime) {
+    valste.updatetime = format(valste.updatetime);
+  }
+  for (var j in optionData.value) {
+    if (
+      optionData.value[j].domainNa != null &&
+      optionData.value[j].domainNa != undefined
+    ) {
+      valste[optionData.value[j].field] = optionData.value[j].domainNa;
+    }
+  }
+  var arr = {};
+  for (var i = attributeData.value.length - 1; i >= 0; i--) {
+    var vla = attributeData.value[i];
+    if (vla.domainNa) {
+      var val = optionData.value.filter((res) => {
+        if (res.domName == vla.domainNa && res.domCode == valste[vla.field]) {
+          return res;
+        }
+      });
+      var vlue = null;
+      if (val.length > 0) {
+        vlue = val[0].codeDesc;
+      } else {
+        vlue = "";
+      }
+      arr[vla.alias] = vlue;
+    } else {
+      arr[vla.alias] = valste[vla.field];
+    }
+  }
+
+  tableData.value = sortObj(arr);
+};
+const sortObj = (obj) => {
+  var arr = [];
+  for (var i in obj) {
+    arr.push([obj[i], i]);
+  }
+  arr.reverse();
+  var len = arr.length;
+  var obj = {};
+  for (var i = 0; i < len; i++) {
+    obj[arr[i][1]] = arr[i][0];
+  }
+  return obj;
+};
+
+//鏍煎紡鍖栨椂闂�
+const format = (shijianchuo) => {
+  //shijianchuo鏄暣鏁帮紝鍚﹀垯瑕乸arseInt杞崲
+  var time = new Date(shijianchuo);
+  var y = time.getFullYear();
+  var m = time.getMonth() + 1;
+  var d = time.getDate();
+  var h = time.getHours();
+  var mm = time.getMinutes();
+  var s = time.getSeconds();
+  return y + "-" + add0(m) + "-" + add0(d) + " " + h + ":" + mm + ":" + s;
+};
+//鏍煎紡鍖栨椂闂�
+const add0 = (m) => {
+  return m < 10 ? "0" + m : m;
+};
+onMounted(() => {
+  detailsData.value.gid = store.state.details.gid;
+  detailsData.value.name = store.state.details.tab.replaceAll("_", "");
+
+  getTableByEntity();
+});
+</script>
+
+<style lang="less" scoped>
+.showDetailsBox {
+  padding: 10px;
+  background: rgba(7, 8, 14, 0.8);
+  border: 1px solid #d6e4ff;
+  z-index: 33;
+  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
+  position: absolute;
+  bottom: 5%;
+  right: 5%;
+  width: 250px;
+  height: 350px;
+  .detailsTitles {
+    padding: 5px;
+    width: calc(100% - 10px);
+    height: 25px;
+    color: #d6e4ff;
+    font-size: 14px;
+    border-bottom: 1px solid #d6e4ff;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  .detailsContent {
+    color: #d6e4ff;
+    font-size: 12px;
+    padding: 5px;
+    height: 305px;
+    overflow-y: auto;
+    width: calc(100% - 10px);
+    li {
+      color: #d6e4ff;
+      font-size: 12px;
+      height: 30px;
+    }
+  }
+  ::-webkit-scrollbar {
+    width: 10px;
+  }
+  /* Change the scrollbar background color here */
+  ::-webkit-scrollbar-track {
+    background-color: rgba(0, 0, 0, 0);
+  }
+  /* Change the scrollbar button color and roundedness here */
+  ::-webkit-scrollbar-thumb {
+    background-color: rgba(104, 156, 255, 0.2);
+    border-radius: 0.5rem;
+  }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3