From 9edf886a263e2d336211c88879226cf6c19de2e7 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期五, 18 四月 2025 14:26:55 +0800
Subject: [PATCH] change

---
 src/components/tools/Tools.vue |  191 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 129 insertions(+), 62 deletions(-)

diff --git a/src/components/tools/Tools.vue b/src/components/tools/Tools.vue
index e0fdbd5..146a429 100644
--- a/src/components/tools/Tools.vue
+++ b/src/components/tools/Tools.vue
@@ -4,36 +4,87 @@
     <div class="tools-title" @click="toggleCollapse">
       宸ュ叿鏍�
       <div class="popup-menu" v-if="isPopupVisible">
-        <div class="popup-item" v-for="(option, idx) in currentToolOptions" :key="idx"
-          @click="handleOptionClick(option)">
-          <img class="popup-icon" :src="require(`../../assets/img/tools/tools_second/${option.icon}.png`)
-            " :alt="option.name" />
+        <div
+          class="popup-item"
+          v-for="(option, idx) in currentToolOptions"
+          :key="idx"
+          @click="handleOptionClick(option)"
+        >
+          <img
+            class="popup-icon"
+            :src="
+              require(`../../assets/img/tools/tools_second/${option.icon}.png`)
+            "
+            :alt="option.name"
+          />
           {{ option.name }}
         </div>
       </div>
       <LayerTree class="popup-menu" v-show="showLayerTree" />
       <!-- 鍙鍩熷垎鏋� -->
-      <seeAnalyze :option="option" v-show="seeAnalyzeShow" @update:showConeLine="handleUpdateShowConeLine"
-        @update-option="onUpdateOption" @draw="onDraw" @clear="onClear" class="popup-menu-see" />
+      <seeAnalyze
+        :option="option"
+        v-show="seeAnalyzeShow"
+        @update:showConeLine="handleUpdateShowConeLine"
+        @update-option="onUpdateOption"
+        @draw="onDraw"
+        @clear="onClear"
+        class="popup-menu-see"
+      />
       <!-- 鍓栭潰鎻愬彇 -->
-      <TopographyDia @draw="handleDraw" @clear="handleClear" class="popup-menu-see" v-show="topographyShow" />
+      <TopographyDia
+        @draw="handleDraw"
+        @clear="handleClear"
+        class="popup-menu-see"
+        v-show="topographyShow"
+      />
       <!-- 鍓栭潰鎻愬彇鐨別charts -->
       <div v-show="echartsShow" id="sectionCharts" class="sectionChars">
         <div id="echartsView1" style="width: 100%; height: 100%"></div>
       </div>
-      <!-- 鍧″悜鍒嗘瀽 -->
-      <Aspect v-show="showAspect" @draw="SlopeArrow" @clear="SlopeArrowClose" class="popup-menu-see" />
-      <SlopeAnalysis v-show="showSlope" class="popup-menu-see" @update-slope="onUpdateSlope" />
+      <!-- 鍧″害鍧″悜鍒嗘瀽 -->
+      <Aspect
+        v-show="showAspect"
+        @draw="SlopeArrow"
+        @clear="SlopeArrowClose"
+        @handleaspect="handleaspect"
+        @handleSlope="handleSlope"
+        class="popup-menu-see"
+      />
+      <SlopeAnalysis
+        @draw="SlopeAnalysiss"
+        v-show="isContourLabel"
+        class="popup-menu-see"
+        @update-slope="onUpdateSlope"
+      />
       <!-- 闆� -->
-      <Rain v-show="showRain" class="popup-menu-see" @update-rain="onUpdateRain" />
-      <Snow v-show="showSnow" class="popup-menu-see" @update-snow="onUpdateSnow" />
+      <Rain
+        v-show="showRain"
+        class="popup-menu-see"
+        @update-rain="onUpdateRain"
+      />
+      <Snow
+        v-show="showSnow"
+        class="popup-menu-see"
+        @update-snow="onUpdateSnow"
+      />
     </div>
 
     <!-- 宸ュ叿鏍忓唴瀹� -->
     <transition name="fade">
       <div v-if="!isCollapsed" class="tools-content">
