From 23aac3cf9903d404eb86310d502a0eeb5a68b407 Mon Sep 17 00:00:00 2001
From: WX <1377869194@qq.com>
Date: 星期五, 14 七月 2023 16:45:03 +0800
Subject: [PATCH] 11

---
 src/utils/request.js              |    7 
 src/api/api.js                    |   19 -
 src/views/login.vue               |   16 
 package.json                      |    2 
 src/views/layer/attributeList.vue |   53 +--
 src/views/layer/layerDetail.vue   |  170 +++++++++++++
 src/views/layer/layerSet.vue      |  163 ++++--------
 src/views/menus.vue               |   42 --
 src/views/layer/layerManage.vue   |  300 ++++++++++++++--------
 9 files changed, 473 insertions(+), 299 deletions(-)

diff --git a/package.json b/package.json
index 58425f3..80a0639 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
     "amfe-flexible": "^2.2.1",
     "axios": "^1.3.4",
     "default-passive-events": "^2.0.0",
-    "element-plus": "^2.3.0",
+    "element-plus": "^2.3.8",
     "js-base64": "^3.7.5",
     "jsencrypt": "^3.3.2",
     "mitt": "^3.0.1",
diff --git a/src/api/api.js b/src/api/api.js
index e57a648..07d4636 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -8,13 +8,6 @@
  */
 import request from "@/utils/request";
 
-// 鏌ヨ澶╂皵
-export function layerList(params) {
-  //璇锋眰鍦板潃
-  return request.get("/select", { params: params });
-}
-
-
 //鍦板悕鏌ヨ
 export function dataQuery_selectByPage(params) {
   //璇锋眰鍦板潃
@@ -27,11 +20,6 @@
   return request.get("/dataQuery/selectFields", { params: params });
 }
 
