浏览代码

泽豪:
发电能力分析中的分析报告根据后端要求进行修改

泽豪:
发电能力分析修改微观选址分析中得地图及其功能,发电能力分析中的分析报告根据后端要求进行修改

泽豪:
发电能力分析修改微观选址分析中降cesium地球功能修改leftlet离线地图功能,并部署现场生产环境,且服务联调;

SunZehao 1 年之前
父节点
当前提交
2a862904d1

+ 15 - 11
package.json

@@ -9,24 +9,28 @@
   "dependencies": {
     "@amap/amap-jsapi-loader": "^1.0.1",
     "@element-plus/icons-vue": "^2.0.10",
-    "exceljs": "^4.3.0",
-    "file-saver": "^2.0.5",
-    "html2canvas": "^1.4.1",
-    "typescript": "^5.3.3",
-    "vuedraggable": "^4.1.0",
-    "xlsx": "^0.17.1",
-    "xlsx-js-style": "^1.2.0",
-    "xlsx-style": "^0.8.13",
-    "jspdf": "^2.5.1",
-    "echarts": "^5.3.2",
     "axios": "^0.21.1",
     "core-js": "^3.8.3",
+    "echarts": "^5.3.2",
     "element-plus": "^2.3.6",
+    "exceljs": "^4.3.0",
+    "file-saver": "^2.0.5",
+    "html2canvas": "^1.4.1",
     "js-cookie": "^3.0.5",
+    "jspdf": "^2.5.1",
+    "leaflet": "^1.9.4",
+    "leaflet-contextmenu": "^1.4.0",
+    "leaflet-tilelayer-wmts": "^1.0.0",
+    "leaflet.wmts": "^1.0.2",
     "nprogress": "^0.2.0",
+    "typescript": "^5.3.3",
     "vue": "^3.2.13",
     "vue-router": "^4.0.3",
-    "vuex": "^4.0.0"
+    "vuedraggable": "^4.1.0",
+    "vuex": "^4.0.0",
+    "xlsx": "^0.17.1",
+    "xlsx-js-style": "^1.2.0",
+    "xlsx-style": "^0.8.13"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "~5.0.0",

+ 2 - 0
public/index.html

@@ -13,6 +13,8 @@
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <link rel="stylesheet" href="./widgets.css">
+    <link href="https://cdn.bootcdn.net/ajax/libs/leaflet/1.7.1/leaflet.min.css" rel="stylesheet">
+    <link href="https://cdn.bootcdn.net/ajax/libs/leaflet-contextmenu/1.4.0/leaflet.contextmenu.css" rel="stylesheet">
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>
   <body>

+ 28 - 11
src/App.vue

@@ -33,6 +33,7 @@
                             :enterable="false">
                             <!-- <component :is="menu.icon">
                             </component> -->
+                            <!-- <img :src="menu.chImg ? menu.imgEn : menu.img" @mouseenter="imgEnter(menu)" @mouseleave="imgLeave(menu)" alt="" > -->
                             <img :src="menu.img" alt="">
                         </el-tooltip>
                     </router-link>
@@ -264,21 +265,22 @@
                         img: gener_mrlfx,
                         name: '毛容量分析'
                     },
-                    // {
-                    //     icon: 'Suitcase',
-                    //     index: '/generatingCap/dataAnalysis/angleAnalysis',
-                    // img: gener_jjjfx,
-                    //     name: '浆距角分析'
-                    // }, {
-                    //     icon: 'Monitor',
-                    //     index: '/generatingCap/dataAnalysis/agcAnalysis',
-                    // img: gener_agcfx,
-                    //     name: 'AGC曲线偏差分析'
-                    // }, 
+                    {
+                        icon: 'Suitcase',
+                        index: '/generatingCap/dataAnalysis/angleAnalysis',
+                        img: gener_jjjfx,
+                        name: '浆距角分析'
+                    }, {
+                        icon: 'Monitor',
+                        index: '/generatingCap/dataAnalysis/agcAnalysis',
+                        img: gener_agcfx,
+                        name: 'AGC曲线偏差分析'
+                    },
                     {
                         icon: 'Files',
                         index: '/generatingCap/dataAnalysis/analysisReport',
                         img: gener_fxbg,
+                        imgEn: gener_jjjfx,
                         name: '分析报告'
                     },
                 ],
@@ -357,6 +359,15 @@
                     }
                 })
             },
+            imgEnter(menu) {
+                menu.chImg = false
+                if (menu.imgEn) {
+                    menu.chImg = true
+                }
+            },
+            imgLeave(menu) {
+                menu.chImg = false
+            },
             showMenu() {
                 if (!this.fixed) {
                     this.isShowMenu = true;
@@ -508,6 +519,12 @@
     .themeLight {
         @import "./assets/css/eleCss/el-dialogW.less";
         @import "./assets/css/eleCss/el-treeW.less";
+
+        .toolSty {
+            .el-popper {
+                width: 50% !important;
+            }
+        }
     }
 
 

+ 7 - 0
src/assets/css/eleCss/el-tableB.less

@@ -62,5 +62,12 @@
         .el-table__empty-block {
             background: #040c0b;
         }
+
+    }
+
+    .toolSty {
+        .el-popper {
+            width: 50% !important;
+        }
     }
 }

+ 1311 - 0
src/assets/widgets.css

