From da0d06cb06ef3fc55d88cb4a9a52505ac35c03e6 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期三, 26 三月 2025 15:12:31 +0800
Subject: [PATCH] 走航融合(待完成)

---
 src/views/underwaymix/component/GridStyleTool.vue |  221 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 167 insertions(+), 54 deletions(-)

diff --git a/src/views/underwaymix/component/GridStyleTool.vue b/src/views/underwaymix/component/GridStyleTool.vue
index 0b06203..35b61e7 100644
--- a/src/views/underwaymix/component/GridStyleTool.vue
+++ b/src/views/underwaymix/component/GridStyleTool.vue
@@ -12,53 +12,96 @@
     <el-col span="2">
       <BaseCard v-show="show" direction="right" borderless="r">
         <template #content>
-          <div class="content-wrap">
+          <el-scrollbar class="content-wrap">
             <div v-for="(g, i) in gridCtrlList" :key="i">
               {{ g.name }}
               <div v-for="(value, t) in g.views" :key="t">
-                <!-- {{ value[0] }} -->
-                {{ value[1].extData.name }}
+                <span v-if="value.extData.type == 0">{{ value.tag + '.' }}</span>
+                {{ value.extData.name }}
                 <!-- {{ key }} -->
                 <!-- <el-text>{{ g.name }}</el-text> -->
                 <!-- <div class="m-t-8">缃戞牸瑕佺礌</div> -->
-                <el-row class="m-t-8">
+                <el-row class="m-t-8" justify="space-between">
                   <CheckButton
                     active-text="鏄剧ず缃戞牸"
                     inactive-text="闅愯棌缃戞牸"
                     :default-value="true"
-                    @change="handleGridClick"
+                    @change="(e) => handleGridClick(e, i, value)"
                   >
                   </CheckButton>
                   <CheckButton
                     active-text="鏄剧ず鎺掑悕"
                     inactive-text="闅愯棌鎺掑悕"
                     :default-value="false"
-                    @change="handleGridClick"
+                    @change="(e) => handleRankClick(e, i, value)"
                   >
                   </CheckButton>
                   <CheckButton
                     active-text="鏄剧ず鏁版嵁"
                     inactive-text="闅愯棌鏁版嵁"
                     :default-value="false"
-                    @change="handleGridClick"
+                    @change="(e) => handleDataClick(e, i, value)"
                   >
                   </CheckButton>
                 </el-row>
-                <el-row class="m-b-8" gap="2">
-                  <div class="m-t-8">缃戞牸閫忔槑搴�</div>
+                <el-row class="m-t-8" justify="space-between">
+                  <CheckButton
+                    active-text="缁樺埗瀵规瘮鑹�"
+                    inactive-text="缁樺埗鏍囧噯鑹�"
+                    :default-value="false"
+                    @change="(e) => handleColorClick(e, i, value)"
+                  >
+                  </CheckButton>
+                  <CheckButton
+                    active-text="椋庨櫓鐑姏鍥�"
+                    inactive-text="椋庨櫓鐑姏鍥�"
+                    :default-value="false"
+                    @change="(e) => handleHeatMapClick(e, i, value)"
+                  >
+                  </CheckButton>
+                  <CheckButton
+                    v-if="value.extData.type == 0"
+                    active-text="鏄剧ず璧拌埅杞ㄨ抗"
+                    inactive-text="闅愯棌璧拌埅杞ㄨ抗"
+                    :default-value="false"
+                    @change="(e) => handleUnderwayClick(e, i, value)"
+                  >
+                  </CheckButton>
+                  <CheckButton
+                    v-if="value.extData.type == 1"
+                    active-text="楂樹寒铻嶅悎缃戞牸"
+                    :default-value="true"
+                    @change="(e) => handleHighlightGridClick(e, i, value)"
+                  >
+                  </CheckButton>
+                </el-row>
+                <!-- <el-row class="m-b-8" align="middle"> -->
+                <el-form-item label="閫忔槑搴�">
+                  <!-- <div class="m-t-8">缃戞牸閫忔槑搴�</div> -->
                   <el-slider
-                    v-model="opacityValue"
+                    v-model="value.opacityValue"
                     :min="0"
                     :max="1"
                     :step="0.1"
                     show-stops
-                    @change="handleOpacityChange"
-                    style="width: 200px"
+                    @change="(e) => handleOpacityChange(e, i, value)"
+                    style="width: 150px"
                   />
-                </el-row>
+                  <el-input-number
+                    class="m-l-16"
+                    size="small"
+                    v-model="value.opacityValue"
+                    :min="0"
+                    :max="1"
+                    :step="0.1"
+                    @change="(e) => handleOpacityChange(e, i, value)"
+                  />
+                </el-form-item>
+                <!-- </el-row> -->
+                <el-divider />
               </div>
             </div>
-          </div>
+          </el-scrollbar>
         </template>
       </BaseCard>
     </el-col>
@@ -68,7 +111,11 @@
 /**
  * 缃戞牸鏍峰紡鎺у埗宸ュ叿
  */