-
-
-
-
-
 //鑾峰彇RSA鍔犲瘑鍏挜
 export function sign_getPublicKey(params) {
   //璇锋眰鍦板潃
@@ -40,5 +28,10 @@
 //鐧诲綍
 export function sign_login(params) {
   //璇锋眰鍦板潃
-  return request.post('/sign/login', params);
+  return request.post("/sign/login", params);
+}
+//鍥惧眰鏌ヨ
+export function layer_selectAll(params) {
+  //璇锋眰鍦板潃
+  return request.get("/layer/selectAll", { params: params });
 }
diff --git a/src/utils/request.js b/src/utils/request.js
index 4dd2bf7..e121a36 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -7,8 +7,10 @@
  */
 import axios from "axios";
 import { ElMessage, ElLoading } from "element-plus";
+import { useRouter } from "vue-router";
 
 import { getToken } from "@/utils/auth";
+const router = useRouter();
 // create an axios instance
 const service = axios.create({
   baseURL: BASE_URL, // api鐨刡ase_url
@@ -45,6 +47,11 @@
     // 鎶ラ敊鎻愮ず
     if (response.data.code !== 200) {
       ElMessage.error(response.data.msg);
+    } else if (
+      response.data.code !== 200 &&
+      response.data.result == "鐢ㄦ埛鏈櫥褰�"
+    ) {
+      router.push({ path: "/login" });
     }
     return response.data;
   },
diff --git a/src/views/layer/attributeList.vue b/src/views/layer/attributeList.vue
index d27fb16..94f8652 100644
--- a/src/views/layer/attributeList.vue
+++ b/src/views/layer/attributeList.vue
@@ -2,14 +2,14 @@
   <div v-drag="true" class="spatialBox">
     <!--     v-resizable="'right, bottom'" -->
     <div class="spatialTitle">
-      <label>绌洪棿鏌ヨ</label>
+      <label>灞炴��</label>
       <el-icon @click="setSpatialClose" :size="20" style="cursor: pointer">
         <Close />
       </el-icon>
     </div>
     <div class="spatialContent">
       <div class="spatialTable">
-        <el-table :data="tableData" style="width: 100%; height: 73%">
+        <el-table :data="tableData" style="width: 100%; height: 82%">
           <el-table-column
             v-for="(item, index) in attributeData"
             :key="index"
@@ -83,9 +83,7 @@
 
 //defineProps 鏉ユ帴鏀剁粍浠剁殑浼犲��
 const props = defineProps({
-  layerData: {
-    type: Object,
-  },
+  layerData: Object,
 });
 
 const handleSizeChange = (res) => {
@@ -108,15 +106,12 @@
 };
 
 const setQueySpatialFields = async () => {
-  console.log(props.layerData);
   const data = await dataQuery_selectFields({ name: listData.value.name });
   if (data.code != 200) {
     return ElMessage.error("瀛楁鏌ヨ澶辫触");
   }
-  console.log(data);
-  attributeData.value = data.result;
 
-  console.log(attributeData.value);
+  attributeData.value = data.result;
 
   conditionChange(data.result[0]);
   setQueySpatialData();
@@ -158,7 +153,7 @@
 watch(
   () => props.layerData,
   (nVal, oVal) => {
-    console.log("鍊煎彂鐢熶簡鍙樻洿", nVal, oVal);
+    // console.log("鍊煎彂鐢熶簡鍙樻洿", nVal, oVal);
     startQueryData();
   },
   { deep: true }
@@ -293,25 +288,25 @@
 }
 </style>
 <style lang="less">
-.el-scrollbar {
-  background: rgba(7, 8, 14) !important;
-  border: 1px solid #4472cb;
-  color: #d6e4ff !important;
-  box-shadow: inset 0px 1px 40px 1px rgba(38, 47, 71, 1);
-  // .el-dropdown-menu {
-  //   background: rgba(7, 8, 14, 0.8) !important;
-  // }
-  .el-select-dropdown__item {
-    color: #d6e4ff;
-  }
-  .el-select-dropdown__item:hover {
-    background: rgba(38, 47, 71, 1) !important;
-  }
-  .el-select-dropdown__item.hover,
-  .el-select-dropdown__item:hover {
-    background: rgba(38, 47, 71, 1) !important;
-  }
-}
+// .el-scrollbar {
+//   background: rgba(7, 8, 14) !important;
+//   border: 1px solid #4472cb;
+//   color: #d6e4ff !important;
+//   box-shadow: inset 0px 1px 40px 1px rgba(38, 47, 71, 1);
+//   // .el-dropdown-menu {
+//   //   background: rgba(7, 8, 14, 0.8) !important;
+//   // }
+//   .el-select-dropdown__item {
+//     color: #d6e4ff;
+//   }
+//   .el-select-dropdown__item:hover {
+//     background: rgba(38, 47, 71, 1) !important;
+//   }
+//   .el-select-dropdown__item.hover,
+//   .el-select-dropdown__item:hover {
+//     background: rgba(38, 47, 71, 1) !important;
+//   }
+// }
 .el-table__header-wrapper {
   border: 1px siolid #409eff;
 }
diff --git a/src/views/layer/layerDetail.vue b/src/views/layer/layerDetail.vue
new file mode 100644
index 0000000..35270c0
--- /dev/null
+++ b/src/views/layer/layerDetail.vue
@@ -0,0 +1,170 @@
+<template>
+  <div class="content">
+    <div class="title">
+      <label>璇︾粏缂栬緫</label>
+      <el-icon @click="setSpatialClose" :size="20" style="cursor: pointer">
+        <Close />
+      </el-icon>
+    </div>
+    <div class="layer_box">
+      <div class="check_box">
+        <!-- <el-checkbox @change="handlCheckAllChange" v-model="layerState">{{
+          layerName
+        }}</el-checkbox> -->
+        {{ layerData.name }}
+        <img src="../../assets/img/layer.png" alt="" />
+      </div>
+      <div class="slider-demo-block">
+        <div class="demonstration">閫忔槑搴�</div>
+        <el-slider v-model="transparence" />
+        <div class="demonstration">{{ transparence }}%</div>
+      </div>
+      <div class="selectBox">
+        <div class="selectTile demonstration">鎷変几鏂瑰紡</div>
+        <el-select
+          v-model="stretchValue"
+          class="m-2"
+          placeholder="Select"
+          size="small"
+        >
+          <el-option
+            v-for="item in stretchOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import {
+  ref,
+  onMounted,
+  onBeforeUnmount,
+  reactive,
+  defineProps,
+  defineEmits,
+} from "vue";
+const stretchValue = ref("");
+const transparence = ref(0);
+let layerName = ref("鍥惧眰鍚嶇О");
+let layerState = ref(false);
+const stretchOptions = [
+  {
+    value: "Option1",
+    label: "Option1",
+  },
+  {
+    value: "Option2",
+    label: "Option2",
+  },
+  {
+    value: "Option3",
+    label: "Option3",
+  },
+  {
+    value: "Option4",
+    label: "Option4",
+  },
+  {
+    value: "Option5",
+    label: "Option5",
+  },
+];
+const emits = defineEmits(["detailClose"]);
+//defineProps 鏉ユ帴鏀剁粍浠剁殑浼犲��
+const props = defineProps({
+  layerData: Object,
+});
+const setSpatialClose = () => {
+  emits("detailClose", false);
+};
+const handlCheckAllChange = (res) => {};
+</script>
+
+<style lang="less" scoped>
+.content {
+  background: #1e2a3d;
+  padding: 20px;
+  height: 400px;
+  margin-left: 20px;
+  margin-top: 40px;
+  .title {
+    font-size: 18px;
+    font-family: Source Han Sans CN;
+    font-weight: 400;
+    color: #ffffff;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  .layer_box {
+    margin-top: 10px;
+  }
+}
+.check_box {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding-right: 50px;
+  padding-top: 10px;
+  font-size: 16px;
+  color: #ffffff;
+  img {
+    width: 22px;
+    height: 19px;
+  }
+}
+.check_box .el-checkbox {
+  font-size: 16px;
+  color: #ffffff;
+}
+.check_box /deep/ .el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: rgba(13, 255, 0, 1);
+  border-color: rgba(41, 109, 255, 1);
+}
+.check_box /deep/ .el-checkbox__input.is-checked + .el-checkbox__label {
+  color: #fff;
+}
+.slider-demo-block {
+  margin-top: 22px;
+}
+.demonstration {
+  font-size: 12px;
+  font-weight: 300;
+  color: #d6e4ff;
+}
+/deep/ .el-slider__runway {
+  height: 2px;
+
+  background: #73a1fa;
+}
+/deep/ .el-slider__bar {
+  height: 2px;
+
+  background: #73a1fa;
+}
+/deep/ .el-slider__button {
+  width: 17px;
+  height: 18px;
+  border: 0;
+  background: url("../../assets/img/DBX.png") no-repeat center;
+  background-size: 100% 100%;
+  border-radius: 0;
+}
+.selectBox {
+  margin-top: 24px;
+  .selectTile {
+    padding-bottom: 6px;
+  }
+  .el-select {
+    width: 100%;
+  }
+}
+/deep/.el-select-dropdown__item {
+  font-size: 12px !important;
+}
+</style>
diff --git a/src/views/layer/layerManage.vue b/src/views/layer/layerManage.vue
index fdc1e49..9bef0eb 100644
--- a/src/views/layer/layerManage.vue
+++ b/src/views/layer/layerManage.vue
@@ -13,52 +13,67 @@
     </div>
     <div class="layerContent">
       <el-tree
+        node-key="id"
         :props="props"
         :highlight-current="false"
         :current-node-key="selectedNodeId"
-        :data="menuOption"
+        :data="treeData"
         :expand-on-click-node="false"
         show-checkbox
         @check="handleCheckChange"
         ref="estreeRef"
+        v-if="treeData.length"
       >
         <template #default="{ node, data }">
           <span class="custom-tree-node">
-            <span>{{ node.label }}</span>
+            <span class="label">{{ node.label }}</span>
             <!-- <span>
               <a @click="append(data)"> Append </a>
               <a style="margin-left: 8px" @click="remove(node, data)">
                 Delete
               </a>
             </span> -->
-            <el-dropdown trigger="click">
-              <span class="el-dropdown-link">
-                <el-icon class="el-icon--right">
-                  <MoreFilled />
-                </el-icon>
-              </span>
-              <template #dropdown>
-                <el-dropdown-menu>
-                  <el-dropdown-item @click.native="clickdropdown(1, data)"
-                    >璇︾粏</el-dropdown-item
-                  >
-                  <el-dropdown-item @click.native="clickdropdown(2, data)"
-                    >灞炴��</el-dropdown-item
-                  >
-                </el-dropdown-menu>
-              </template>
-            </el-dropdown>
+            <span class="button" v-if="data.type == 2">
+              <el-dropdown trigger="click">
+                <span class="el-dropdown-link">
+                  <el-icon class="el-icon--right">
+                    <MoreFilled />
+                  </el-icon>
+                </span>
+                <template #dropdown>
+                  <el-dropdown-menu>
+                    <el-dropdown-item @click.native="clickdropdown(1, data)"
+                      >璇︾粏</el-dropdown-item
+                    >
+                    <el-dropdown-item @click.native="clickdropdown(2, data)"
+                      >灞炴��</el-dropdown-item
+                    >
+                  </el-dropdown-menu>
+                </template>
+              </el-dropdown>
+            </span>
           </span>
         </template>
       </el-tree>
     </div>
   </div>
-  <layer-set v-show="layerSetIsshow" @SETstate="SETstate"></layer-set>
+  <layer-set
+    v-show="layerSetIsshow"
+    @SETstate="SETstate"
+    :layerTree="treeData"
+    @addlayer="addlayer"
+    @delLayer="delLayer"
+  ></layer-set>
   <attribute-list
     v-show="layerAttributeIsshow"
     :layerData="layerObjData"
     @spatialClose="setSpatialClose"
   ></attribute-list>
+  <layer-detail
+    :layerData="layerObjData"
+    v-if="layerDetailIsshow"
+    @detailClose="detailClose"
+  ></layer-detail>
 </template>
 
 <script lang="ts" setup>
@@ -72,7 +87,9 @@
 } from "vue";
 import layerSet from "./layerSet";
 import attributeList from "./attributeList";