-        <div class="tools-item" v-for="(item, index) in toolList" :key="index" @click.stop="handleClick(item)">
-          <img class="icon" :src="require(`../../assets/img/tools/${item.icon}.png`)" :title="item.name" alt="" />
+        <div
+          class="tools-item"
+          v-for="(item, index) in toolList"
+          :key="index"
+          @click.stop="handleClick(item)"
+        >
+          <img
+            class="icon"
+            :src="require(`../../assets/img/tools/${item.icon}.png`)"
+            :title="item.name"
+            alt=""
+          />
         </div>
       </div>
     </transition>
@@ -79,9 +130,6 @@
 // 鍧″悜绠ご寮圭獥
 const showAspect = ref(false);
 
-// 鍧″害鍒嗘瀽寮圭獥
-const showSlope = ref(false);
-
 // 宸ュ叿鍒楄〃
 const toolList = ref([
   {
@@ -113,8 +161,7 @@
     active: false,
     options: [
       { name: "鐐逛綅淇℃伅鎻愬彇", icon: "鐐逛綅淇℃伅鎻愬彇" },
-      { name: "鍧″害鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
-      { name: "鍧″悜鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
+      { name: "鍧″害鍧″悜鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
       { name: "鍓栭潰鎻愬彇", icon: "鍓栭潰鎻愬彇" },
       { name: "鎸栧~鏂硅绠�", icon: "鎸栧~鏂硅绠�" },
       { name: "绛夐珮绾垮垎鏋�", icon: "绛夐珮绾垮垎鏋�" },
@@ -152,48 +199,61 @@
 
 // 澶勭悊宸ュ叿鐐瑰嚮浜嬩欢
 function handleClick(tool, event) {
-  console.log(tool.options);
-  // 濡傛灉宸ュ叿鍚嶇О鏄� "鍥惧眰绠$悊"
+  // 閬嶅巻宸ュ叿鍒楄〃锛屾洿鏂版縺娲荤姸鎬�
+  toolList.value.forEach((item) => {
+    item.active = item.name === tool.name && currentToolOptions.value !== tool.options;
+  });
+
+  // 瀹氫箟涓�涓嚱鏁扮敤浜庨噸缃墍鏈夌姸鎬�
+  const resetAllStates = () => {
+    isPopupVisible.value = false;
+    seeAnalyzeShow.value = false;
+    topographyShow.value = false;
+    echartsShow.value = false;
+    showAspect.value = false;
+    showRain.value = false;
+    showSnow.value = false;
+    isContourLabel.value = false;
+  };
+
+  // 濡傛灉褰撳墠宸ュ叿宸茬粡鏄縺娲荤姸鎬侊紝鍒欏叧闂畠
+  if (currentToolOptions.value === tool.options) {
+    currentToolOptions.value = null; // 娓呯┖褰撳墠宸ュ叿閫夐」
+    resetAllStates();
+    return;
+  }
+
+  // 濡傛灉宸ュ叿鍚嶇О鏄� "鍥惧眰绠$悊"锛屽垏鎹㈠浘灞傛爲鏄剧ず鐘舵��
   if (tool.name === "鍥惧眰绠$悊") {
-    showLayerTree.value = !showLayerTree.value; // 鍒囨崲鍥惧眰鏍戠殑鏄剧ず鐘舵��
-    isPopupVisible.value = false; // 闅愯棌寮圭獥
-    seeAnalyzeShow.value = false; //鍙鍩�
-    topographyShow.value = false; //鍓栭潰
-    echartsShow.value = false; //鍓栭潰echarts
-    showAspect.value = false; //鍧″悜绠ご
-    showSlope.value = false; //鍧″悜绠ご
-    showRain.value = false; //闆ㄥぉ
-    showSnow.value = false; //闆ㄥぉ
+    showLayerTree.value = !showLayerTree.value;
+    resetAllStates();
     return;
   }
 
   // 瀵逛簬鍏朵粬宸ュ叿
+  resetAllStates();
   showLayerTree.value = false; // 纭繚鍥惧眰鏍戦殣钘�
   isPopupVisible.value = true; // 鏄剧ず寮圭獥
   currentToolOptions.value = tool.options; // 璁剧疆褰撳墠宸ュ叿鐨勫姛鑳介�夐」
-  seeAnalyzeShow.value = false; //鍙鍩�
-  topographyShow.value = false; //鍓栭潰
-  echartsShow.value = false; //鍓栭潰echarts
-  showAspect.value = false; //鍧″悜绠ご
-  showSlope.value = false; //鍧″悜绠ご
-  showRain.value = false; //闆ㄥぉ
-  showSnow.value = false; //闆ㄥぉ
 }
+
+const currentOption = ref(null);
 
 // 澶勭悊寮圭獥閫夐」鐐瑰嚮浜嬩欢
 function handleOptionClick(option) {
   isPopupVisible.value = false;
-  console.log("Selected option:", option);
+  currentOption.value = option.name;
+  console.log("Selected option:", currentOption.value);
   const actionMap = {
     鏄剧ず鍥惧眰: () => (showLayerTree.value = true),
     闅愯棌鍥惧眰: () => (showLayerTree.value = false),
     闆ㄥぉ妯″紡: () => {
       showRain.value = true;
-      onUpdateRain()
+      onUpdateRain();
     },
     闆ぉ妯″紡: () => {
-      showSnow.value = true
-      onUpdateSnow()
+      showSnow.value = true;
+      onUpdateSnow();
     },
     娓呴櫎澶╂皵: () => {
       if (1) {
@@ -229,11 +289,16 @@
     鍓栭潰鎻愬彇: () => {
       topographyShow.value = true;
     },
-    鍧″害鍒嗘瀽: () => {
-      showSlope.value = true;
-    },
-    鍧″悜鍒嗘瀽: () => {
+    鍧″害鍧″悜鍒嗘瀽: () => {
       showAspect.value = true;
+    },
+    绛夐珮绾垮垎鏋�: () => {
+      isContourLabel.value = true;
+      // if (isContourLabel.value === false) {
+      //   mapUtils.createContourLabel();
+      // } else {
+      //   mapUtils.closeContourLabel();
+      // }
     },
     鐐逛綅淇℃伅鎻愬彇: () => {
       isPickActive.value = !isPickActive.value;
@@ -253,14 +318,6 @@
         mapUtils.FloodAnalysis("close");
       } else {
         mapUtils.FloodAnalysis();
-      }
-    },
-    绛夐珮绾垮垎鏋�: () => {
-      isContourLabel.value = !isContourLabel.value;
-      if (isContourLabel.value === false) {
-        mapUtils.createContourLabel();
-      } else {
-        mapUtils.closeContourLabel();
       }
     },
   };
@@ -325,6 +382,14 @@
   mapUtils.handleClear();
 };
 
+// 鍒掑垎鍖哄煙
+const SlopeArrow = () => {
+  mapUtils.hfqy();
+};
+// 鍧″害鍒嗘瀽
+const handleaspect = () => {
+  mapUtils.pdfx();
+};
 //鍧″害鐨勭澶磋搴�(瑙掑害涓�0~1,鑼冨洿鍐呯殑鍧囧寑鎻掑��)
 const angles = [
   0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7,
@@ -352,28 +417,30 @@
   "#F0AD56",
   "#F2CC45",
 ];
-
-const SlopeArrow = () => {
+// 鍧″悜鍒嗘瀽
+const handleSlope = () => {
   mapUtils.pxjt(colors, angles);
 };
-// 鍏抽棴鍧″悜绠ご
+// 鍏抽棴鍧″害鍧″悜鍒嗘瀽
 const SlopeArrowClose = () => {
-  mapUtils.gbpxjt();
+  mapUtils.clearPreviousAnalysis();
 };
 
-// 鍧″害鍒嗘瀽
+// 绛夐珮绾�
 const formData = reactive({
-  terrainRender: 0,
   contourLines: false,
-  color: "",
+  color: "red",
   spacing: 50,
   lineWidth: 5,
 });
 
-// 鍧″害
+const SlopeAnalysiss = () => {
+  mapUtils.dgxfx(formData);
+};
+
 const onUpdateSlope = (newOption) => {
   Object.assign(formData, newOption);
-  mapUtils.pdfx(formData);
+  mapUtils.dgxfx(formData);
 };
 
 // 闆�

--
Gitblit v1.9.3