sunzehao 6 месяцев назад
Родитель
Сommit
d7cfa770de

BIN
src/assets/cesiumImg/title_left_bg.png


+ 26 - 9
src/components/modelUnpack.vue

@@ -101,6 +101,10 @@ export default {
         return "";
       },
     },
+    showModelMsg: {
+        type: Boolean,
+        default: true
+    }
   },
 
   data() {
@@ -156,17 +160,20 @@ export default {
   created() {
     // this.test();
   },
-
   mounted() {
-    this.initLoader();
-    this.initThree({
-      dom: this.$refs.threeCanvas,
-      dom_Toushi: this.$refs.threeToushi,
-      showGridHelper: true,
-    });
+    
   },
-
   methods: {
+    init() {
+        this.$nextTick(() =>{
+            this.initLoader();
+            this.initThree({
+            dom: this.$refs.threeCanvas,
+            dom_Toushi: this.$refs.threeToushi,
+            showGridHelper: true,
+            });
+        })
+    },
     async test() {
       const rootRes = await axios.get("/nomads");
       const gfsList = this.extractDOM(rootRes.data, "body p");
@@ -303,7 +310,7 @@ export default {
     initThree(options) {
       this.$nextTick(() => {
         const parentDom = getComputedStyle(
-          document.querySelector(".el-tabs__content"),
+          document.querySelector(".el-drawer__body"),
           null
         );
 
@@ -844,6 +851,16 @@ export default {
       });
     },
   },
+  watch: {
+    showModelMsg: {
+        handler(val) {
+            if (val) {
+                this.init()
+            }
+        },
+        immediate: true,
+    }
+  },
 };
 </script>
 

+ 45 - 177
src/components/windHome/index.vue

@@ -2,92 +2,6 @@
   <div class="body">
     <div class="content">
       <div class="first">
-        <div class="weather" id="ifVideo">
-          <div class="viedo">
-            <img class="viedo-img" v-imageerror="defaultImg" :src="pageUrl" />
-          </div>
-        </div>
-        <!-- <div class="status">
-          <div class="indicator-title">
-            <div class="point point-left bottom"></div>
-            <div class="point point-right bottom"></div>
-            <div>设备状态</div>
-          </div>
-          <div class="status-concent">
-            <div class="concent-items">
-              <div class="imgs">
-                <img
-                  src="@/assets/windimgs/downF.png"
-                  style="display: inline-block"
-                />
-                <img
-                  src="@/assets/windimgs/windup.png"
-                  style="display: inline-block"
-                  class="qty_img"
-                />
-              </div>
-              <div class="concent-title">
-                接入风机
-                <div class="numbers">{{ wpInfos?.jrts }}</div>
-              </div>
-            </div>
-            <div
-              class="concent-item"
-              v-for="(item, index) in statusList"
-              :key="index"
-            >
-              <div class="titles">
-                <div class="titles-border" :class="item.color">
-                  <div class="spot">
-                    <div class="built-in"></div>
-                  </div>
-                  <div class="line"></div>
-                </div>
-                <div class="titles-item">
-                  {{ item.name }}
-                  <div class="titles-num" :class="item.color">
-                    {{ dataDeal(wpInfos[item.value], 0) }}
-                  </div>
-                </div>
-              </div>
-              <div class="sub-concent">
-                {{ item.name1 }}
-                <div class="sub-value">
-                  {{ dataDeal(wpInfos[item.value1], 0) }}
-                </div>
-              </div>
-              <div class="sub-concent">
-                {{ item.name2 }}
-                <div class="sub-value">
-                  {{ dataDeal(wpInfos[item.value2], 0) }}
-                </div>
-              </div>
-            </div>
-          </div>
-        </div> -->
-        <div class="power">
-          <div class="indicator-title">
-            <div class="point point-left bottom"></div>
-            <div class="point point-right bottom"></div>
-            <div>24小时功率曲线图</div>
-          </div>
-          <div
-            class="echarts"
-            style="width: 100%; height: 300px; margin-top: 10px"
-            v-if="showFlag"
-          >
-            <power-echarts
-              :CurveValues="powerList"
-              width="100%"
-              unit="MW"
-              height="100%"
-              :showTitle="false"
-              :id="'power'"
-            />
-          </div>
-        </div>
-      </div>
-      <div class="first">
         <div class="base-info">
           <div class="base-info-left">
             <div class="top" :data-type="$store.state.moreSty">
@@ -125,48 +39,28 @@
             </div>
           </div>
         </div>
-        <!-- <div class="status">
+        <div class="contrast">
           <div class="indicator-title">
-            <div class="point point-left bottom"></div>
+            <div class="point point-left point-right bottom"></div>
             <div class="point point-right bottom"></div>
-            <div class="status-title">
-              损失电量
-              <div class="date">
-                <div
-                  class="day"
-                  :class="dates === 'D' ? 'active' : ''"
-                  @click="handleChange('D')"
-                >
-                  日
-                </div>
-                <div
-                  class="mouth"
-                  :class="dates === 'M' ? 'active' : ''"
-                  @click="handleChange('M')"
-                >
-                  月
-                </div>
-                <div
-                  class="year"
-                  :class="dates === 'Y' ? 'active' : ''"
-                  @click="handleChange('Y')"
-                >
-                  年
-                </div>
-              </div>
-            </div>
+            <div>今日和昨日出力对比</div>
           </div>
-          <div class="status-concent">
-            <PieChart
+          <div style="width: 100%; margin-top: 10px; height: 400px">
+            <LineCharts
+              class="charts-item"
+              :list="contrastList"
               width="100%"
+              :ratio="1000"
               height="100%"
-              :ratio="10000"
-              unit="万kWh"
-              :lossPower="lossPower"
-            ></PieChart>
+              :unit="'MW'"
+              :showLegend="true"
+            >
+            </LineCharts>
           </div>
-        </div> -->
-        <div class="power">
+        </div>
+      </div>
+      <div class="first">
+        <div class="power" style="height: 300px">
           <div class="indicator-title">
             <div class="point point-left bottom"></div>
             <div class="point point-right bottom"></div>
@@ -185,52 +79,25 @@
             </BarCharts>
           </div>
         </div>
-      </div>
-      <div class="last">
-        <div class="info">
-          <div class="info-item" v-for="(item, index) in infoList" :key="index">
-            <div class="last-left">{{ item.name }}</div>
-            <div class="last-right" v-if="item.code === 'czlx'">风场</div>
-            <div class="last-right" v-else-if="item.code === 'jwd'">
-              {{ jwdUtill(wpInfos[item.code]) }}
-            </div>
-            <div class="last-right" v-else-if="item.code === 'aqts'">
-              {{ dataDeal(wpInfos[item.code], 0) }}
-            </div>
-            <div
-              class="last-right"
-              v-else-if="item.code === 'spbwsj' || item.code === 'zctysj'"
-            >
-              {{ sjUtill(wpInfos[item.code]) }}
-            </div>
-            <div class="last-right" v-else>
-              {{
-                !wpInfos[item.code] && wpInfos[item.code] !== 0
-                  ? "--"
-                  : item.unit
-                  ? wpInfos[item.code] / item.unit
-                  : wpInfos[item.code]
-              }}
-            </div>
-          </div>
-        </div>
-        <div class="contrast">
+        <div class="power" style="height: 400px">
           <div class="indicator-title">
-            <div class="point point-left point-right bottom"></div>
+            <div class="point point-left bottom"></div>
             <div class="point point-right bottom"></div>
-            <div>今日和昨日出力对比</div>
+            <div>24小时功率曲线图</div>
           </div>
-          <div style="width: 100%; margin-top: 10px; height: 400px">
-            <LineCharts
-              class="charts-item"
-              :list="contrastList"
+          <div
+            class="echarts"
+            style="width: 100%; height: 300px; margin-top: 10px"
+            v-if="showFlag"
+          >
+            <power-echarts
+              :CurveValues="powerList"
               width="100%"
-              :ratio="1000"
+              unit="MW"
               height="100%"
-              :unit="'MW'"
-              :showLegend="true"
-            >
-            </LineCharts>
+              :showTitle="false"
+              :id="'power'"
+            />
           </div>
         </div>
       </div>
@@ -1060,7 +927,7 @@ export default {
   display: flex;
   flex-direction: column;
   align-items: center;
-  width: 36%;
+  width: 49%;
   height: calc(100% - 10px);
   margin-right: 21px;
 
@@ -1386,8 +1253,8 @@ export default {
   .power {
     width: 100%;
     padding: 0 15px;
+    margin-bottom: 20px;
     // height: calc(100% - 301px - 300px - 40px);
-    height: 400px;
     background-color: rgba(0, 0, 0, 0.1);
     border-radius: 5px;
     display: flex;
@@ -1399,7 +1266,7 @@ export default {
     display: flex;
     margin-bottom: 20px;
     width: 100%;
-    height: 307px;
+    height: 300px;
 
     .base-info-left {
       width: 296px;
@@ -1578,6 +1445,17 @@ export default {
       }
     }
   }
+  .contrast {
+    width: 100%;
+    // height: calc(100% - 621px - 20px);
+    height: 400px;
+    background-color: rgba(0, 0, 0, 0.1);
+    border-radius: 5px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 0 15px;
+  }
 }
 
 .last {
@@ -1621,17 +1499,7 @@ export default {
     }
   }
 
-  .contrast {
-    width: 100%;
-    // height: calc(100% - 621px - 20px);
-    height: 400px;
-    background-color: rgba(0, 0, 0, 0.1);
-    border-radius: 5px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    padding: 0 15px;
-  }
+  
 }
 
 .indicator-title {

+ 280 - 24
src/views/cesiumComponents/topographicMap.vue

@@ -3,9 +3,34 @@
         <div id="cesiumContainer" style="width: 100%; height: 100vh"></div>
         <div :class="!menuComTStyB ? 'menuComTSty' : 'menuComT'">
             <menuCom :showbasemap="false" :showwindspeed="false" :showcloud="false" :showrainfall="false" 
-            :showtemperature="false" :showwind="false" :showexit="true" @handleInit="resetViewport" 
-            @handleExit="switchLayer" />
+            :showtemperature="false" :showwind="false" :showexit="true" :showwindModel="true"
+             @handleWindModel="showwindmodel" @handleInit="resetViewport" @handleExit="switchLayer" />
         </div>
+        <el-drawer v-model="windDrawer" direction="rtl" class="windModelDrawer" :before-close="handleClose">
+            <template #header>
+                <h3 style="font-weight: bold">{{windDrawerHeader}}</h3>
+            </template>
+            <template #default>
+                <div class="windDrawerCla">
+                    <div class="line" v-if="!showModelMsg">
+                        <div class="leftContent"><span>{{windDrawerTitle}}</span></div>
+                    </div>
+                    <div class="jcxx" v-if="showBasicMsg">
+                        <windHome :modelValItem="modelVal" />
+                    </div>
+                    <div class="spjk" v-if="showVideoMsg">
+                        <iframe src="https://www.bilibili.com/video/BV1421DYCELw?t=12.1" frameborder="0" style="width: 100%;height: 100%"></iframe>
+                    </div>
+                    <div class="gzck" v-if="showProblemMsg">
+                        <windPro />
+                    </div>
+                    <div class="third" v-if="showModelMsg">
+                        <ModelUnpack :modelUnpackType="modelUnpackType" :showModelMsg="showModelMsg" />
+                    </div>
+                </div>
+                <!--  -->
+            </template>
+        </el-drawer>
         <comModelDialog :showcomModelDia="showcomModelDia" :modelVal="modelVal" @showDia="showComDia" />
         <windView @showDetail="menuComTSty" />
     </div>
@@ -18,18 +43,33 @@ import fjLonLatJson from "./fjLonLat.json";
 import comModelDialog from "@/components/comModelDialog.vue"
 import windView from "./windView.vue"
 import menuCom from "../menuCom.vue"
+
+import windHome from "@/components/windHome/index.vue"
+import windPro from "@/components/windProDetail/windProblem.vue"
+import ModelUnpack from "@/components/modelUnpack.vue";
 export default {
     components: {
         comModelDialog,
         windView,
-        menuCom
+        menuCom,
+        windHome,
+        windPro,
+        ModelUnpack
     },
     data() {
         return {
             viewer: null,
             showcomModelDia: false,
             modelVal: null,
-            menuComTStyB: false
+            menuComTStyB: false,
+            modelUnpackType: "fengji",
+            windDrawer: false,
+            windDrawerTitle: '',
+            windDrawerHeader: '',
+            showBasicMsg: false,
+            showVideoMsg: false,
+            showProblemMsg: false,
+            showModelMsg: false
         }
     },
     mounted() {
@@ -162,31 +202,201 @@ export default {
             let that = this
             // 创建事件处理器
             const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
-            handler.setInputAction(function(click) {
-                const picked = viewer.scene.pick(click.position);
-                if (picked && picked.id === entity) {
+            // handler.setInputAction(function(click) {
+            //     const picked = viewer.scene.pick(click.position);
+            //     if (picked && picked.id === entity) {
+            //         console.log('你点击了标签或模型!', entity);
+            //         console.log('标签或模型数据!', val);
+            //         // alert('你点击了: ' + entity.label.text.getValue());
+            //         // this.$refs.comModelDialog.init(val)
+            //         if (name !== '光伏') {
+            //             that.showcomModelDia = true
+            //             that.modelVal = val
+            //         }
+            //     }
+            // }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+            handler.setInputAction(function(movement) {
+                var position = movement.position;
+                var pickedObject = viewer.scene.pick(position);
+                if (pickedObject && pickedObject.id === entity) {
                     console.log('你点击了标签或模型!', entity);
                     console.log('标签或模型数据!', val);
-                    // alert('你点击了: ' + entity.label.text.getValue());
-                    // this.$refs.comModelDialog.init(val)
-                    if (name !== '光伏') {
-                        that.showcomModelDia = true
-                        that.modelVal = val
-                    }
+                    that.modelVal = val
+                    // 找到实体,显示包含实体信息的弹框
+                    that.showRightClickPopup(position, viewer);
+                    return;
                 }
-            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 
-            if (entity) {
-                handler.setInputAction(function(hover) {
-                    const picked = viewer.scene.pick(hover.endPosition);
-                    if (entity && Cesium.defined(picked) && Cesium.defined(picked.id)) {
-                        console.log('你hover了标签或模型!', entity);
-                        console.log('hover标签或模型数据!', val);
-                    }
-                }, Cesium.ScreenSpaceEventType.TOUCH_MOVE);
-            }
+            }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
             
         },
+        showRightClickPopup(screenPosition, viewer) {
+            // 创建或获取弹框元素
+            var popup = document.getElementById('rightClickPopup');
+            if (!popup) {
+                popup = document.createElement('div');
+                popup.id = 'rightClickPopup';
+                popup.style.position = 'absolute';
+                // popup.style.backgroundColor = 'white';
+                popup.style.border = '1px solid rgba(255, 255, 255, 0.2)';
+                popup.style.borderRadius = '4px';
+                popup.style.padding = '10px';
+                popup.style.boxShadow = '0 2px 10px rgba(0,0,0,0.2)';
+                popup.style.backdropFilter = `blur(10px)`;
+                popup.style.zIndex = '1000';
+                popup.style.pointerEvents = 'auto'; // 确保弹框可交互
+                // 添加一个最小宽度,避免内容过短
+                popup.style.minWidth = '100px';
+                // 可选:添加箭头指向点击点
+                // 这需要更复杂的 CSS 或额外的 DOM 元素
+                document.body.appendChild(popup);
+            }
+            // <span class="popup-menu-item" data-message-type="model" style="cursor:pointer">模型解构</span>
+            let content = `
+                <div style="display: flex;gap: 10px;flex-direction: column;text-align: center;color: #fff">
+                    <span class="popup-menu-item" data-message-type="basic" style="cursor:pointer">基本信息</span>
+                    <span class="popup-menu-item" data-message-type="video" style="cursor:pointer">视频监控</span>
+                    <span class="popup-menu-item" data-message-type="problem" style="cursor:pointer">故障详情</span>
+                </div>
+            `
+
+            // 设置弹框内容
+            popup.innerHTML = content;
+
+            // --- 关键修正:准确计算弹框位置 ---
+
+            // 1. 获取 Cesium 画布 (Canvas) 相对于视口 (viewport) 的位置
+            var canvas = viewer.scene.canvas;
+            var canvasRect = canvas.getBoundingClientRect();
+            // console.log('Canvas Rect:', canvasRect); // 调试用
+
+            // 2. 计算弹框左上角在页面中的绝对 X 坐标
+            //    screenPosition.x 是相对于画布左上角的 X 偏移
+            //    canvasRect.left 是画布左上角相对于浏览器视口左上角的 X 偏移
+            //    window.pageXOffset 是页面水平滚动的距离
+            var popupLeft = canvasRect.left + screenPosition.x + window.pageXOffset;
+
+            // 3. 计算弹框左上角在页面中的绝对 Y 坐标
+            var popupTop = canvasRect.top + screenPosition.y + window.pageYOffset;
+
+            // --- 可选:添加偏移量,避免完全覆盖鼠标指针 ---
+            // 例如,向下和向右偏移 10px
+            var offsetX = 10;
+            var offsetY = 10;
+            popupLeft += offsetX;
+            popupTop += offsetY;
+
+            // --- 可选:边界检查,防止弹框超出屏幕 ---
+            var popupWidth = popup.offsetWidth || 150; // 确保有宽度
+            var popupHeight = popup.offsetHeight || 50; // 确保有高度
+            var windowWidth = window.innerWidth;
+            var windowHeight = window.innerHeight;
+
+            // 如果弹框右边会超出窗口,则左移
+            if (popupLeft + popupWidth > windowWidth) {
+                popupLeft = windowWidth - popupWidth - 10; // 靠右留 10px 边距
+            }
+            // 如果弹框底边会超出窗口,则上移
+            if (popupTop + popupHeight > windowHeight) {
+                popupTop = windowHeight - popupHeight - 10; // 靠下留 10px 边距
+            }
+            // 如果左边超出 (不太可能,但安全起见)
+            if (popupLeft < 0) popupLeft = 10;
+            // 如果顶边超出
+            if (popupTop < 0) popupTop = 10;
+
+            // --- 设置最终位置 ---
+            popup.style.left = popupLeft + 'px';
+            popup.style.top = popupTop + 'px';
+
+            // console.log('Popup Position:', { left: popupLeft, top: popupTop }); // 调试用
+
+            // 显示弹框
+            popup.style.display = 'block';
+
+            // --- 隐藏弹框的逻辑 (保持不变) ---
+            function hidePopup(event) {
+                // 检查点击是否发生在弹框内部,如果是,则不隐藏
+                if (event && popup.contains(event.target)) {
+                    return;
+                }
+                popup.style.display = 'none';
+                document.removeEventListener('click', hidePopup);
+                document.removeEventListener('keydown', keyDownHandler);
+            }
+
+            function keyDownHandler(event) {
+                if (event.key === 'Escape') {
+                    hidePopup();
+                }
+            }
+
+            let that = this
+            that.showBasicMsg = false
+            that.showVideoMsg = false
+            that.showProblemMsg = false
+            that.showModelMsg = false
+            function popupMenuItemClick(event) {
+                // 检查点击的是否是菜单项
+                if (event.target.classList.contains('popup-menu-item')) {
+                    event.stopPropagation(); // 阻止冒泡,防止弹框立即关闭
+
+                    var messageType = event.target.dataset.messageType; // 获取 data-message-type
+                    console.log('点击了菜单项:', messageType);
+
+                    // 调用您的 showMessage 函数
+                    that.showMessage(messageType);
+                    hidePopup()
+
+                    // 可选:执行后关闭弹框
+                    // hideRightClickPopup();
+                }
+            }
+
+            // 移除旧的监听器(避免重复绑定)
+            document.removeEventListener('click', hidePopup);
+            document.removeEventListener('click', popupMenuItemClick);
+            document.removeEventListener('keydown', keyDownHandler);
+
+            // 添加新的监听器
+            document.addEventListener('click', hidePopup);
+            document.addEventListener('click', popupMenuItemClick);
+            document.addEventListener('keydown', keyDownHandler);
+        },
+        showMessage(val) {
+            console.log('val===>>>', val)
+            this.windDrawer = true
+            this.windDrawerHeader = '各风机数据详情'
+            if (val === 'basic') {
+                this.windDrawerTitle = '基础信息'
+                this.showBasicMsg = true
+            } else if(val === 'video') {
+                this.windDrawerTitle = '视频监控'
+                this.showVideoMsg = true
+            } else if(val === 'problem') {
+                this.windDrawerTitle = '故障查看'
+                this.showProblemMsg = true
+            }
+            //  else {
+            //     this.windDrawerTitle = '模型解构'
+            //     this.showModelMsg = true
+            // }
+        },
+        showwindmodel() {
+            this.windDrawer = true
+            this.showBasicMsg = false
+            this.showVideoMsg = false
+            this.showProblemMsg = false
+            this.windDrawerHeader = '风机模型可视化解构说明'
+            this.showModelMsg = true
+        },
+        handleClose() {
+            this.windDrawer = false
+            this.showBasicMsg = false
+            this.showVideoMsg = false
+            this.showProblemMsg = false
+            this.showModelMsg = false
+        },
         showComDia(val) {
             this.showcomModelDia = val
             this.modelVal = null
@@ -266,7 +476,7 @@ export default {
         },
         menuComTSty(val) {
             this.menuComTStyB = val
-        }
+        },
     }
 }
 </script>
@@ -289,5 +499,51 @@ export default {
     bottom: 20px;
     left: 20px;
   }
+  
 }
+
+</style>
+<style lang="less">
+.el-overlay{
+    .windModelDrawer{
+        width: 80% !important;
+        .el-drawer__body{
+            overflow: hidden;
+            padding-top: 0;
+        }
+    }
+}
+.windDrawerCla{
+    .line {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: space-between;
+        width: 100%;
+        margin-bottom: 10px;
+
+        .leftContent {
+            width: 242px;
+            height: 41px;
+            display: flex;
+            align-items: center;
+            background: url("@/assets/cesiumImg/title_left_bg.png") no-repeat;
+
+            span {
+            font-size: 16px;
+            font-family: Microsoft YaHei;
+            font-weight: 400;
+            color: #ffffff;
+            margin-left: 25px;
+            }
+        }
+    }
+    .jcxx, .gzck{
+        height: 100%;
+    }
+    .spjk, .third{
+        height: 80vh;
+    }
+}
+
 </style>

+ 3 - 1
src/views/cesiumComponents/windView.vue

@@ -42,7 +42,9 @@
                     <span class="label">并网时间</span><span class="value">2025-08-28</span>
                 </div>
                 <div class="info-item">
-                    <span class="label">电量详情</span><span class="value" @click="showDetail" style="color: #4b55ae;cursor:pointer">点击查看</span>
+                    <span class="label">电量详情</span>
+                    <span class="value" @click="showDetail" 
+                    style="color: #4b55ae;cursor:pointer">{{showWindDetail ? '关闭详情' : '查看详情'}}</span>
                 </div>
             </div>
             <!-- 实时负荷 -->

+ 25 - 2
src/views/menuCom.vue

@@ -61,6 +61,14 @@
             风机
         </div>
     </div>
+    <!-- 风机解构 -->
+    <div class="social windmodel" @click="handleWindModel" v-if="showwindModel">
+        <svg height="1em" viewBox="0 0 1024 1024"><path d="M506.311111 534.755556c39.822222 0 73.955556-34.133333 73.955556-73.955556 0-39.822222-34.133333-73.955556-73.955556-73.955556-39.822222 0-73.955556 34.133333-73.955555 73.955556 5.688889 45.511111 34.133333 73.955556 73.955555 73.955556z m-28.444444 56.888888l-45.511111 398.222223h147.911111l-45.511111-398.222223h-56.888889z m335.644444 11.377778c-62.577778-45.511111-125.155556-85.333333-187.733333-125.155555h-11.377778c-5.688889 0-5.688889 5.688889-5.688889 5.688889-5.688889 22.755556-17.066667 45.511111-39.822222 62.577777l-5.688889 5.688889c0 5.688889 0 5.688889 5.688889 5.688889 125.155556 68.266667 273.066667 142.222222 312.888889 142.222222 5.688889 0 11.377778 0 17.066666-5.688889v-5.688888c5.688889-17.066667-28.444444-45.511111-85.333333-85.333334z m-341.333333-227.555555c-5.688889 0-11.377778 0-11.377778-5.688889v-5.688889c0-119.466667 11.377778-238.933333 28.444444-295.822222 5.688889-17.066667 5.688889-28.444444 22.755556-34.133334 17.066667 5.688889 17.066667 17.066667 22.755556 34.133334 5.688889 22.755556 11.377778 45.511111 11.377777 79.644444 11.377778 56.888889 11.377778 136.533333 17.066667 216.177778 0 5.688889 0 5.688889-5.688889 5.688889h-5.688889-5.688889c-11.377778 0-22.755556-5.688889-34.133333-5.688889-17.066667 0-28.444444 5.688889-39.822222 11.377778z m-22.755556 182.044444c0 5.688889 0 5.688889-5.688889 5.688889-125.155556 68.266667-267.377778 136.533333-307.2 136.533333-5.688889 0-11.377778 0-17.066666-5.688889v-5.688888c5.688889-22.755556 39.822222-45.511111 91.022222-85.333334 51.2-39.822222 119.466667-79.644444 187.733333-119.466666 5.688889 0 11.377778 0 11.377778 5.688888v5.688889c5.688889 22.755556 17.066667 45.511111 34.133333 62.577778 0-5.688889 5.688889-5.688889 5.688889 0z" p-id="5340" fill="#ffffff"></path>
+        </svg>
+        <div class="windmodelinfo info-tooltip">
+            风机解构
+        </div>
+    </div>
     <!-- 退出 -->
     <div class="social exit" @click="handleExit" v-if="showexit">
         <svg height="1em" viewBox="0 0 1024 1024"><path d="M832 500.6208c0 13.056-5.76 24.8768-14.8352 32.9856l-148.0768 132.896c-7.8976 7.0016-18.3488 11.264-29.7472 11.264-24.6016 0-44.5248-19.7888-44.5248-44.2496 0-13.1968 5.76-24.8768 14.8352-32.9792l62.048-55.6544L472.5632 544.8832c-24.5248 0-44.3904-19.7888-44.3904-44.3904 0-24.4608 19.8656-44.2496 44.3904-44.2496l199.136 0-62.048-55.6544c-9.0752-8.1088-14.8352-19.8592-14.8352-32.9792 0-24.4608 19.9232-44.256 44.5248-44.256 11.3984 0 21.8496 4.2624 29.7472 11.4048l148.0768 132.8896C826.24 475.7504 832 487.5712 832 500.6208M406.0096 216.64 280.8384 216.64l0 590.7264 125.1712 0c24.5312 0 44.3904 19.9232 44.3904 44.3904 0 24.6016-19.9296 44.2496-44.3904 44.2496L236.4544 896.0064c-24.5248 0-44.448-19.648-44.448-44.2496L192.0064 172.32C192 147.8592 211.9296 128 236.4544 128l169.5552 0c24.4544 0 44.3904 19.8592 44.3904 44.32C450.4 196.7808 430.5408 216.64 406.0096 216.64" fill="#ffffff" p-id="2131"></path>
@@ -107,6 +115,10 @@ export default {
             type: Boolean,
             default: false
         },
+        showwindModel: {
+            type: Boolean,
+            default: false
+        },
     },
     data() {
         return {
@@ -171,7 +183,10 @@ export default {
         },
         handleExit() {
             this.$emit("handleExit")   
-        }
+        },
+        handleWindModel() {
+            this.$emit("handleWindModel")   
+        },
     }
 }
 </script>
@@ -229,6 +244,9 @@ export default {
   .exit:hover {
     background: linear-gradient(45deg, #872419, #db4a39, #ff7061);
   }
+  .windmodel:hover {
+    background: linear-gradient(45deg, #66757f, #00acee, #36daff, #dbedff);
+  }
   .social svg {
     fill: white;
     height: 20px;
@@ -258,6 +276,10 @@ export default {
         left: 92px;
         top: -8px;
     }
+    .windmodelinfo{
+        left: 100px;
+        top: -8px;
+    }
 
     /* 当鼠标悬停在容器上时,显示信息 */
     .basemap:hover .basemapinfo,
@@ -267,7 +289,8 @@ export default {
     .rainfall:hover .rainfallinfo,
     .temperature:hover .temperatureinfo,
     .wind:hover .windinfo,
-    .exit:hover .exitinfo{
+    .exit:hover .exitinfo,
+    .windmodel:hover .windmodelinfo{
         opacity: 1;
         visibility: visible;
     }