+import layerDetail from "./layerDetail";
 import { useStore } from "vuex"; // 寮曞叆useStore 鏂规硶
+import { layer_selectAll } from "@/api/api";
 const store = useStore(); // 璇ユ柟娉曠敤浜庤繑鍥瀞tore 瀹炰緥
 const stretchValue = ref("");
 
@@ -100,61 +117,63 @@
   },
 ];
 const transparence = ref(0);
+var treeData = ref([]);
 let menuOption = reactive([
   {
+    id: 1,
     name: "娴嬭瘯",
     isShow: false,
     checkedAll: false,
     type: 1,
-    children: [
-      {
-        layerState: false,
-        name: "鍥惧眰鍚嶇О",
-        layerUrl: "",
-        type: 2,
-      },
-      {
-        layerState: false,
-        name: "鍥惧眰鑿滃崟",
-        layerUrl: "",
-        type: 1,
-        children: [
-          {
-            layerState: false,
-            name: "鍥惧眰鍚嶇О11",
-            layerUrl: "",
-            type: 2,
-          },
-        ],
-      },
-    ],
+    parentId: null,
   },
   {
+    id: 2,
+    layerState: false,
+    name: "鍥惧眰鍚嶇О",
+    layerUrl: "",
+    type: 2,
+    parentId: 1,
+  },
+  {
+    id: 3,
+    layerState: false,
+    name: "鍥惧眰鑿滃崟",
+    layerUrl: "",
+    type: 1,
+    parentId: 1,
+  },
+  {
+    id: 5,
+    layerState: false,
+    name: "鍥惧眰鍚嶇О11",
+    layerUrl: "",
+    type: 2,
+    parentId: 3,
+  },
+  {
+    id: 4,
     name: "娴嬭瘯1",
     isShow: false,
     checkedAll: true,
     layerState: false,
     type: 1,
+    parentId: null,
   },
 ]);