-import { ref, watch, computed } from 'vue';
+import { ref, reactive, onMounted, onUnmounted, computed, toRaw } from 'vue';
+import gridApi from '@/api/gridApi';
+import { useGridStore } from '@/stores/grid-info';
+
+const gridStore = useGridStore()
 
 const props = defineProps({
   // 缃戞牸绠$悊瀵硅薄[SatelliteGrid]鏁扮粍
@@ -78,68 +125,134 @@
   }
 });
 
+const emits = defineEmits(['showUnderway']);
+
 const gridCtrlList = computed(() => {
   return props.gridCtrls.map((g) => {
-    return {
+    return reactive({
       name: g.name,
-      views: Array.from(g.mapViewsMap)
-    };
+      views: Array.from(g.mapViewsMap).map((v) => {
+        return {
+          tag: v[0],
+          extData: v[1].extData,
+          opacityValue: 1
+        };
+      })
+    });
   });
 });
 
-// watch(
-//   () => props.gridCtrls,
-//   (nV, oV) => {
-//     gridCtrlList.value = nV.map((v) => {
-//       return Array.from(v.infoMap);
-//     });
-//   },
-//   { deep: true }
-// );
-
 const show = ref(true);
 
-const gridVisible = ref(false);
-const rankVisible = ref(false);
-const dataVisible = ref(false);
-const isStandardColor = ref(true);
-const isOpacity = ref(false);
-const opacityValue = ref(0.7);
+// const gridVisible = ref(false);
+// const rankVisible = ref(false);
+// const dataVisible = ref(false);
+// const isStandardColor = ref(true);
+// const isOpacity = ref(false);
+// const opacityValue = ref(0.7);
 
-const emits = defineEmits([
-  'showRank',
-  'showData',
-  'changeColor',
-  'changeOpacity'
-]);
+// const emits = defineEmits([
+//   'showRank',
+//   'showData',
+//   'changeColor',
+//   'changeOpacity'
+// ]);
 
-function handleRankClick() {
-  rankVisible.value = !rankVisible.value;
-  emits('showRank', rankVisible.value);
+function handleGridClick(e, index, value) {
+  const key = value.tag;
+  toRaw(props.gridCtrls[index]).changeVisibility({
+    tags: [key],
+    showGridViews: e
+  });
 }
 
-function handleDataClick() {
-  dataVisible.value = !dataVisible.value;
-  emits('showData', dataVisible.value);
+function handleRankClick(e, index, value) {
+  const key = value.tag;
+  toRaw(props.gridCtrls[index]).changeVisibility({
+    tags: [key],
+    showRankTxt: e
+  });
 }
 
-function handleColorClick() {
-  isStandardColor.value = !isStandardColor.value;
-  emits('changeColor', isStandardColor.value);
+function handleDataClick(e, index, value) {
+  const key = value.tag;
+  toRaw(props.gridCtrls[index]).changeVisibility({
+    tags: [key],
+    showDataTxt: e
+  });
 }
 
-function handleOpacityClick() {
-  // isOpacity.value = !isOpacity.value;
-  // emits('changeOpacity', isOpacity.value);
+function handleColorClick(e, index, value) {
+  const key = value.tag;
+  toRaw(props.gridCtrls[index]).changeGridColor({
+    tag: key,
+    useCustomColor: e
+  });
 }
 
-function handleOpacityChange(value) {
-  emits('changeOpacity', value);
+function handleOpacityChange(e, index, value) {
+  console.log(e, index, value);
+
+  const key = value.tag;
+  // value.opacityValue = e;
+  toRaw(props.gridCtrls[index]).changeGridOpacity({
+    tag: key,
+    opacityValue: toRaw(value.opacityValue)
+  });
+}
+
+function handleUnderwayClick(e, index, value) {
+  emits('showUnderway', {
+    isShow: e,
+    dataId: value.tag
+  });
+}
+
+function handleHighlightGridClick(e, index, value) {
+  toRaw(props.gridCtrls[index]).mixGrid(value.tag.split('-'), e);
+}
+
+let heatTag
+function handleHeatMapClick(e, index, value) {
+  const _satelliteGrid = toRaw(props.gridCtrls[index])
+  _satelliteGrid.changeVisibility({
+    showGridViews: false,
+    showDataTxt: false,
+    showRankTxt: false
+  });
+  if (e) {
+    const data = _satelliteGrid.gridDataDetailMap.get(value.tag);
+    gridApi.buildUnderwayHeatmap(3, data).then((res) => {
+      heatTag = _satelliteGrid.drawHeatGrid2(value.tag, res.data);
+      _satelliteGrid.setGridEvent(
+        [heatTag],
+        'click',
+        (gridCell, gridDataDetail) => {
+          gridStore.selectedGridCellAndDataDetail = {
+            gridCell,
+            gridDataDetail
+          };
+        }
+      );
+    });
+  } else {
+    _satelliteGrid.changeVisibility({
+      tags: [value.tag],
+      showGridViews: true
+    });
+  }
 }
 </script>
 <style scoped>
 .content-wrap {
   min-width: 300px;
   min-height: 600px;
+  max-height: 80vh;
+  height: 80vh;
+  padding: 4px 16px;
+}
+
+:deep(.el-input-number) {
+  width: 80px;
 }
 </style>

--
Gitblit v1.9.3