From 28de79b44655118b1deffb5c9a8b06ec2904905b Mon Sep 17 00:00:00 2001
From: suerprisePlus <15810472099@163.com>
Date: 星期四, 13 六月 2024 17:38:24 +0800
Subject: [PATCH] 功能添加

---
 src/components/map/layerManager.vue |  766 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 415 insertions(+), 351 deletions(-)

diff --git a/src/components/map/layerManager.vue b/src/components/map/layerManager.vue
index c5edaf1..5debd87 100644
--- a/src/components/map/layerManager.vue
+++ b/src/components/map/layerManager.vue
@@ -1,351 +1,415 @@
-<template>
-  <div v-drag
-       class="layerBox">
-    <div class="layerTitle">
-      <div class="tileLeft">
-        <div @click="setCloseLayer"
-             class="titleImg">
-          <ArrowLeft />
-        </div>
-        <div class="titleLable">鍥惧眰绠$悊</div>
-      </div>
-      <div class="titleImg set"
-           @click="store.state.layerFlag = null"
-           title="鍏抽棴">
-        <CloseBold />
-      </div>
-    </div>
-    <div class="layerContent">
-      <el-tree node-key="id"
-               :props="props"
-               :highlight-current="false"
-               :data="treeData"
-               show-checkbox
-               :expand-on-click-node="false"
-               @check-change="handleCheckChange"
-               ref="treeRef">
-        <template #default="{ node, data }">
-          <span class="custom-tree-node">
-            <span class="label">{{ node.label }}</span>
-
-            <span class="button"
-                  v-if="data.sourceType == 'demoAnimation'">
-              <el-dropdown trigger="click">
-                <span class="el-dropdown-link">
-                  <el-icon style="color: wheat"
-                           class="el-icon--right">
-                    <MoreFilled />
-                  </el-icon>
-                </span>
-                <template #dropdown>
-                  <el-dropdown-menu>
-                    <el-dropdown-item @click="playNode(data)">鎾斁</el-dropdown-item>
-                  </el-dropdown-menu>
-                </template>
-              </el-dropdown>
-            </span>
-          </span>
-        </template>
-      </el-tree>
-    </div>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { ref, onMounted, nextTick, watch } from "vue";
-import { ElTree } from "element-plus";
-interface Tree {
-  id: number;
-  label: string;
-  children?: Tree[];
-}
-const treeRef = ref<InstanceType<typeof ElTree>>();
-import { MoreFilled, Setting, CloseBold } from "@element-plus/icons-vue";
-import palyTools from "@/assets/js/tool/palyTools";
-import configTool from "@/assets/js/tool/configTool";
-import layerManager from "@/assets/js/map/layerManage";
-import axios from "axios";
-import store from "@/store";
-const treeData = ref([]);
-const props = {
-  label: "name",
-  children: "children",
-};
-const handleCheckChange = (data, check, indeterminate) => {
-  if (data.children) return;
-  if (data._children) {
-    for (var i in data._children) {
-      var layer = data._children[i];
-      if (check) {
-        layerManager.setAddLayer(layer);
-      } else {
-        layerManager.setRemoveLayer(layer);
-      }
-    }
-  } else {
-    if (check) {
-      layerManager.setAddLayer(data);
-    } else {
-      layerManager.setRemoveLayer(data);
-    }
-  }
-};
-const playNode = (res) => {
-  palyTools.Init(res);
-};
-const setTreeDataStart = (res) => {
-  treeData.value = res.children;
-  var obj = configTool.getTreeDataCheck(res.children, []);
-  nextTick(() => {
-    treeRef.value!.setCheckedKeys(obj, false);
-    setLayerStart();
-  });
-};
-const setLayerStart = () => {
-  var obj = treeRef.value!.getCheckedNodes(false, false);
-  setAddLayer(obj);
-};
-const setAddLayer = (res) => {
-  for (var i in res) {
-    if (res[i]._children) {
-      setAddLayer(res[i]._children);
-    } else {
-      layerManager.setAddLayer(res[i]);
-    }
-  }
-};
-
-const setTreeStart = () => {
-  var url = config.jsonUrl + "SmartEarth.json";
-  axios.get(url).then((res) => {
-    setTreeDataStart(res.data);
-  });
-};
-const setAnimation = (res) => {
-  var info = res.info;
-  for (var i in info) {
-    var obj = treeRef.value!.getNode(info[i]);
-    if (res.show) {
-      layerManager.setAddLayer(obj.data);
-    } else {
-      layerManager.setRemoveLayer(obj.data);
-    }
-  }
-  var valCheck = treeRef.value!.getCheckedKeys();
-  for (var i in info) {
-    if (res.show) {
-      valCheck.push(info[i]);
-    } else {
-      if (valCheck.indexOf(info[i]) > -1) {
-        valCheck.splice(valCheck.indexOf(info[i]), 1);
-      }
-    }
-  }
-
-  nextTick(() => {
-    treeRef.value!.setCheckedKeys(valCheck, false);
-    store.state.setAnimation = false;
-  });
-};
-onMounted(() => {
-  setTreeStart();
-});
-watch(
-  () => store.state.setAnimation,
-  (newVal, oldVal) => {
-    if (newVal) {
-      setAnimation(newVal);
-    }
-  },
-  { immediate: true, deep: true }
-);
-</script>
-
-<style lang="less" scoped>
-.layerBox {
-  width: 300px;
-  height: 600px;
-  background: rgba(7, 8, 14, 0.8);
-  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
-
-  position: absolute;
-  z-index: 41;
-  top: 150px;
-  right: 1%;
-
-  .layerTitle {
-    width: calc(100% - 27px);
-    height: 42px;
-    background: #30bcff;
-    box-shadow: 0 2px 3px rgba(16, 133, 80, 0.5);
-    border-bottom: 1px solid #20bc74;
-    display: flex;
-    justify-content: space-between;
-    padding-left: 7px;
-    padding-right: 20px;
-    color: white;
-
-    .tileLeft {
-      height: 100%;
-      display: flex;
-      align-items: center;
-
-      .titleLable {
-        font-size: 18px;
-        font-family: Source Han Sans CN;
-        font-weight: 400;
-        color: #ffffff;
-      }
-    }
-
-    .titleImg {
-      width: 20px;
-      height: 100%;
-      display: flex;
-      align-items: center;
-      color: #fff;
-    }
-
-    .set {
-      cursor: pointer;
-    }
-  }
-
-  .layerContent {
-    height: 525px;
-    padding: 0 8px;
-    overflow: auto;
-    overflow-y: auto;
-  }
-
-  .layerContent::-webkit-scrollbar {
-    width: 8px;
-  }
-
-  .layerContent::-webkit-scrollbar-thumb {
-    border-radius: 10px;
-    background: rgba(35, 47, 42, 0.8);
-  }
-
-  .layerContent::-webkit-scrollbar-track {
-    border-radius: 0;
-    background: rgba(35, 47, 42, 0.8);
-  }
-
-  .el-tree {
-    width: 100%;
-    overflow-y: auto;
-  }
-
-  .layerContent .el-tree-node__content {
-    overflow: hidden;
-  }
-
-  .layerContent .custom-tree-node {
-    overflow: hidden;
-    flex-shrink: 1;
-    flex-grow: 1;
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    font-size: 16px;
-    padding-right: 8px;
-  }
-
-  .layerContent .custom-tree-node .label {
-    flex-shrink: 1;
-    overflow: hidden;
-    text-overflow: ellipsis;
-  }
-
-  .layerContent .custom-tree-node .button {
-    flex-grow: 0;
-    flex-shrink: 0;
-  }
-}
-
-.dropdown_box {
-  position: relative;
-}
-
-/deep/.el-select-dropdown__item {
-  font-size: 12px !important;
-}
-
-.el-tree {
-  background: transparent;
-}
-
-/deep/ .el-tree-node {
-  background: #0d131d;
-  color: #ffffff;
-  font-size: 20px;
-  font-weight: 300;
-  margin-top: 3px;
-  padding: 8px;
-}
-
-/deep/ .el-tree-node:focus > .el-tree-node__content {
-  background: transparent;
-}
-
-/deep/ .el-tree-node__content:hover {
-  background: #0d131d;
-}
-
-/deep/ .el-tree-node__children {
-  background: #1e2a3d;
-
-  .el-tree-node {
-    background: #1e2a3d;
-    margin-top: 0;
-    padding: 4px;
-  }
-}
-
-/deep/
-  .el-tree--highlight-current
-  .el-tree-node.is-current
-  > .el-tree-node__content {
-  background: rgba(104, 156, 255, 0.5) !important;
-}
-
-.highlight {
-  background: rgba(104, 156, 255, 0.5) !important;
-}
-
-// .custom-tree-node {
-//   flex: 1;
-//   display: flex;
-//   align-items: center;
-//   justify-content: space-between;
-//   font-size: 16px;
-//   padding-right: 8px;
-// }
-
-.el-dropdown-menu {
-  background: rgba(7, 8, 14, 0.8);
-  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
-  color: #fff;
-  border: 0;
-
-  /deep/ .el-dropdown-menu__item {
-    color: #fff;
-  }
-}
-
-/deep/ .el-dropdown-menu__item:not(.is-disabled):focus {
-  background-color: rgba(104, 156, 255, 0.5);
-
-  color: #fff;
-}
-</style>
-<style>
-.el-popper.is-light {
-  border: 1px solid rgba(7, 8, 14, 0.8) !important;
-}
-
-.el-scrollbar {
-  border: 0 !important;
-}
-</style>
+<template>
+  <div v-drag class="layerBox">
+    <div class="layerTitle">
+      <div class="tileLeft">
+        <div @click="setCloseLayer" class="titleImg">
+          <ArrowLeft />
+        </div>
+        <div class="titleLable">鍥惧眰绠$悊</div>
+      </div>
+      <div class="set">
+        <div
+          @click="setAddManagerFile()"
+          class="titleImg"
+          style="margin-right: 10px"
+          title="瀵煎叆"
+        >
+          <el-icon :size="20">
+            <FolderOpened />
+          </el-icon>
+        </div>
+        <div
+          @click="setoutManagerFile()"
+          class="titleImg"
+          style="margin-right: 10px"
+          title="瀵煎嚭"
+        >
+          <el-icon :size="20">
+            <Download />
+          </el-icon>
+        </div>
+        <div
+          @click="setAddManagerLayer"
+          class="titleImg"
+          style="margin-right: 10px"
+          title="娣诲姞"
+        >
+          <el-icon :size="20">
+            <Plus />
+          </el-icon>
+        </div>
+        <div
+          class="titleImg"
+          @click="store.state.layerFlag = null"
+          title="鍏抽棴"
+        >
+          <el-icon :size="20">
+            <Close />
+          </el-icon>
+        </div>
+      </div>
+    </div>
+    <div class="layerContent">
+      <el-tree
+        node-key="id"
+        :props="props"
+        :highlight-current="false"
+        :data="treeData"
+        show-checkbox
+        :expand-on-click-node="false"
+        @check-change="handleCheckChange"
+        ref="treeRef"
+        class="stafftree"
+      >
+      </el-tree>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted, nextTick, watch } from "vue";
+import { ElTree } from "element-plus";
+interface Tree {
+  id: number;
+  label: string;
+  children?: Tree[];
+}
+const treeRef = ref<InstanceType<typeof ElTree>>();
+import {
+  MoreFilled,
+  Setting,
+  Close,
+  Plus,
+  defineProps,
+  FolderOpened,
+  Download
+} from "@element-plus/icons-vue";
+import palyTools from "@/assets/js/tool/palyTools";
+import configTool from "@/assets/js/tool/configTool";
+import layerManager from "@/assets/js/map/layerManage";
+import axios from "axios";
+import store from "@/store";
+const treeData = ref([]);
+
+const props = {
+  label: "name",
+  children: "children"
+};
+const setAddManagerLayer = () => {
+  store.state.setAddEntityList = {
+    flag: true,
+    title: "鍥惧眰娣诲姞",
+    type: 1
+  };
+};
+const setAddManagerFile = () => {
+  store.state.setAddEntityList = {
+    flag: true,
+    title: "鍥惧眰瀵煎叆",
+    type: 3
+  };
+};
+const setoutManagerFile = () => {
+  configTool.saveToJson(treeData.value, "鍥惧眰瀵煎嚭");
+};
+const handleCheckChange = (data, check, indeterminate) => {
+  if (data.children) return;
+  if (data._children) {
+    for (var i in data._children) {
+      var layer = data._children[i];
+      if (check) {
+        layerManager.setAddLayer(layer);
+      } else {
+        layerManager.setRemoveLayer(layer);
+      }
+    }
+  } else {
+    if (check) {
+      layerManager.setAddLayer(data);
+    } else {
+      layerManager.setRemoveLayer(data);
+    }
+  }
+};
+const playNode = (res) => {
+  palyTools.Init(res);
+};
+const setTreeDataStart = (res) => {
+  treeData.value = res.children;
+  var obj = configTool.getTreeDataCheck(res.children, []);
+  nextTick(() => {
+    treeRef.value!.setCheckedKeys(obj, false);
+    setLayerStart();
+  });
+};
+const setLayerStart = () => {
+  var obj = treeRef.value!.getCheckedNodes(false, false);
+  setAddLayer(obj);
+};
+const setAddLayer = (res) => {
+  for (var i in res) {
+    if (res[i]._children) {
+      setAddLayer(res[i]._children);
+    } else {
+      layerManager.setAddLayer(res[i]);
+    }
+  }
+};
+
+const setTreeStart = () => {
+  var url = config.jsonUrl + "SmartEarth.json";
+  axios.get(url).then((res) => {
+    setTreeDataStart(res.data);
+  });
+};
+const setAnimation = (res) => {
+  var info = res.info;
+  for (var i in info) {
+    var obj = treeRef.value!.getNode(info[i]);
+    if (res.show) {
+      layerManager.setAddLayer(obj.data);
+    } else {
+      layerManager.setRemoveLayer(obj.data);
+    }
+  }
+  var valCheck = treeRef.value!.getCheckedKeys();
+  for (var i in info) {
+    if (res.show) {
+      valCheck.push(info[i]);
+    } else {
+      if (valCheck.indexOf(info[i]) > -1) {
+        valCheck.splice(valCheck.indexOf(info[i]), 1);
+      }
+    }
+  }
+
+  nextTick(() => {
+    treeRef.value!.setCheckedKeys(valCheck, false);
+    store.state.setAnimation = false;
+  });
+};
+const addGeometry = (val) => {
+  if (val.flag) {
+    for (var i in val.value) {
+      treeData.value.push(val.value[i]);
+    }
+  } else {
+    val.id = configTool.getEndDateTime();
+    if (val.sourceType === "3DTiles") {
+      treeData.value[0].children.push(val);
+    } else if (val.sourceType === "WMS") {
+      treeData.value[1].children.push(val);
+    } else if (val.sourceType === "TMS") {
+      treeData.value[2].children.push(val);
+    }
+  }
+};
+onMounted(() => {
+  setTreeStart();
+});
+defineExpose({
+  addGeometry
+});
+watch(
+  () => store.state.setAnimation,
+  (newVal, oldVal) => {
+    if (newVal) {
+      setAnimation(newVal);
+    }
+  },
+  { immediate: true, deep: true }
+);
+</script>
+
+<style lang="less" scoped>
+.layerBox {
+  width: 300px;
+  height: 600px;
+  background: rgba(7, 8, 14, 0.8);
+  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
+
+  position: absolute;
+  z-index: 41;
+  top: 150px;
+  right: 1%;
+
+  .layerTitle {
+    width: calc(100% - 27px);
+    height: 42px;
+    background: #30bcff;
+    box-shadow: 0 2px 3px rgba(16, 133, 80, 0.5);
+    border-bottom: 1px solid #20bc74;
+    display: flex;
+    justify-content: space-between;
+    padding-left: 7px;
+    padding-right: 20px;
+    color: white;
+
+    .tileLeft {
+      height: 100%;
+      display: flex;
+      align-items: center;
+
+      .titleLable {
+        font-size: 18px;
+        font-family: Source Han Sans CN;
+        font-weight: 400;
+        color: #ffffff;
+      }
+    }
+
+    .titleImg {
+      width: 20px;
+      height: 100%;
+      color: #fff;
+      display: flex;
+      align-items: center;
+    }
+
+    .set {
+      cursor: pointer;
+      display: flex;
+    }
+  }
+
+  .layerContent {
+    height: 525px;
+    padding: 0 8px;
+    overflow: auto;
+    overflow-y: auto;
+  }
+
+  .layerContent::-webkit-scrollbar {
+    width: 8px;
+  }
+
+  .layerContent::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    background: rgba(35, 47, 42, 0.8);
+  }
+
+  .layerContent::-webkit-scrollbar-track {
+    border-radius: 0;
+    background: rgba(35, 47, 42, 0.8);
+  }
+
+  .el-tree {
+    width: 100%;
+    overflow-y: auto;
+  }
+
+  .layerContent .el-tree-node__content {
+    overflow: hidden;
+  }
+
+  .layerContent .custom-tree-node {
+    overflow: hidden;
+    flex-shrink: 1;
+    flex-grow: 1;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    font-size: 16px;
+    padding-right: 8px;
+  }
+
+  .layerContent .custom-tree-node .label {
+    flex-shrink: 1;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
+
+  .layerContent .custom-tree-node .button {
+    flex-grow: 0;
+    flex-shrink: 0;
+  }
+}
+
+.dropdown_box {
+  position: relative;
+}
+
+/deep/.el-select-dropdown__item {
+  font-size: 12px !important;
+}
+
+.el-tree {
+  background: transparent;
+}
+
+/deep/ .el-tree-node {
+  background: #0d131d;
+  color: #ffffff;
+  font-size: 14px;
+  font-weight: 300;
+  margin-top: 3px;
+  padding: 8px;
+}
+
+/deep/ .el-tree-node:focus > .el-tree-node__content {
+  background: transparent;
+}
+
+/deep/ .el-tree-node__content:hover {
+  background: #0d131d;
+}
+
+/deep/ .el-tree-node__children {
+  background: #1e2a3d;
+
+  .el-tree-node {
+    background: #1e2a3d;
+    margin-top: 0;
+    padding: 4px;
+    font-size: 12px;
+  }
+}
+/deep/ .stafftree > .el-tree-node > .el-tree-node__content .el-checkbox {
+  display: none;
+}
+/deep/
+  .el-tree--highlight-current
+  .el-tree-node.is-current
+  > .el-tree-node__content {
+  background: rgba(104, 156, 255, 0.5) !important;
+}
+
+.highlight {
+  background: rgba(104, 156, 255, 0.5) !important;
+}
+
+// .custom-tree-node {
+//   flex: 1;
+//   display: flex;
+//   align-items: center;
+//   justify-content: space-between;
+//   font-size: 16px;
+//   padding-right: 8px;
+// }
+
+.el-dropdown-menu {
+  background: rgba(7, 8, 14, 0.8);
+  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
+  color: #fff;
+  border: 0;
+
+  /deep/ .el-dropdown-menu__item {
+    color: #fff;
+  }
+}
+
+/deep/ .el-dropdown-menu__item:not(.is-disabled):focus {
+  background-color: rgba(104, 156, 255, 0.5);
+
+  color: #fff;
+}
+</style>
+<style>
+.el-popper.is-light {
+  border: 1px solid rgba(7, 8, 14, 0.8) !important;
+}
+
+.el-scrollbar {
+  border: 0 !important;
+}
+</style>

--
Gitblit v1.9.3