+
 const layerSetIsshow = ref(false);
 const layerAttributeIsshow = ref(false);
+const layerDetailIsshow = ref(false);
 const props = {
-  label: "name",
+  label: "cnName",
   children: "children",
 };
 const layerObjData = ref(null);
 // 褰撳墠閫変腑鐨勮妭鐐� id
 const selectedNodeId = ref(null as any); //鍋氱被鍨嬫柇瑷�澶勭悊
 const emits = defineEmits(["setCloseLayer"]);
-const handlCheckAllChange = (res) => {};
-const handlIsShow = (res: string) => {
-  menuOption.forEach((e) => {
-    if (e.name == res) {
-      e.isShow = !e.isShow;
-    }
-  });
-};
+
 //鍥惧眰璁剧疆寮规
 const layerSetBox = () => {
   layerSetIsshow.value = !layerSetIsshow.value;
@@ -166,36 +185,72 @@
 const setCloseLayer = () => {
   emits("setCloseLayer", false);
 };
-// 澶勭悊鑺傜偣鐐瑰嚮浜嬩欢
-function handleNodeClick(data: any) {
-  console.log(data);
-  if (data.id === selectedNodeId.value) {
-    // 濡傛灉褰撳墠鑺傜偣宸茬粡閫変腑锛屽垯鍙栨秷閫変腑
-    selectedNodeId.value = null;
-    console.log(selectedNodeId.value, "鍙栨秷閫変腑");
-  } else {
-    // 鍚﹀垯閫変腑褰撳墠鑺傜偣
-    selectedNodeId.value = data.id;
-    // form.selectName = data.name;
-    console.log(selectedNodeId.value, "褰撳墠閫変腑鐨勮妭鐐�");
-  }
-}
+//閫夋嫨鍥惧眰
 const handleCheckChange = (data, checked) => {
   let son = estreeRef.value.getCheckedNodes();
-  console.log(son); //閫変腑鐨勬暟鎹�
 
   store.commit("SET_CHECKLAYER", son);
 };
 const clickdropdown = (res, e) => {
+  layerAttributeIsshow.value = false;
+  layerDetailIsshow.value = false;
+  layerObjData.value = e;
   if (res == 2) {
     layerAttributeIsshow.value = true;
-    layerObjData.value = e;
+  } else {
+    layerDetailIsshow.value = true;
   }
-  console.log(res, e);
 };
 const setSpatialClose = (res) => {
   layerAttributeIsshow.value = res;
 };
+const detailClose = (res) => {
+  layerDetailIsshow.value = res;
+};
+//缂栬緫鍥惧眰鏍�
+const addlayer = (res) => {
+  menuOption.push(res);
+  treeData.value = handleTree(menuOption, "id", "pid", "children");
+};
+//鍒犻櫎鍥惧眰鏍�
+const delLayer = (res) => {
+  menuOption = menuOption.filter((item) => {
+    return item.id != res;
+  });
+  console.log(res);
+  console.log(menuOption);
+  // treeData = handleTree(menuOption, "id", "pid", "children");
+};
+
+const getLayer = async () => {
+  const dt = await layer_selectAll();
+  treeData.value = setTreeData(dt.result);
+  treeData.value = JSON.parse(JSON.stringify(treeData.value));
+
+  console.log(treeData.value);
+};
+
+//鏋勯�犳爲
+function setTreeData(source) {
+  let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+  return cloneData.filter((father) => {
+    // 寰幆鎵�鏈夐」
+    let branchArr = cloneData.filter((child) => father.id == child.pid);
+    if (branchArr.length > 0) {
+      branchArr.sort(function (a, b) {
+        return a.orderNum - b.orderNum;
+      });
+    }
+
+    branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
+    // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛�
+    // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋�
+    return father.pid == 0; // 杩斿洖涓�绾ц彍鍗�
+  });
+}
+onMounted(() => {
+  getLayer();
+});
 </script>
 
 <style lang="less" scoped>
@@ -239,46 +294,56 @@
     }
   }
   .layerContent {
+    height: 635px;
     padding: 0 8px;
+    overflow: auto;
+    overflow-y: auto;
   }