@@ -0,0 +1,1311 @@
+/* packages/widgets/Source/shared.css */
+.cesium-svgPath-svg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+.cesium-button {
+  display: inline-block;
+  position: relative;
+  background: #303336;
+  border: 1px solid #444;
+  color: #edffff;
+  fill: #edffff;
+  border-radius: 4px;
+  padding: 5px 12px;
+  margin: 2px 3px;
+  cursor: pointer;
+  overflow: hidden;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.cesium-button:focus {
+  color: #fff;
+  fill: #fff;
+  border-color: #ea4;
+  outline: none;
+}
+.cesium-button:hover {
+  color: #fff;
+  fill: #fff;
+  background: #48b;
+  border-color: #aef;
+  box-shadow: 0 0 8px #fff;
+}
+.cesium-button:active {
+  color: #000;
+  fill: #000;
+  background: #adf;
+  border-color: #fff;
+  box-shadow: 0 0 8px #fff;
+}
+.cesium-button:disabled,
+.cesium-button-disabled,
+.cesium-button-disabled:focus,
+.cesium-button-disabled:hover,
+.cesium-button-disabled:active {
+  background: #303336;
+  border-color: #444;
+  color: #646464;
+  fill: #646464;
+  box-shadow: none;
+  cursor: default;
+}
+.cesium-button option {
+  background-color: #000;
+  color: #eee;
+}
+.cesium-button option:disabled {
+  color: #777;
+}
+.cesium-button input,
+.cesium-button label {
+  cursor: pointer;
+}
+.cesium-button input {
+  vertical-align: sub;
+}
+.cesium-toolbar-button {
+  box-sizing: border-box;
+  width: 32px;
+  height: 32px;
+  border-radius: 14%;
+  padding: 0;
+  vertical-align: middle;
+  z-index: 0;
+}
+.cesium-performanceDisplay-defaultContainer {
+  position: absolute;
+  top: 50px;
+  right: 10px;
+  text-align: right;
+}
+.cesium-performanceDisplay {
+  background-color: rgba(40, 40, 40, 0.7);
+  padding: 7px;
+  border-radius: 5px;
+  border: 1px solid #444;
+  font: bold 12px sans-serif;
+}
+.cesium-performanceDisplay-fps {
+  color: #e52;
+}
+.cesium-performanceDisplay-throttled {
+  color: #a42;
+}
+.cesium-performanceDisplay-ms {
+  color: #de3;
+}
+
+/* packages/widgets/Source/Animation/Animation.css */
+.cesium-animation-theme {
+  visibility: hidden;
+  display: block;
+  position: absolute;
+  z-index: -100;
+}
+.cesium-animation-themeNormal {
+  color: #222;
+}
+.cesium-animation-themeHover {
+  color: #4488b0;
+}
+.cesium-animation-themeSelect {
+  color: #242;
+}
+.cesium-animation-themeDisabled {
+  color: #333;
+}
+.cesium-animation-themeKnob {
+  color: #222;
+}
+.cesium-animation-themePointer {
+  color: #2e2;
+}
+.cesium-animation-themeSwoosh {
+  color: #8ac;
+}
+.cesium-animation-themeSwooshHover {
+  color: #aef;
+}
+.cesium-animation-svgText {
+  fill: #edffff;
+  font-family: Sans-Serif;
+  font-size: 15px;
+  text-anchor: middle;
+}
+.cesium-animation-blank {
+  fill: #000;
+  fill-opacity: 0.01;
+  stroke: none;
+}
+.cesium-animation-rectButton {
+  cursor: pointer;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.cesium-animation-rectButton .cesium-animation-buttonGlow {
+  fill: #fff;
+  stroke: none;
+  display: none;
+}
+.cesium-animation-rectButton:hover .cesium-animation-buttonGlow {
+  display: block;
+}
+.cesium-animation-rectButton .cesium-animation-buttonPath {
+  fill: #edffff;
+}
+.cesium-animation-rectButton .cesium-animation-buttonMain {
+  stroke: #444;
+  stroke-width: 1.2;
+}
+.cesium-animation-rectButton:hover .cesium-animation-buttonMain {
+  stroke: #aef;
+}
+.cesium-animation-rectButton:active .cesium-animation-buttonMain {
+  fill: #abd6ff;
+}
+.cesium-animation-buttonDisabled {
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.cesium-animation-buttonDisabled .cesium-animation-buttonMain {
+  stroke: #555;
+}
+.cesium-animation-buttonDisabled .cesium-animation-buttonPath {
+  fill: #818181;
+}
+.cesium-animation-buttonDisabled .cesium-animation-buttonGlow {
+  display: none;
+}
+.cesium-animation-buttonToggled .cesium-animation-buttonGlow {
+  display: block;
+  fill: #2e2;
+}
+.cesium-animation-buttonToggled .cesium-animation-buttonMain {
+  stroke: #2e2;
+}
+.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow {
+  fill: #fff;
+}
+.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain {
+  stroke: #2e2;
+}
+.cesium-animation-shuttleRingG {
+  cursor: pointer;
+}
+.cesium-animation-shuttleRingPointer {
+  cursor: pointer;
+}
+.cesium-animation-shuttleRingPausePointer {
+  cursor: pointer;
+}
+.cesium-animation-shuttleRingBack {
+  fill: #181818;
+  fill-opacity: 0.8;
+  stroke: #333;
+  stroke-width: 1.2;
+}
+.cesium-animation-shuttleRingSwoosh line {
+  stroke: #8ac;
+  stroke-width: 3;
+  stroke-opacity: 0.2;
+  stroke-linecap: round;
+}
+.cesium-animation-knobOuter {
+  cursor: pointer;
+  stroke: #444;
+  stroke-width: 1.2;
+}
+.cesium-animation-knobInner {
+  cursor: pointer;
+}
+
+/* packages/widgets/Source/BaseLayerPicker/BaseLayerPicker.css */
+.cesium-baseLayerPicker-selected {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  border: none;
+}
+.cesium-baseLayerPicker-dropDown {
+  display: block;
+  position: absolute;
+  box-sizing: content-box;
+  top: auto;
+  right: 0;
+  width: 320px;
+  max-height: 500px;
+  margin-top: 5px;
+  background-color: rgba(38, 38, 38, 0.75);
+  border: 1px solid #444;
+  padding: 6px;
+  overflow: auto;
+  border-radius: 10px;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  transform: translate(0, -20%);
+  visibility: hidden;
+  opacity: 0;
+  transition:
+    visibility 0s 0.2s,
+    opacity 0.2s ease-in,
+    transform 0.2s ease-in;
+}
+.cesium-baseLayerPicker-dropDown-visible {
+  transform: translate(0, 0);
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.2s ease-out, transform 0.2s ease-out;
+}
+.cesium-baseLayerPicker-sectionTitle {
+  display: block;
+  font-family: sans-serif;
+  font-size: 16pt;
+  text-align: left;
+  color: #edffff;
+  margin-bottom: 4px;
+}
+.cesium-baseLayerPicker-choices {
+  margin-bottom: 5px;
+}
+.cesium-baseLayerPicker-categoryTitle {
+  color: #edffff;
+  font-size: 11pt;
+}
+.cesium-baseLayerPicker-choices {
+  display: block;
+  border: 1px solid #888;
+  border-radius: 5px;
+  padding: 5px 0;
+}
+.cesium-baseLayerPicker-item {
+  display: inline-block;
+  vertical-align: top;
+  margin: 2px 5px;
+  width: 64px;
+  text-align: center;
+  cursor: pointer;
+}
+.cesium-baseLayerPicker-itemLabel {
+  display: block;
+  font-family: sans-serif;
+  font-size: 8pt;
+  text-align: center;
+  vertical-align: middle;
+  color: #edffff;
+  cursor: pointer;
+  word-wrap: break-word;
+}
+.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel,
+.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel {
+  text-decoration: underline;
+}
+.cesium-baseLayerPicker-itemIcon {
+  display: inline-block;
+  position: relative;
+  width: inherit;
+  height: auto;
+  background-size: 100% 100%;
+  border: solid 1px #444;
+  border-radius: 9px;
+  color: #edffff;
+  margin: 0;
+  padding: 0;
+  cursor: pointer;
+  box-sizing: border-box;
+}
+.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon {
+  border-color: #fff;
+  box-shadow: 0 0 8px #fff, 0 0 8px #fff;
+}
+.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel {
+  color: rgb(189, 236, 248);
+}
+.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon {
+  border: double 4px rgb(189, 236, 248);
+}
+
+/* packages/engine/Source/Widget/CesiumWidget.css */
+.cesium-widget {
+  font-family: sans-serif;
+  font-size: 16px;
+  overflow: hidden;
+  display: block;
+  position: relative;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+.cesium-widget,
+.cesium-widget canvas {
+  width: 100%;
+  height: 100%;
+  touch-action: none;
+}
+.cesium-widget-credits {
+  display: block;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  color: #fff;
+  font-size: 10px;
+  text-shadow: 0px 0px 2px #000000;
+  padding-right: 5px;
+}
+.cesium-widget-credits a,
+.cesium-widget-credits a:visited {
+  color: #fff;
+}
+.cesium-widget-errorPanel {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  text-align: center;
+  background: rgba(0, 0, 0, 0.7);
+  z-index: 99999;
+}
+.cesium-widget-errorPanel:before {
+  display: inline-block;
+  vertical-align: middle;
+  height: 100%;
+  content: "";
+}
+.cesium-widget-errorPanel-content {
+  width: 75%;
+  max-width: 500px;
+  display: inline-block;
+  text-align: left;
+  vertical-align: middle;
+  border: 1px solid #510c00;
+  border-radius: 7px;
+  background-color: #f0d9d5;
+  font-size: 14px;
+  color: #510c00;
+}
+.cesium-widget-errorPanel-content.expanded {
+  max-width: 75%;
+}
+.cesium-widget-errorPanel-header {
+  font-size: 18px;
+  font-family:
+    "Open Sans",
+    Verdana,
+    Geneva,
+    sans-serif;
+  background: #d69d93;
+  border-bottom: 2px solid #510c00;
+  padding-bottom: 10px;
+  border-radius: 3px 3px 0 0;
+  padding: 15px;
+}
+.cesium-widget-errorPanel-scroll {
+  overflow: auto;
+  font-family:
+    "Open Sans",
+    Verdana,
+    Geneva,
+    sans-serif;
+  white-space: pre-wrap;
+  padding: 0 15px;
+  margin: 10px 0 20px 0;
+}
+.cesium-widget-errorPanel-buttonPanel {
+  padding: 0 15px;
+  margin: 10px 0 20px 0;
+  text-align: right;
+}
+.cesium-widget-errorPanel-buttonPanel button {
+  border-color: #510c00;
+  background: #d69d93;
+  color: #202020;
+  margin: 0;
+}
+.cesium-widget-errorPanel-buttonPanel button:focus {
+  border-color: #510c00;
+  background: #f0d9d5;
+  color: #510c00;
+}
+.cesium-widget-errorPanel-buttonPanel button:hover {
+  border-color: #510c00;
+  background: #f0d9d5;
+  color: #510c00;
+}
+.cesium-widget-errorPanel-buttonPanel button:active {
+  border-color: #510c00;
+  background: #b17b72;
+  color: #510c00;
+}
+.cesium-widget-errorPanel-more-details {
+  text-decoration: underline;
+  cursor: pointer;
+}
+.cesium-widget-errorPanel-more-details:hover {
+  color: #2b0700;
+}
+
+/* packages/widgets/Source/CesiumInspector/CesiumInspector.css */
+.cesium-cesiumInspector {
+  border-radius: 5px;
+  transition: width ease-in-out 0.25s;
+  background: rgba(48, 51, 54, 0.8);
+  border: 1px solid #444;
+  color: #edffff;
+  display: inline-block;
+  position: relative;
+  padding: 4px 12px;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  overflow: hidden;
+}
+.cesium-cesiumInspector-button {
+  text-align: center;
+  font-size: 11pt;
+}
+.cesium-cesiumInspector-visible .cesium-cesiumInspector-button {
+  border-bottom: 1px solid #aaa;
+  padding-bottom: 3px;
+}
+.cesium-cesiumInspector input:enabled,
+.cesium-cesiumInspector-button {
+  cursor: pointer;
+}
+.cesium-cesiumInspector-visible {
+  width: 185px;
+  height: auto;
+}
+.cesium-cesiumInspector-hidden {
+  width: 122px;
+  height: 17px;
+}
+.cesium-cesiumInspector-sectionContent {
+  max-height: 600px;
+}
+.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionContent {
+  max-height: 0;
+  padding: 0 !important;
+  overflow: hidden;
+}
+.cesium-cesiumInspector-dropDown {
+  margin: 5px 0;
+  font-family: sans-serif;
+  font-size: 10pt;
+  width: 185px;
+}
+.cesium-cesiumInspector-frustumStatistics {
+  padding-left: 10px;
+  padding: 5px;
+  background-color: rgba(80, 80, 80, 0.75);
+}
+.cesium-cesiumInspector-pickButton {
+  background-color: rgba(0, 0, 0, 0.3);
+  border: 1px solid #444;
+  color: #edffff;
+  border-radius: 5px;
+  padding: 3px 7px;
+  cursor: pointer;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  margin: 0 auto;
+}
+.cesium-cesiumInspector-pickButton:focus {
+  outline: none;
+}
+.cesium-cesiumInspector-pickButton:active,
+.cesium-cesiumInspector-pickButtonHighlight {
+  color: #000;
+  background: #adf;
+  border-color: #fff;
+  box-shadow: 0 0 8px #fff;
+}
+.cesium-cesiumInspector-center {
+  text-align: center;
+}
+.cesium-cesiumInspector-sectionHeader {
+  font-weight: bold;
+  font-size: 10pt;
+  margin: 0;
+  cursor: pointer;
+}
+.cesium-cesiumInspector-pickSection {
+  border: 1px solid #aaa;
+  border-radius: 5px;
+  padding: 3px;
+  margin-bottom: 5px;
+}
+.cesium-cesiumInspector-sectionContent {
+  margin-bottom: 10px;
+  transition: max-height 0.25s;
+}
+.cesium-cesiumInspector-tileText {
+  padding-bottom: 10px;
+  border-bottom: 1px solid #aaa;
+}
+.cesium-cesiumInspector-relativeText {
+  padding-top: 10px;
+}
+.cesium-cesiumInspector-sectionHeader::before {
+  margin-right: 5px;
+  content: "-";
+  width: 1ch;
+  display: inline-block;
+}
+.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionHeader::before {
+  content: "+";
+}
+
+/* packages/widgets/Source/Cesium3DTilesInspector/Cesium3DTilesInspector.css */
+ul.cesium-cesiumInspector-statistics {
+  margin: 0;
+  padding-top: 3px;
+  padding-bottom: 3px;
+}
+ul.cesium-cesiumInspector-statistics + ul.cesium-cesiumInspector-statistics {
+  border-top: 1px solid #aaa;
+}
+.cesium-cesiumInspector-slider {
+  margin-top: 5px;
+}
+.cesium-cesiumInspector-slider input[type=number] {
+  text-align: left;
+  background-color: #222;
+  outline: none;
+  border: 1px solid #444;
+  color: #edffff;
+  width: 100px;
+  border-radius: 3px;
+  padding: 1px;
+  margin-left: 10px;
+  cursor: auto;
+}
+.cesium-cesiumInspector-slider input[type=number]::-webkit-outer-spin-button,
+.cesium-cesiumInspector-slider input[type=number]::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+  margin: 0;
+}
+.cesium-cesiumInspector-slider input[type=range] {
+  margin-left: 5px;
+  vertical-align: middle;
+}
+.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor {
+  display: none;
+}
+.cesium-cesiumInspector-styleEditor {
+  padding: 10px;
+  border-radius: 5px;
+  background: rgba(48, 51, 54, 0.8);
+  border: 1px solid #444;
+}
+.cesium-cesiumInspector-styleEditor textarea {
+  width: 100%;
+  height: 300px;
+  background: transparent;
+  color: #edffff;
+  border: none;
+  padding: 0;
+  white-space: pre;
+  overflow-wrap: normal;
+  overflow-x: auto;
+}
+.cesium-3DTilesInspector {
+  width: 300px;
+  pointer-events: all;
+}
+.cesium-3DTilesInspector-statistics {
+  font-size: 11px;
+}
+.cesium-3DTilesInspector-disabledElementsInfo {
+  margin: 5px 0 0 0;
+  padding: 0 0 0 20px;
+  color: #eed202;
+}
+.cesium-3DTilesInspector div,
+.cesium-3DTilesInspector input[type=range] {
+  width: 100%;
+  box-sizing: border-box;
+}
+.cesium-cesiumInspector-error {
+  color: #ff9e9e;
+  overflow: auto;
+}
+.cesium-3DTilesInspector .cesium-cesiumInspector-section {
+  margin-top: 3px;
+}
+.cesium-3DTilesInspector .cesium-cesiumInspector-sectionHeader + .cesium-cesiumInspector-show {
+  border-top: 1px solid white;
+}
+input.cesium-cesiumInspector-url {
+  overflow: hidden;
+  white-space: nowrap;
+  overflow-x: scroll;
+  background-color: transparent;
+  color: white;
+  outline: none;
+  border: none;
+  height: 1em;
+  width: 100%;
+}
+.cesium-cesiumInspector .field-group {
+  display: table;
+}
+.cesium-cesiumInspector .field-group > label {
+  display: table-cell;
+  font-weight: bold;
+}
+.cesium-cesiumInspector .field-group > .field {
+  display: table-cell;
+  width: 100%;
+}
+
+/* packages/widgets/Source/VoxelInspector/VoxelInspector.css */
+.cesium-VoxelInspector {
+  width: 300px;
+  pointer-events: all;
+}
+.cesium-VoxelInspector div,
+.cesium-VoxelInspector input[type=range] {
+  width: 100%;
+  box-sizing: border-box;
+}
+.cesium-VoxelInspector .cesium-cesiumInspector-section {
+  margin-top: 3px;
+}
+.cesium-VoxelInspector .cesium-cesiumInspector-sectionHeader + .cesium-cesiumInspector-show {
+  border-top: 1px solid white;
+}
+
+/* packages/widgets/Source/FullscreenButton/FullscreenButton.css */
+.cesium-button.cesium-fullscreenButton {
+  display: block;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  border-radius: 0;
+}
+
+/* packages/widgets/Source/VRButton/VRButton.css */
+.cesium-button.cesium-vrButton {
+  display: block;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  border-radius: 0;
+}
+
+/* packages/widgets/Source/Geocoder/Geocoder.css */
+.cesium-viewer-geocoderContainer .cesium-geocoder-input {
+  border: solid 1px #444;
+  background-color: rgba(40, 40, 40, 0.7);
+  color: white;
+  display: inline-block;
+  vertical-align: middle;
+  width: 0;
+  height: 32px;
+  margin: 0;
+  padding: 0 32px 0 0;
+  border-radius: 0;
+  box-sizing: border-box;
+  transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out;
+  -webkit-appearance: none;
+}
+.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input {
+  border-color: #aef;
+  box-shadow: 0 0 8px #fff;
+}
+.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus {
+  border-color: #ea4;
+  background-color: rgba(15, 15, 15, 0.9);
+  box-shadow: none;
+  outline: none;
+}
+.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input,
+.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus,
+.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide {
+  padding-left: 4px;
+  width: 250px;
+}
+.cesium-viewer-geocoderContainer .search-results {
+  position: absolute;
+  background-color: #000;
+  color: #eee;
+  overflow-y: auto;
+  opacity: 0.8;
+  width: 100%;
+}
+.cesium-viewer-geocoderContainer .search-results ul {
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+}
+.cesium-viewer-geocoderContainer .search-results ul li {
+  font-size: 14px;
+  padding: 3px 10px;
+}
+.cesium-viewer-geocoderContainer .search-results ul li:hover {
+  cursor: pointer;
+}
+.cesium-viewer-geocoderContainer .search-results ul li.active {
+  background: #48b;
+}
+.cesium-geocoder-searchButton {
+  background-color: #303336;
+  display: inline-block;
+  position: absolute;
+  cursor: pointer;
+  width: 32px;
+  top: 1px;
+  right: 1px;
+  height: 30px;
+  vertical-align: middle;
+  fill: #edffff;
+}
+.cesium-geocoder-searchButton:hover {
+  background-color: #48b;
+}
+
+/* packages/widgets/Source/InfoBox/InfoBox.css */
+.cesium-infoBox {
+  display: block;
+  position: absolute;
+  top: 50px;
+  right: 0;
+  width: 40%;
+  max-width: 480px;
+  background: rgba(38, 38, 38, 0.95);
+  color: #edffff;
+  border: 1px solid #444;
+  border-right: none;
+  border-top-left-radius: 7px;
+  border-bottom-left-radius: 7px;
+  box-shadow: 0 0 10px 1px #000;
+  transform: translate(100%, 0);
+  visibility: hidden;
+  opacity: 0;
+  transition:
+    visibility 0s 0.2s,
+    opacity 0.2s ease-in,
+    transform 0.2s ease-in;
+}
+.cesium-infoBox-visible {
+  transform: translate(0, 0);
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.2s ease-out, transform 0.2s ease-out;
+}
+.cesium-infoBox-title {
+  display: block;
+  height: 20px;
+  padding: 5px 30px 5px 25px;
+  background: rgba(84, 84, 84, 1);
+  border-top-left-radius: 7px;
+  text-align: center;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  box-sizing: content-box;
+}
+.cesium-infoBox-bodyless .cesium-infoBox-title {
+  border-bottom-left-radius: 7px;
+}
+button.cesium-infoBox-camera {
+  display: block;
+  position: absolute;
+  top: 4px;
+  left: 4px;
+  width: 22px;
+  height: 22px;
+  background: transparent;
+  border-color: transparent;
+  border-radius: 3px;
+  padding: 0 5px;
+  margin: 0;
+}
+button.cesium-infoBox-close {
+  display: block;
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  height: 20px;
+  background: transparent;
+  border: none;
+  border-radius: 2px;
+  font-weight: bold;
+  font-size: 16px;
+  padding: 0 5px;
+  margin: 0;
+  color: #edffff;
+}
+button.cesium-infoBox-close:focus {
+  background: rgba(238, 136, 0, 0.44);
+  outline: none;
+}
+button.cesium-infoBox-close:hover {
+  background: #888;
+  color: #000;
+}
+button.cesium-infoBox-close:active {
+  background: #a00;
+  color: #000;
+}
+.cesium-infoBox-bodyless .cesium-infoBox-iframe {
+  display: none;
+}
+.cesium-infoBox-iframe {
+  border: none;
+  width: 100%;
+  width: calc(100% - 2px);
+}
+
+/* packages/widgets/Source/SceneModePicker/SceneModePicker.css */
+span.cesium-sceneModePicker-wrapper {
+  display: inline-block;
+  position: relative;
+  margin: 0 3px;
+}
+.cesium-sceneModePicker-visible {
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.25s linear;
+}
+.cesium-sceneModePicker-hidden {
+  visibility: hidden;
+  opacity: 0;
+  transition: visibility 0s 0.25s, opacity 0.25s linear;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none {
+  display: none;
+}
+.cesium-sceneModePicker-slide-svg {
+  transition: left 2s;
+  top: 0;
+  left: 0;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon {
+  box-sizing: border-box;
+  padding: 0;
+  margin: 3px 0;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D,
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView,
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D {
+  margin: 0 0 3px 0;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-icon2D {
+  left: 100%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-iconColumbusView {
+  left: 200%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon3D {
+  left: -200%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon2D {
+  left: -100%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-icon3D {
+  left: -100%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-iconColumbusView {
+  left: 100%;
+}
+.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected {
+  border-color: #2e2;
+  box-shadow: 0 0 8px #fff, 0 0 8px #fff;
+}
+
+/* packages/widgets/Source/ProjectionPicker/ProjectionPicker.css */
+span.cesium-projectionPicker-wrapper {
+  display: inline-block;
+  position: relative;
+  margin: 0 3px;
+}
+.cesium-projectionPicker-visible {
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.25s linear;
+}
+.cesium-projectionPicker-hidden {
+  visibility: hidden;
+  opacity: 0;
+  transition: visibility 0s 0.25s, opacity 0.25s linear;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-none {
+  display: none;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon {
+  box-sizing: border-box;
+  padding: 0;
+  margin: 3px 0;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective,
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic {
+  margin: 0 0 3px 0;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective .cesium-projectionPicker-iconOrthographic {
+  left: 100%;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic .cesium-projectionPicker-iconPerspective {
+  left: -100%;
+}
+.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected {
+  border-color: #2e2;
+  box-shadow: 0 0 8px #fff, 0 0 8px #fff;
+}
+
+/* packages/widgets/Source/PerformanceWatchdog/PerformanceWatchdog.css */
+.cesium-performance-watchdog-message-area {
+  position: relative;
+  background-color: yellow;
+  color: black;
+  padding: 10px;
+}
+.cesium-performance-watchdog-message {
+  margin-right: 30px;
+}
+.cesium-performance-watchdog-message-dismiss {
+  position: absolute;
+  right: 0;
+  margin: 0 10px 0 0;
+}
+
+/* packages/widgets/Source/NavigationHelpButton/NavigationHelpButton.css */
+.cesium-navigationHelpButton-wrapper {
+  position: relative;
+  display: inline-block;
+}
+.cesium-navigation-help {
+  visibility: hidden;
+  position: absolute;
+  top: 38px;
+  right: 2px;
+  width: 250px;
+  border-radius: 10px;
+  transform: scale(0.01);
+  transform-origin: 234px -10px;
+  transition: visibility 0s 0.25s, transform 0.25s ease-in;
+}
+.cesium-navigation-help-visible {
+  visibility: visible;
+  transform: scale(1);
+  transition: transform 0.25s ease-out;
+}
+.cesium-navigation-help-instructions {
+  border: 1px solid #444;
+  background-color: rgba(38, 38, 38, 0.75);
+  padding-bottom: 5px;
+  border-radius: 0 0 10px 10px;
+}
+.cesium-click-navigation-help {
+  display: none;
+}
+.cesium-touch-navigation-help {
+  display: none;
+  padding-top: 5px;
+}
+.cesium-click-navigation-help-visible {
+  display: block;
+}
+.cesium-touch-navigation-help-visible {
+  display: block;
+}
+.cesium-navigation-help-pan {
+  color: #66ccff;
+  font-weight: bold;
+}
+.cesium-navigation-help-zoom {
+  color: #65fd00;
+  font-weight: bold;
+}
+.cesium-navigation-help-rotate {
+  color: #ffd800;
+  font-weight: bold;
+}
+.cesium-navigation-help-tilt {
+  color: #d800d8;
+  font-weight: bold;
+}
+.cesium-navigation-help-details {
+  color: #ffffff;
+}
+.cesium-navigation-button {
+  color: #fff;
+  background-color: transparent;
+  border-bottom: none;
+  border-top: 1px solid #444;
+  border-right: 1px solid #444;
+  margin: 0;
+  width: 50%;
+  cursor: pointer;
+}
+.cesium-navigation-button-icon {
+  vertical-align: middle;
+  padding: 5px 1px;
+}
+.cesium-navigation-button:focus {
+  outline: none;
+}
+.cesium-navigation-button-left {
+  border-radius: 10px 0 0 0;
+  border-left: 1px solid #444;
+}
+.cesium-navigation-button-right {
+  border-radius: 0 10px 0 0;
+  border-left: none;
+}
+.cesium-navigation-button-selected {
+  background-color: rgba(38, 38, 38, 0.75);
+}
+.cesium-navigation-button-unselected {
+  background-color: rgba(0, 0, 0, 0.75);
+}
+.cesium-navigation-button-unselected:hover {
+  background-color: rgba(76, 76, 76, 0.75);
+}
+
+/* packages/widgets/Source/SelectionIndicator/SelectionIndicator.css */
+.cesium-selection-wrapper {
+  position: absolute;
+  width: 160px;
+  height: 160px;
+  pointer-events: none;
+  visibility: hidden;
+  opacity: 0;
+  transition: visibility 0s 0.2s, opacity 0.2s ease-in;
+}
+.cesium-selection-wrapper-visible {
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.2s ease-out;
+}
+.cesium-selection-wrapper svg {
+  fill: #2e2;
+  stroke: #000;
+  stroke-width: 1.1px;
+}
+
+/* packages/widgets/Source/Timeline/Timeline.css */
+.cesium-timeline-main {
+  position: relative;
+  left: 0;
+  bottom: 0;
+  overflow: hidden;
+  border: solid 1px #888;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.cesium-timeline-trackContainer {
+  width: 100%;
+  overflow: auto;
+  border-top: solid 1px #888;
+  position: relative;
+  top: 0;
+  left: 0;
+}
+.cesium-timeline-tracks {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+}
+.cesium-timeline-needle {
+  position: absolute;
+  left: 0;
+  top: 1.7em;
+  bottom: 0;
+  width: 1px;
+  background: #f00;
+}
+.cesium-timeline-bar {
+  position: relative;
+  left: 0;
+  top: 0;
+  overflow: hidden;
+  cursor: pointer;
+  width: 100%;
+  height: 1.7em;
+  background: linear-gradient(to bottom, rgba(116, 117, 119, 0.8) 0%, rgba(58, 68, 82, 0.8) 11%, rgba(46, 50, 56, 0.8) 46%, rgba(53, 53, 53, 0.8) 81%, rgba(53, 53, 53, 0.8) 100%);
+}
+.cesium-timeline-ruler {
+  visibility: hidden;
+  white-space: nowrap;
+  font-size: 80%;
+  z-index: -200;
+}
+.cesium-timeline-highlight {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  background: #08f;
+}
+.cesium-timeline-ticLabel {
+  position: absolute;
+  top: 0;
+  left: 0;
+  white-space: nowrap;
+  font-size: 80%;
+  color: #eee;
+}
+.cesium-timeline-ticMain {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 1px;
+  height: 50%;
+  background: #eee;
+}
+.cesium-timeline-ticSub {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 1px;
+  height: 33%;
+  background: #aaa;
+}
+.cesium-timeline-ticTiny {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 1px;
+  height: 25%;
+  background: #888;
+}
+.cesium-timeline-icon16 {
+  display: block;
+  position: absolute;
+  width: 16px;
+  height: 16px;
+  background-image: url(data:text/plain;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sIDBITKIVzLEMAAAKNSURBVEjHxdXNSxRhHAfw7zzrqhuoWJnSkrippUVSEKsHI9BTUYdAJA/RoYMREV26rAdn6tAfUARi16hQqkOBQRgUEYFWEC3OwczMjdZd92VmdWfmeelgTjO7q7gb0VzmmZnn85vvPPPMM8B/3qTcE2PPpuTZKB1eWuUQACgXYACYwVFbCTTVeZXB/i55o4LFelcAZfStYD4vpAoPGAGo4GBcQEgSOAUMQyAezwK6iQfDPXnhS/FkHZ+/8VLMWxxqWkfH3gbMRNOYi2roavbja0zHQmoFPYf8ED4Ko4aivm9MOG/u9I8mwrafeK7a/tVrNc/bARYN5noadeq7q0342vXw9CIMU6BmW8rVP9cPBPe52uu+v3O/y9sB4gkTWs6Qsk0mj5ExXMelejvA8WafYmkmGPHanTijdtvif8rx5RiCjdWKs2Cp3jWRDl96KhrbqlBeJqBOLyLQXg0IgbkZDS0dO8EZxZfPSTA9jvDDK3mT0OmP1FXh3XwEEAKdTX5MRWLgjCK4pwH3xt/YnjgLHAv4lHTCAKMMu/wV+KZGob6PoKyMQ0+sgBpZVJZn0NterxQaVqef/DRn+/EXYds/mZx2eVeAW9d65dhCEsaKCb7K8HH0gqTevyh9GDkn0VULRiaLzJKGBu9swfdaiie5RVo9ESURN8E8BE0n7ggACJy8KzghSCzp6DmwWxkaCm24EBXr8wI8Hrkq06QBiRC0t24HALS11IBTCyJl4vb1AXmzpbVYTwoVOXN0h7L8Mwtm8bXPybIQ/5FCX3dA2cr6XowvGCA02CvztAnz9+JiZk1AMxG6fEreSoBiPNmoyNnuWiWVzAIAtISO08E6pZi/3N96AIDn4E3h3P8L/wshP+txtEs4JAAAAABJRU5ErkJggg==);
+  background-repeat: no-repeat;
+}
+
+/* packages/widgets/Source/Viewer/Viewer.css */
+.cesium-viewer {
+  font-family: sans-serif;
+  font-size: 16px;
+  overflow: hidden;
+  display: block;
+  position: relative;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+.cesium-viewer-cesiumWidgetContainer {
+  width: 100%;
+  height: 100%;
+}
+.cesium-viewer-bottom {
+  display: block;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  padding-right: 5px;
+}
+.cesium-viewer .cesium-widget-credits {
+  display: inline;
+  position: static;
+  bottom: auto;
+  left: auto;
+  padding-right: 0;
+  color: #ffffff;
+  font-size: 10px;
+  text-shadow: 0 0 2px #000000;
+}
+.cesium-viewer-timelineContainer {
+  position: absolute;
+  bottom: 0;
+  left: 169px;
+  right: 29px;
+  height: 27px;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  font-size: 14px;
+}
+.cesium-viewer-animationContainer {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  padding: 0;
+  width: 169px;
+  height: 112px;
+}
+.cesium-viewer-fullscreenContainer {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  padding: 0;
+  width: 29px;
+  height: 29px;
+  overflow: hidden;
+}
+.cesium-viewer-vrContainer {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  padding: 0;
+  width: 29px;
+  height: 29px;
+  overflow: hidden;
+}
+.cesium-viewer-toolbar {
+  display: block;
+  position: absolute;
+  top: 5px;
+  right: 5px;
+}
+.cesium-viewer-cesiumInspectorContainer {
+  display: block;
+  position: absolute;
+  top: 50px;
+  right: 10px;
+}
+.cesium-viewer-geocoderContainer {
+  position: relative;
+  display: inline-block;
+  margin: 0 3px;
+}
+.cesium-viewer-cesium3DTilesInspectorContainer {
+  display: block;
+  position: absolute;
+  top: 50px;
+  right: 10px;
+  max-height: calc(100% - 120px);
+  box-sizing: border-box;
+  overflow-y: auto;
+  overflow-x: hidden;
+}
+.cesium-viewer-voxelInspectorContainer {
+  display: block;
+  position: absolute;
+  top: 50px;
+  right: 10px;
+  max-height: calc(100% - 120px);
+  box-sizing: border-box;
+  overflow-y: auto;
+  overflow-x: hidden;
+}
+
+/* packages/widgets/Source/widgets.css */

+ 7 - 0
src/main.js

@@ -17,6 +17,11 @@ import 'element-plus/dist/index.css'
 import * as ElementPlusIconsVue from '@element-plus/icons-vue'
 import * as echarts from 'echarts'
 
+import L from "leaflet"
+import "leaflet/dist/leaflet.css"
+import "leaflet-contextmenu"
+import icon from "leaflet/dist/images/marker-icon.png" // 引入leaflet默认图标
+
 import './permission' // permission control
 
 const debounce = (fn, delay) => {
@@ -47,4 +52,6 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
 app.config.globalProperties.$utils = utils;
 app.config.globalProperties.$echarts = echarts;
 app.config.globalProperties.$axios = axios;
+app.config.globalProperties.icoName = icon
+app.use(L);
 app.use(store).use(router).use(ElementPlus, { size: 'small',locale: zhCn }).mount('#app')

+ 301 - 0
src/views/generatingCapacity/dataAnalysis/posAnalysis/components/leafletMap.vue

@@ -0,0 +1,301 @@
+<template>
+    <div class="mapCom">
+        <div id="map"></div>
+    </div>
+</template>
+<script>
+    import httpRequest from '@/utils/request.js'
+    export default {
+        props: {
+            ids: {
+                type: Array,
+                default: () => {
+                    return [];
+                },
+            },
+            windList: {
+                type: Array,
+                default: () => {
+                    return [];
+                },
+            },
+        },
+        data() {
+            return {
+                map: null,
+                DefaultIcon1: null,
+                layerGroup: [],
+                layers: [],
+                rightObj: {},
+                tilsUrl: "./static/kMapTiles/{z}/{x}/{y}.jpg",
+            }
+        },
+        watch: {
+            ids(val) {
+
+                if (this.layers.length > 0) {
+                    this.map.removeLayer(this.layerGroup)
+                    // this.layerGroup.clearLayers();
+                }
+                this.funStationPos(val)
+            },
+        },
+        mounted() {
+            this.initMap();
+        },
+        methods: {
+            async funStationPos(ids) {
+                let res = null
+                if (ids.length > 0) {
+                    res = await httpRequest.get('/base/location', {
+                        params: {
+                            ids: this.ids.join(","),
+                        },
+                    })
+                } else {
+                    res = await httpRequest.get('/base/station', {
+                        params: {},
+                    })
+                }
+                if (res.code === 200) {
+                    if (res.data && res.data.length) {
+
+                        this.layers = []
+
+                        for (let i = 0; i < res.data.length; i++) {
+                            let item = res.data[i]
+
+
+                            let DefaultIcon1 = L.icon({
+                                html: item.name,
+                                iconUrl: this.icoName,
+                                //  图标的大小    【值1,值2】 为具体你自定义图标的尺寸,比如我图标尺寸是32×52,表示该图标:宽度32像素,高度:52像素,那么值1:就是32,值2:就是52
+                                // iconSize: [24, 41],
+                                //  影子的大小    【值1,值2】 为具体你自定义阴影图标的尺寸,比如我图标尺寸是41×41,表示该图标:宽度41像素,高度:41像素,那么值1:就是41,值2:就是41
+                                // shadowSize: [41, 41],
+                                //  图标将对应标记点的位置 这个是重点, 【值1,值2】,值1:为图标坐标第一个值(即32)的一半,值2:为图标坐标第二个值(即52)
+                                iconAnchor: [24, 41],
+                                // shadowAnchor: [4, 62], // 相同的影子
+                                // 该点是相对于iconAnchor弹出信息的位置  这个是我手动调出来的,文档默认原始值是[-1,-76],我是去一半值,取一半值调出来的
+                                // popupAnchor: [1, -24]
+                            })
+
+                            let iconLabel = L.divIcon({
+                                html: item.name,
+                                className: 'iconLabel',
+                                // iconSize: 50
+                            })
+
+                            var marker = null
+                            var marker1 = null
+                            marker = L.marker([item.latitude, item.longitude], {
+                                title: item.name,
+                                icon: DefaultIcon1,
+                                data: item
+                            }).addTo(this.map)
+
+
+                            // marker.on('mousemove', function (e) {
+                            //     console.log('2323', e)
+                            //     let data = e.target.options.data
+                            //     // var buttonDiv = document.createElement('div');
+                            //     // var commitButton = document.createElement('input');
+                            //     // commitButton.type = 'button';
+                            //     // commitButton.value = "功率曲线拟合";
+                            //     // commitButton.onclick = function () {
+                            //     //     console.log('功率曲线拟合', data)
+                            //     //     e.target.closePopup()
+                            //     //     marker(e.latlng, {
+                            //     //         title: item.name,
+                            //     //         icon: DefaultIcon1,
+                            //     //         data: item
+                            //     //     }).addTo(this.map)
+                            //     // };
+                            //     // buttonDiv.appendChild(commitButton);
+
+                            //     // var deleteButton = document.createElement('input');
+                            //     // deleteButton.type = 'button';
+                            //     // deleteButton.value = "对风偏差分析";
+                            //     // deleteButton.onclick = function () {
+                            //     //     console.log('对风偏差分析', data)
+                            //     // };
+                            //     // buttonDiv.appendChild(deleteButton);
+
+                            //     // var parentDiv = document.createElement('div');
+                            //     // var commentDiv = document.createElement('div');
+                            //     // // 区域名称
+                            //     let name = e.target.options.data.name
+                            //     // var nameSpan = document.createTextNode(name + ':');
+                            //     // commentDiv.appendChild(nameSpan);
+                            //     // parentDiv.appendChild(commentDiv);
+                            //     // parentDiv.appendChild(buttonDiv);
+                            //     // e.target.bindPopup(e.latlng, parentDiv).openPopup();
+                            //     e.target.bindPopup(name).openPopup();
+                            // })
+                            let that = this
+                            marker.on('mousemove', function (e) {
+                                console.log('map', item)
+                                that.rightObj = item
+                            })
+
+                            marker1 = new L.marker([item.latitude, item.longitude], {
+                                icon: iconLabel,
+                            }).addTo(this.map)
+
+                            this.map.panTo({
+                                lat: Number(item.latitude),
+                                lng: Number(item.longitude)
+                            });
+                            this.layers.push(marker)
+                            this.layers.push(marker1)
+                        }
+                        this.layerGroup = L.layerGroup(this.layers)
+                        this.map.addLayer(this.layerGroup)
+                    }
+                }
+            },
+            cesss(e) {
+                console.log('11000001222', e)
+            },
+
+            initMap() {
+                this.map = L.map("map", {
+                    // center: [40.02404009136253, 116.50641060224784], // 地图中心--北京
+                    // center: [38.44673272215545, 106.27624511718751], // 地图中心--银川
+                    zoom: 16, //缩放比列
+                    zoomControl: false, //禁用 + - 按钮
+                    doubleClickZoom: true, // 禁用双击放大
+                    attributionControl: false, // 移除右下角leaflet标识
+                    contextmenu: true,
+                    contextmenuWidth: 140,
+                    contextmenuItems: [{
+                            text: '功率曲线拟合',
+                            callback: this.powerLine
+                        },
+                        {
+                            text: '对风偏差分析',
+                            callback: this.windAny
+                        }
+                    ]
+                });
+                // let name = L.tileLayer(
+                //     "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}",
+                // ).addTo(this.map)
+
+                let name = L.tileLayer(this.tilsUrl, {
+                    minZoom: 1,
+                    maxZoom: 16
+                }).addTo(this.map)
+
+            },
+            powerLine(e) {
+                console.log('2221111', this.layers)
+                if (!this.rightObj.latitude && !this.rightObj.longitude) {
+                    this.$message({
+                        message: '该坐标系下暂无功率曲线拟合',
+                        type: 'error'
+                    });
+                } else {
+                    this.layers.forEach(item => {
+                        if (item.options.data) {
+                            if (item.options.data.name.indexOf('风电场') === -1) {
+                                if (item.options.data.latitude === this.rightObj.latitude && item.options.data
+                                    .longitude === this.rightObj.longitude) {
+                                    this.$emit('rightClick', {
+                                        menuIndex: 0,
+                                        current: this.rightObj
+                                    })
+                                }
+                            } else {
+                                if (item.options.data.name === this.rightObj.name) {
+                                    this.$message({
+                                        message: '风场暂无功率曲线拟合功能',
+                                        type: 'error'
+                                    });
+                                }
+                            }
+                        }
+                    })
+                }
+            },
+            windAny(e) {
+                if (!this.rightObj.latitude && !this.rightObj.longitude) {
+                    this.$message({
+                        message: '该坐标系下暂无对风偏差分析',
+                        type: 'error'
+                    });
+                } else {
+                    this.layers.forEach(item => {
+                        if (item.options.data) {
+                            if (item.options.data.name.indexOf('风电场') === -1) {
+                                if (item.options.data.latitude === this.rightObj.latitude && item.options.data
+                                    .longitude === this.rightObj.longitude) {
+                                    this.$emit('rightClick', {
+                                        menuIndex: 1,
+                                        current: this.rightObj
+                                    })
+                                }
+                            } else {
+                                if (item.options.data.name === this.rightObj.name) {
+                                    this.$message({
+                                        message: '风场暂无对风偏差分析功能',
+                                        type: 'error'
+                                    });
+
+                                }
+                            }
+                        }
+                    })
+                }
+            }
+        }
+    };
+</script>
+<style scoped lang="less">
+    .mapCom {
+        height: 100%;
+
+        .iconLabel {
+            width: 80px !important;
+        }
+    }
+
+
+
+    #map {
+        width: 100%;
+        height: 100%;
+    }
+
+    .lmap-image {
+        width: 32px;
+        height: 32px;
+    }
+
+    .lmap-span {
+        display: inline-block;
+        margin-left: 5px;
+        padding: 5px;
+        font-weight: bold;
+        line-height: 20px;
+        font-size: 14px;
+        color: #fff;
+        white-space: nowrap;
+    }
+
+    .lmap-text {
+        display: inline-block;
+        margin-left: 5px;
+        padding: 5px;
+        font-weight: bold;
+        line-height: 20px;
+        font-size: 16px;
+        color: #fff;
+        width: 500px;
+        white-space: nowrap;
+        position: absolute;
+        text-align: center;
+        top: 25px;
+        left: -250px;
+    }
+</style>

+ 26 - 7
src/views/generatingCapacity/dataAnalysis/posAnalysis/index.vue

@@ -21,11 +21,13 @@
                         : tableHeight + 'px',
                     overflow: 'hidden',
                 }">
-                            <posChart @mapDone="funMapDone" @rightClick="funRightClick" :height="tableHeight"
-                                :windList="windList" :ids="excelCheckIds" v-if="showOnlineMap" />
+                            <!-- <posChart @mapDone="funMapDone" @rightClick="funRightClick" :height="tableHeight"
+                                :windList="windList" :ids="excelCheckIds" v-if="showOnlineMap" /> -->
                             <!-- v-if="showOnlineMap" -->
-                            <kMap :parentId="treeId" :ids="excelCheckIds" @mapDone="funMapDone"
-                                @rightClick="funRightClick" v-else />
+                            <!-- <kMap :parentId="treeId" :ids="excelCheckIds" @mapDone="funMapDone"
+                                @rightClick="funRightClick" v-else /> -->
+                            <leafletMap :windList="windList" :ids="excelCheckIds" @mapDone="funMapDone"
+                                @rightClick="funRightClick" />
                         </div>
                     </div>
                 </div>
@@ -137,6 +139,7 @@
         reactive,
         watch,
     } from "vue";
+    import axios from "axios";
     import {
         useRouter
     } from "vue-router";
@@ -148,6 +151,7 @@
     } from "element-plus";
     import tools from "@tools/htmlToPdf.js";
     import posChart from "./components/posChart.vue";
+    import leafletMap from "./components/leafletMap.vue";
     /**combine */
     import combineChart from "../combine/components/current-scatter-chart.vue";
     /**rateAnalysis */
@@ -167,14 +171,14 @@
     const excelList = ref([]);
     const store = useStore();
 
-    const showOnlineMap = ref(true);
+    const showOnlineMap = ref(false);
     watch(
         () => router.currentRoute.value,
         (newValue, oldValue) => {
             // if (newValue.path === "/dataAnalysis/posAnalysis") {
             if (newValue.path.indexOf("/dataAnalysis/posAnalysis") > -1) {
                 if (newValue.query.onlineMap) {
-                    showOnlineMap.value = newValue.query.onlineMap === "1" ? true : false;
+                    showOnlineMap.value = newValue.query.onlineMap === "1" ? false : true;
                 }
             }
         }, {
@@ -182,6 +186,8 @@
         }
     );
 
+
+
     const funExcelChange = async (obj) => {
         //点击excel项时
         return false;
@@ -666,7 +672,6 @@
             },
         });
         if (rosesRes.code === 200) {
-            debugger
             if (rosesRes.data.length) {
                 rateDialog.value = true;
                 nextTick(() => {
@@ -1188,9 +1193,23 @@
         deep: true
     })
 
+    const getOnline = () => {
+        axios({
+            method: "get",
+            baseURL: 'ping',
+            url: "",
+        }).then(res => {
+            showOnlineMap.value = true
+        }).catch(e => {
+            showOnlineMap.value = false
+        })
+    };
+
     /**mounted */
     onMounted(() => {
+        // getOnline();
         funGetTree();
+
         theme.value = store.state.theme
         echartsTheme.value = !theme.value ? 'dark' : ''
         tableHeight.value = window.innerHeight - 170 + "px";

+ 33 - 13
src/views/generatingCapacity/report/index.vue

@@ -50,8 +50,8 @@
                     <span class="ml-77">风机型号: {{ nbdata.model }}</span>
                 </p>
                 <p>
-                    <span class="ml-5">风机数量: {{ nbdata.quantity }}</span>
-                    <span class="ml-87">装机容量(MW): {{ nbdata.capacity }}</span>
+                    <span class="ml-5">风机数量: {{ nbdata.windCapacity }}</span>
+                    <span class="ml-87">装机容量(MW): {{ nbdata.windQuantityLd }}</span>
                 </p>
                 <p>
                     <span class="ml-5">报告生成日期: {{ time }}</span>
@@ -71,11 +71,18 @@
                 <p class="ml-7">
                     曲线偏差率对不同风速区间的实际功率和保证功率做偏差率分析,高偏差率表明存在需要进一步调查潜在问题,偏差率负值表明实际功率低于保证功率
                 </p>
-                <el-table :data="curve" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
+                <el-table class="toolSty" :data="curve" :span-method="objectSpanMethod" border
+                    style="width: 100%; margin-top: 20px">
                     <el-table-column prop="section" align="center" label="风速区间" width="180" />
                     <el-table-column prop="module" align="center" label="偏差率" />
                     <el-table-column prop="wtidcount" align="center" label="风机数量" />
-                    <el-table-column prop="windturbine" align="center" label="风机编号" />
+                    <el-table-column prop="windturbineId" show-overflow-tooltip align="center" label="风机编号">
+                        <!-- <template #default="scope">
+                            <el-tooltip class="box-item" effect="dark" :content="scope.row.windturbineId"
+                                placement="top-start">
+                            </el-tooltip>
+                        </template> -->
+                    </el-table-column>
                 </el-table>
             </div>
             <h3 style="font-weight: bolder; font-size: 18px;margin: 10px 0"
@@ -86,12 +93,12 @@
                 <p class="ml-7">
                     静态偏航对风指风机的叶片与风向之间的偏差,偏差角度过大表明对风存在问题,以下为5-10m风速区间的对风误差
                 </p>
-                <el-table :data="staticwind" :span-method="objectSpanMethod" border
+                <el-table class="toolSty" :data="staticwind" :span-method="objectSpanMethod" border
                     style="width: 100%; margin-top: 20px">
                     <el-table-column prop="section" align="center" label="严重程度" width="180" />
                     <el-table-column prop="wtidcount" align="center" label="风机数量" />
                     <!-- <el-table-column prop="amount1" label="风机数量" /> -->
-                    <el-table-column prop="windturbine" align="center" label="风机编号" />
+                    <el-table-column prop="windturbineId" show-overflow-tooltip align="center" label="风机编号" />
                 </el-table>
             </div>
             <h3 style="font-weight: bolder; font-size: 18px;margin: 10px 0"
@@ -102,11 +109,12 @@
                 <p class="ml-7">
                     容量系数是风机发电量能力的指标,数值越低,说明发电效率越低
                 </p>
-                <el-table :data="mrlxs" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
+                <el-table class="toolSty" :data="mrlxs" :span-method="objectSpanMethod" border
+                    style="width: 100%; margin-top: 20px">
                     <el-table-column prop="section" align="center" label="容量系数" width="180" />
                     <!-- <el-table-column prop="name" label="偏差率" /> -->
                     <el-table-column prop="wtidcount" align="center" label="风机数量" />
-                    <el-table-column prop="windturbine" align="center" label="风机编号" />
+                    <el-table-column prop="windturbineId" show-overflow-tooltip align="center" label="风机编号" />
                 </el-table>
             </div>
             <h3 style="font-weight: bolder; font-size: 18px;margin: 10px 0"
@@ -117,11 +125,12 @@
                 <p class="ml-7">
                     桨距角分析并网开桨和停机收桨,并网状态下桨距角趋近于0度最优,停机状态下桨距角趋近于90度最优
                 </p>
-                <el-table :data="blade" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
+                <el-table class="toolSty" :data="blade" :span-method="objectSpanMethod" border
+                    style="width: 100%; margin-top: 20px">
                     <el-table-column prop="section" align="center" label="桨距角" width="180" />
                     <!-- <el-table-column prop="name" label="偏差率" /> -->
                     <el-table-column prop="wtidcount" align="center" label="风机数量" />
-                    <el-table-column prop="windturbine" align="center" label="风机编号" />
+                    <el-table-column prop="windturbineId" show-overflow-tooltip align="center" label="风机编号" />
                 </el-table>
             </div>
             <h3 style="font-weight: bolder; font-size: 18px;margin: 10px 0"
@@ -132,12 +141,13 @@
                 <p class="ml-7">
                     小风速下停机时间越长反应出低风速风机切入不及时,暴风天气不停机反应出风机切出不及时
                 </p>
-                <el-table :data="stoptime" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
+                <el-table class="toolSty" :data="stoptime" :span-method="objectSpanMethod" border
+                    style="width: 100%; margin-top: 20px">
                     <el-table-column prop="section" align="center" label="风速区间" width="180" />
 
                     <el-table-column prop="wtidcount" align="center" label="风机数量" />
                     <el-table-column prop="remark" align="center" label="累计时间(min)" />
-                    <el-table-column prop="windturbine" align="center" label="风机编号" />
+                    <el-table-column prop="windturbineId" show-overflow-tooltip align="center" label="风机编号" />
                 </el-table>
             </div>
             <!-- <h3 style="font-weight: bolder; font-size: 18px; color: black">
@@ -186,7 +196,8 @@
         ref,
         onMounted,
         reactive,
-        watch
+        watch,
+        nextTick
     } from "vue";
     import {
         useStore
@@ -280,6 +291,13 @@
         wtcount.value = res.data.wtcount;
         hjwtid.value = res.data.hjwtid;
         hjcount.value = res.data.hjcount;
+
+        nextTick(() => {
+
+            debugger
+            document.getElementsByClassName('.toolSty')
+        })
+
     };
 
     const handleClose = (() => {
@@ -335,6 +353,8 @@
             padding: 10px;
             border-radius: 10px;
         }
+
+
     }
 
     .themeDark {