-
-  .slider-demo-block {
-    margin-top: 22px;
+  .layerContent::-webkit-scrollbar {
+    width: 8px;
   }
-  .demonstration {
-    font-size: 12px;
-    font-weight: 300;
-    color: #d6e4ff;
+  .layerContent::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    background: rgba(0, 0, 0, 0.2);
   }
-  /deep/ .el-slider__runway {
-    height: 2px;
-
-    background: #73a1fa;
-  }
-  /deep/ .el-slider__bar {
-    height: 2px;
-
-    background: #73a1fa;
-  }
-  /deep/ .el-slider__button {
-    width: 17px;
-    height: 18px;
-    border: 0;
-    background: url("../../assets/img/DBX.png") no-repeat center;
-    background-size: 100% 100%;
+  .layerContent::-webkit-scrollbar-track {
     border-radius: 0;
+    background: rgba(0, 0, 0, 0);
+  }
+  .el-tree {
+    width: 100%;
+    overflow-y: auto;
+  }
+  .layerContent .el-tree-node__content {
+    overflow: hidden;
   }
 
-  .selectBox {
-    margin-top: 24px;
-    .selectTile {
-      padding-bottom: 6px;
-    }
-    .el-select {
-      width: 100%;
-    }
+  .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;
 }
@@ -316,12 +381,35 @@
 .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;
+// .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>
diff --git a/src/views/layer/layerSet.vue b/src/views/layer/layerSet.vue
index c3cdad0..ae13792 100644
--- a/src/views/layer/layerSet.vue
+++ b/src/views/layer/layerSet.vue
@@ -10,16 +10,18 @@
         </div>
       </div>
       <div class="layerContent">
-        <!-- <el-tree
+        <el-tree
+          node-key="id"
           :props="props"
           :highlight-current="true"
           :current-node-key="selectedNodeId"
-          :data="menuOption"
+          :data="layerTree"
           :expand-on-click-node="false"
           @node-click="handleNodeClick"
-        /> -->
+          ref="treeRef"
+        />
 
-        <div class="contentBox" v-for="(item, i) in menuOption" :key="i">
+        <!-- <div class="contentBox" v-for="(item, i) in menuOption" :key="i">
           <div
             class="contentTile"
             @click.stop="selectList(item)"
@@ -54,7 +56,7 @@
               </div>
             </div>
           </div>
-        </div>
+        </div> -->
       </div>
     </div>
     <div class="edit_box">
@@ -93,8 +95,12 @@
               v-model="form.region"
               placeholder="璇烽�夋嫨鍥惧眰绫诲瀷"
             >
-              <el-option label="Zone one" value="shanghai" />
-              <el-option label="Zone two" value="beijing" />
+              <el-option
+                v-for="(e, i) in stretchOptions"
+                :label="e.label"
+                :value="e.value"
+                :key="i"
+              />
             </el-select>
           </el-form-item>
 
@@ -125,11 +131,17 @@
 import { Plus, Delete, Top, Bottom } from "@element-plus/icons-vue";
 import { ElMessage } from "element-plus";
 const stretchValue = ref("");
-const emits = defineEmits(["SETstate"]);
+const emits = defineEmits(["SETstate", "addlayer", "delLayer"]);
+//defineProps 鏉ユ帴鏀剁粍浠剁殑浼犲��
+const defineProp = defineProps({
+  layerTree: Array,
+});
+let treeRef = ref();
+
 const stretchOptions = [
   {
-    value: "Option1",
-    label: "Option1",
+    value: "鐩綍",
+    label: "鐩綍",
   },
   {
     value: "Option2",
@@ -149,30 +161,6 @@
   },
 ];
 
-let menuOption = reactive([
-  {
-    name: "娴嬭瘯",
-    isShow: false,
-    checkedAll: false,
-    id: 1,
-    children: [
-      {
-        id: 2,
-        layerState: false,
-        name: "鍥惧眰鍚嶇О",
-        layerUrl: "",
-      },
-    ],
-  },
-  {
-    id: 3,
-    name: "娴嬭瘯1",
-    isShow: false,
-    checkedAll: true,
-    layerState: false,
-    children: [],
-  },
-]);
 const form = reactive({
   name: "",
   region: "",
@@ -181,12 +169,13 @@
   children: [],
 });
 const props = {
-  label: "name",
+  label: "cnName",
   children: "children",
 };
 // 褰撳墠閫変腑鐨勮妭鐐� id
 const selectedNodeId = ref(null as any); //鍋氱被鍨嬫柇瑷�澶勭悊
 const selectedObj = ref(null);
+let menuOption = ref([]);
 const handleCheckChange = (
   data: Tree,
   checked: boolean,
@@ -204,12 +193,11 @@
   if (data.id === selectedNodeId.value) {
     // 濡傛灉褰撳墠鑺傜偣宸茬粡閫変腑锛屽垯鍙栨秷閫変腑
     selectedNodeId.value = null;
-    console.log(selectedNodeId.value, "鍙栨秷閫変腑");
   } else {
     // 鍚﹀垯閫変腑褰撳墠鑺傜偣
     selectedNodeId.value = data.id;
-    form.selectName = data.name;
-    console.log(selectedNodeId.value, "褰撳墠閫変腑鐨勮妭鐐�");
+    form.selectName = data.cnName;
+    selectedObj.value = data;
   }
 }
 //鏂板
@@ -218,44 +206,32 @@
   for (var i = 0; i < 7; i++) {
     id += Math.floor(Math.random() * 10);
   }
+  var addObj = {
+    id: id,
+    name: form.name,
+    region: form.region,
+    layerUrl: form.layerUrl,
+    children: [],
+    type: 2,
+    parentId: null,
+  };
+  if (form.region == "鐩綍") {
+    addObj.type = 1;
+  }
 
   if (t == "t") {
-    menuOption.forEach((e, i) => {
-      if (e.id == selectedNodeId.value) {
-        menuOption.push({
-          id: id,
-          name: form.name,
-          region: form.region,
-          layerUrl: form.layerUrl,
-          children: [],
-        });
-      } else {
-        e.children.forEach((v) => {
-          if (v.id == selectedNodeId.value) {
-            menuOption[i].children.push({
-              id: id,
-              name: form.name,
-              region: form.region,
-              layerUrl: form.layerUrl,
-              children: [],
-            });
-          }
-        });
-      }
-    });
+    addObj.parentId = selectedObj.value.parentId;
   } else {
-    // if(){
-    //   return
-    // }
+    addObj.parentId = selectedNodeId.value;
   }
+  emits("addlayer", addObj);
 };
 //鍒犻櫎
 const delLayer = () => {
-  menuOption = menuOption.filter((item) => {
-    return item.id != selectedNodeId.value;
-  });
-
-  console.log(menuOption);
+  console.log(selectedObj.value);
+  console.log(treeRef.value.getNode(selectedObj.value));
+  treeRef.value.remove(treeRef.value.getNode(selectedObj.value));
+  // emits("delLayer", selectedNodeId.value);
 };
 //鍥惧眰璁剧疆寮规
 const layerSet = () => {};
@@ -264,45 +240,11 @@
   emits("SETstate", false);
 };
 const handlIsShow = (res: string) => {
-  menuOption.forEach((e) => {
+  menuOption.value.forEach((e) => {
     if (e.name == res) {
       e.isShow = !e.isShow;
     }
   });
-};
-//閫夋嫨鍒楄〃
-const selectList = (v) => {
-  // selectedNodeId.value = v.id;
-  console.log(v);
-  if (v.id === selectedNodeId.value) {
-    // 濡傛灉褰撳墠鑺傜偣宸茬粡閫変腑锛屽垯鍙栨秷閫変腑
-    selectedNodeId.value = null;
-    console.log(selectedNodeId.value, "鍙栨秷閫変腑");
-  } else {
-    // 鍚﹀垯閫変腑褰撳墠鑺傜偣
-    selectedNodeId.value = v.id;
-    form.selectName = v.name;
-    selectedObj.value = v;
-    console.log(selectedNodeId.value, "褰撳墠閫変腑鐨勮妭鐐�");
-  }
-};
-const remove = (node: Node, data: Tree) => {
-  const parent = node.parent;
-  const children: Tree[] = parent.data.children || parent.data;
-  const index = children.findIndex((d) => d.id === data.id);
-  children.splice(index, 1);
-  // menuOption.value = [...menuOption.value];
-};
-let id = 1000;
-const append = (data: Tree) => {
-  const newChild = { id: id++, name: "testtest", children: [] };
-  if (!data.children) {
-    data.children = [];
-  }
-  data.children.push(newChild);
-  // console.log(data);
-  // menuOption = [...menuOption];
-  // console.log(menuOption);
 };
 </script>
 
@@ -524,12 +466,13 @@
     padding: 4px;
   }
 }
-/deep/
-  .el-tree--highlight-current
-  .el-tree-node.is-current
-  > .el-tree-node__content {
-  background: rgba(104, 156, 255, 0.5) !important;
-}
+// .layerContent
+//   /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;
 }
diff --git a/src/views/login.vue b/src/views/login.vue
index b850cd1..85a51bd 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -64,22 +64,24 @@
             />
           </el-form-item>
           <el-form-item prop="verify">
-            <div style="display: flex;justify-content: space-between; width: 100%; ">
+            <div
+              style="display: flex; justify-content: space-between; width: 100%"
+            >
               <el-input
                 placeholder="璇疯緭鍏ラ獙璇佺爜锛堝拷鐣ュぇ灏忓啓锛�"
                 v-model="ruleForm.verify"
-                style="width:68%;"
+                style="width: 68%"
               />
-              <valid-code style="width:27%;"></valid-code>
+              <valid-code style="width: 27%"></valid-code>
             </div>
-
           </el-form-item>
           <el-form-item>
             <el-button
               type="primary"
               class="nobr loginbtn btnbox"
               @click="submitForm(ruleFormRef)"
-            >鐧诲綍</el-button>
+              >鐧诲綍</el-button
+            >
           </el-form-item>
         </el-form>
       </div>
@@ -114,8 +116,8 @@
 const reportUrl = ref("");
 
 const ruleForm = reactive({
-  user: "",
-  passWorld: "",
+  user: "admin",
+  passWorld: "Admin@1234_lf",
   verify: "",
 });
 const validateVerify = (rule: any, value: any, callback: any) => {
diff --git a/src/views/menus.vue b/src/views/menus.vue
index 080615b..b9c8cf9 100644
--- a/src/views/menus.vue
+++ b/src/views/menus.vue
@@ -1,25 +1,13 @@
 <template>
-  <div
-    class="menus"
-    v-show="fullScreen"
-  >
+  <div class="menus" v-show="fullScreen">
     <div class="logo_box">
-      <img
-        src="../assets/img/logo.png"
-        alt=""
-        class="logo"
-      />
+      <img src="../assets/img/logo.png" alt="" class="logo" />
       <div class="logo_name">
         <h3>鏈堢悆澶ф暟鎹湴鐞嗙┖闂村垎鏋愬睍绀哄钩鍙�</h3>
-        <img
-          src="../assets/img/logob.png"
-          alt=""
-          class="logo_name_b"
-        />
+        <img src="../assets/img/logob.png" alt="" class="logo_name_b" />
       </div>
     </div>
     <div class="menus_box">
-
       <div class="menu_Image_box">
         <div
           class="imgBox"
@@ -39,31 +27,19 @@
           />
         </div>
       </div>
-
     </div>
   </div>
-  <div
-    class="content_box"
-    v-show="fullScreen"
-  >
-    <layer-manage
-      @setCloseLayer="setCloseLayer"
-      v-if="checkMenuFlag == 'l1'"
-    > </layer-manage>
+  <div class="content_box" v-show="fullScreen">
+    <layer-manage @setCloseLayer="setCloseLayer" v-if="checkMenuFlag == 'l1'">
+    </layer-manage>
+
     <plotting v-show="checkMenuFlag == 'l2'"> </plotting>
     <baseMapSwitching v-show="checkMenuFlag == 'l5'"> </baseMapSwitching>
     <search v-if="thematicMapBtnState"> </search>
   </div>
-  <top-btn
-    v-show="fullScreen"
-    v-if="thematicMapBtnState"
-  ></top-btn>
+  <top-btn v-show="fullScreen" v-if="thematicMapBtnState"></top-btn>
   <thematic-map v-show="!thematicMapBtnState"></thematic-map>
-  <div
-    class="fullScreen_btn"
-    v-show="!fullScreen"
-    @click="screen"
-  ></div>
+  <div class="fullScreen_btn" v-show="!fullScreen" @click="screen"></div>
 </template>
 
 <script lang="ts" setup>

--
Gitblit v1.9.3