Browse Source

jr地图部分功能

rui.jiang 1 năm trước cách đây
mục cha
commit
f91d7c3017

+ 146 - 8
package-lock.json

@@ -1349,6 +1349,11 @@
         "fastq": "^1.6.0"
       }
     },
+    "@petamoriken/float16": {
+      "version": "3.8.7",
+      "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.7.tgz",
+      "integrity": "sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA=="
+    },
     "@polka/url": {
       "version": "1.0.0-next.25",
       "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
@@ -3935,6 +3940,35 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
+    "color-parse": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz",
+      "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==",
+      "requires": {
+        "color-name": "^2.0.0"
+      },
+      "dependencies": {
+        "color-name": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz",
+          "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow=="
+        }
+      }
+    },
+    "color-rgba": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz",
+      "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==",
+      "requires": {
+        "color-parse": "^2.0.0",
+        "color-space": "^2.0.0"
+      }
+    },
+    "color-space": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz",
+      "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA=="
+    },
     "color-string": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
@@ -4699,6 +4733,11 @@
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
+    "earcut": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+      "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
+    },
     "easings-css": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/easings-css/-/easings-css-1.0.0.tgz",
@@ -4734,9 +4773,9 @@
       }
     },
     "electron-to-chromium": {
-      "version": "1.4.779",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.779.tgz",
-      "integrity": "sha512-oaTiIcszNfySXVJzKcjxd2YjPxziAd+GmXyb2HbidCeFo6Z88ygOT7EimlrEQhM2U08VhSrbKhLOXP0kKUCZ6g=="
+      "version": "1.4.782",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.782.tgz",
+      "integrity": "sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg=="
     },
     "element-ui": {
       "version": "2.15.14",
@@ -5401,6 +5440,28 @@
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
     },
+    "geotiff": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.3.tgz",
+      "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==",
+      "requires": {
+        "@petamoriken/float16": "^3.4.7",
+        "lerc": "^3.0.0",
+        "pako": "^2.0.4",
+        "parse-headers": "^2.0.2",
+        "quick-lru": "^6.1.1",
+        "web-worker": "^1.2.0",
+        "xml-utils": "^1.0.2",
+        "zstddec": "^0.1.0"
+      },
+      "dependencies": {
+        "quick-lru": {
+          "version": "6.1.2",
+          "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz",
+          "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ=="
+        }
+      }
+    },
     "get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -5955,8 +6016,7 @@
     "ieee754": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-      "dev": true
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
     },
     "ignore": {
       "version": "5.3.1",
@@ -6496,6 +6556,11 @@
         "launch-editor": "^2.6.1"
       }
     },
+    "lerc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
+      "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
+    },
     "leven": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -7278,6 +7343,19 @@
       "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
       "dev": true
     },
+    "ol": {
+      "version": "9.2.3",
+      "resolved": "https://registry.npmjs.org/ol/-/ol-9.2.3.tgz",
+      "integrity": "sha512-zxCgrVUU9DWZZSa7eW2ukU6gp1ugX0K5bF+Gwuh/RKa2sQLdwOrIRjLt4NYAdM7jpHOdW1FaT68E8tosE/DC1g==",
+      "requires": {
+        "color-rgba": "^3.0.0",
+        "color-space": "^2.0.1",
+        "earcut": "^2.2.3",
+        "geotiff": "^2.0.7",
+        "pbf": "3.2.1",
+        "rbush": "^3.0.1"
+      }
+    },
     "on-finished": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -7401,6 +7479,11 @@
       "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true
     },
+    "pako": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+      "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+    },
     "param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -7420,6 +7503,11 @@
         "callsites": "^3.0.0"
       }
     },
+    "parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+    },
     "parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -7510,6 +7598,15 @@
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
       "dev": true
     },
+    "pbf": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+      "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+      "requires": {
+        "ieee754": "^1.1.12",
+        "resolve-protobuf-schema": "^2.1.0"
+      }
+    },
     "picocolors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
@@ -8198,6 +8295,11 @@
         }
       }
     },
+    "protocol-buffers-schema": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
+      "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
+    },
     "proxy-addr": {
       "version": "2.0.7",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -8291,6 +8393,11 @@
       "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
       "dev": true
     },
+    "quickselect": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+      "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+    },
     "randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -8325,6 +8432,14 @@
         }
       }
     },
+    "rbush": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz",
+      "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
+      "requires": {
+        "quickselect": "^2.0.0"
+      }
+    },
     "read-pkg": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -8640,6 +8755,14 @@
       "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
       "dev": true
     },
+    "resolve-protobuf-schema": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+      "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+      "requires": {
+        "protocol-buffers-schema": "^3.3.1"
+      }
+    },
     "resolve-url": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@@ -9201,9 +9324,9 @@
       }
     },
     "spdx-license-ids": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-      "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+      "version": "3.0.18",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+      "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
       "dev": true
     },
     "spdy": {
@@ -10404,6 +10527,11 @@
         "defaults": "^1.0.3"
       }
     },
+    "web-worker": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz",
+      "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA=="
+    },
     "webidl-conversions": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
@@ -10925,6 +11053,11 @@
       "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
       "dev": true
     },
+    "xml-utils": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.8.0.tgz",
+      "integrity": "sha512-1TY5yLw8DApowZAUsWCniNr8HH6Ebt6O7UQvmIwziGKwUNsQx6e+4NkfOvCfnqmYIcPjCeoI6dh1JenPJ9a1hQ=="
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -10976,6 +11109,11 @@
       "requires": {
         "tslib": "2.3.0"
       }
+    },
+    "zstddec": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",
+      "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg=="
     }
   }
 }

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
     "echarts": "^5.5.0",
     "element-ui": "^2.15.14",
     "happypack": "^5.0.1",
+    "ol": "^9.2.3",
     "qs": "^6.12.0",
     "svg-sprite-loader": "^6.0.11",
     "terser-webpack-plugin": "^5.3.10",

BIN
src/assets/001.png


BIN
src/assets/002.png


BIN
src/assets/location.png


+ 130 - 0
src/components/map/index.vue

@@ -0,0 +1,130 @@
+<!--
+ * @Author: Rain
+ * @Date: 2024/05/22 14:02:59
+ * @LastEditTime: 2024/05/23 15:04:36
+ * @Description: Do Something
+-->
+<template>
+    <div id="map" class="map"></div>
+</template>
+
+<script>
+import "ol/ol.css";
+import { Map, View, Feature } from "ol";
+import TileLayer from "ol/layer/Tile.js";
+import { XYZ } from "ol/source";
+import { fromLonLat } from "ol/proj";
+import { Vector } from "ol/source";
+import { Vector as VectorLayer } from "ol/layer";
+import { Point } from "ol/geom";
+import { Icon, Style } from "ol/style";
+import ZoomSlider from 'ol/control/ZoomSlider.js';
+import {defaults as defaultControls} from 'ol/control.js';
+import icon from "../../assets/location.png";
+export default {
+    name: "T-map",
+    mounted() {
+        this.map = new Map({
+            target: "map",
+            view: new View({
+                projection: "EPSG:4326",
+                center: fromLonLat([116.389, 39.903]), //地图中心
+                zoom: 5, //默认缩放级别  
+                minZoom: 5, //最小缩放级别
+                maxZoom: 12, //最大缩放级
+                extent: [70.3671875, 18.14576369243164, 134.92927612304688, 55.667146064662596]
+            }),
+            layers: [
+                new TileLayer({
+                    source: new XYZ({
+                        url: "http://127.0.0.1:8010/tiles/{z}/{x}/{y}.png", //根据自己实际的地理位置
+                    }),
+                }),
+                new VectorLayer({
+                    id: "marker",
+                    source: new Vector(),
+                }),
+            ],
+            controls: defaultControls().extend([new ZoomSlider()]),
+        });
+        console.log(this.map.getView().calculateExtent())
+        this.initEvent();
+    },
+    methods: {
+        /**
+         * 地图上打点
+         * @param data
+         */
+        addMarker(data = { point: [120.2, 30.35] }) {
+            const layer = this.map
+                .getLayers()
+                .getArray()
+                .find((element) => {
+                    return element.get("id") === "marker";
+                });
+            const source = layer.getSource();
+            // const feature = new Feature({
+            //     geometry: new Point(fromLonLat(data.point)),
+            //     name: "marker",
+            //     data,
+            // });
+
+            const feature= new Feature ({
+                geometry: new Point(fromLonLat(data.point),'EPSG:4326'),
+                name:"marker",
+                data,
+            })
+            feature.setStyle(
+                new Style({
+                    image: new Icon({
+                        src: icon,
+                        scale: [0.3, 0.3],
+                        anchor: [0.5, 1],
+                        opacity: 1,
+                    }),
+                    // text: new Text({
+                    //   font: "12px Calibri,sans-serif",
+                    //   text: "",
+                    //   fill: new Fill({
+                    //     color: "red",
+                    //   }),
+                    // }),
+                })
+            );
+            source.addFeature(feature);
+        },
+        /**
+         * 初始化地图事件
+         */
+        initEvent() {
+            this.map.on("click", (evt) => {
+                const features = this.map.getFeaturesAtPixel(evt.pixel, {
+                    hitTolerance: 1,
+                });
+                if (features && features.length > 0) {
+                    const feature = features.at(0);
+                    this.$emit("feature-click", feature.get("data"));
+                }
+            });
+        },
+        /**
+         * 平移缩放
+         * @param data
+         */
+        moveAndZoom(data = { point: [120.2, 30.35], zoom: 10 }) {
+            this.map.getView().animate({
+                center: fromLonLat(data.point),
+                zoom: data.zoom,
+                duration: 2000,
+            });
+        },
+    },
+};
+</script>
+
+<style scoped lang="scss">
+.map {
+    width: 100%;
+    height: 100%
+}
+</style>

+ 22 - 13
src/router/index.js

@@ -30,19 +30,28 @@ const createRouter = () =>
               import(
                 /*webpackChunkName:'home-cockpitManage'*/ "../views/admin/cockpitManage/Index.vue"
               ),
-            children: [
-              // 电子地图
-              {
-                id: 11,
-                iconName: "gps",
-                path: "electronic-map",
-                name: "electronicMap",
-                component: () =>
-                  import(
-                    /*webpackChunkName:'home-cockpitManage'*/ "../views/admin/cockpitManage/electronicMap.vue"
-                  ),
-              },
-            ],
+            // children: [
+            //   // 电子地图
+            //   {
+            //     id: 11,
+            //     path: "electronic-map",
+            //     name: "electronicMap",
+            //     component: () =>
+            //       import(
+            //         /*webpackChunkName:'home-cockpitManage'*/ "../views/admin/cockpitManage/electronicMap.vue"
+            //       ),
+            //   },
+            // ],
+          },
+          {
+             // 电子地图
+              id: 11,
+              path: "cockpitManage/electronic-map",
+              name: "electronicMap",
+              component: () =>
+                import(
+                  /*webpackChunkName:'home-cockpitManage'*/ "../views/admin/cockpitManage/electronicMap.vue"
+                ),
           },
           // 电子地图
           // {

+ 135 - 9
src/views/admin/cockpitManage/Index.vue

@@ -1,20 +1,146 @@
 <template>
-  <div>
-    <!--驾驶舱 -->
-    <img src="@/assets/bg.png" alt="" />
+  <div class="map-ditu">
+    <Tmap ref="map"></Tmap>
+    <div class="ledata">
+      <el-input v-model="treeval" @focus="showTree = true"></el-input>
+      <div class="Showtree">
+        <el-tree v-if="showTree" :data="treeData" @node-click="handleNodeClick"></el-tree>
+      </div>
+
+      <p><span class="SpText">风场总数:</span>20 个</p>
+      <p><span class="SpText">已分析风场:</span>10 个</p>
+      <p><span class="SpText">未分析风场:</span>10个</p>
+      <p><span class="SpText">风机数量:</span>10 个</p>
+      <p><span class="SpText">风机状态:</span>
+        <span class="red"></span>
+        <span class="yellow"></span>
+        <span class="green"></span>
+      </p>
+      <el-switch v-model="value1" active-text="显示" inactive-text="隐藏" @change="handleSwitchChange">
+      </el-switch>
+    </div>
+    <Rightdata v-show="ShowRi" class="ridata"></Rightdata>
+    <!-- <router-view></router-view> -->
   </div>
 </template>
 
 <script>
+import Tmap from "@/components/map";
+import Rightdata from "./component/rightdata.vue";
 export default {
-  name: 'PerformanceTestIndex',
-
+  name: "Index",
+  components: {
+    Tmap,
+    Rightdata,
+  },
   data() {
-    return {}
+    return {
+      ShowRi: true,
+      treeval: "",
+      value1: true,
+      treeval: '', // 绑定的输入框值
+      showTree: false, // 控制树列表显示
+      treeData: [ // 树列表数据,根据实际需求自行替换
+        {
+          id: 1,
+          label: 'Node 1',
+          children: [
+            {
+              id: 2,
+              label: 'Node 1-1'
+            }
+          ]
+        },
+        {
+          id: 3,
+          label: 'Node 2'
+        }
+      ]
+
+    };
   },
 
-  mounted() {},
+  mounted() {
+        //模拟地图上的点位
+        const data = [{ point: [120.2, 30.35] }, { point: [121.2, 30.35] }];
+    data.forEach((element) => {
+      console.log(element);
+      this.$refs.map.addMarker(element);
+    });
 
-  methods: {}
-}
+   },
+
+  methods: {
+
+    clickEvent(data) {
+      console.log(data);
+      this.$router.push({ name: "about" });
+    },
+    
+    handleSwitchChange() {
+      this.ShowRi = !this.ShowRi;
+    },
+    handleNodeClick(data) {
+      // 将点击的节点值赋给输入框
+      this.treeval = data.label;
+      // 隐藏树列表
+      this.showTree = false;
+    }
+  },
+};
 </script>
+
+<style lang="scss" scoped>
+.map-ditu {
+  min-width: 86.9vw;
+  max-width: 94.9vw;
+  height: 93.4vh;
+  position: relative;
+}
+
+.ridata {
+  position: absolute;
+  top: 20px;
+  right: 20px;
+}
+
+.ledata {
+  font-size: 14px;
+  width: 300px;
+  position: absolute;
+  top: 20px;
+  left: 60px;
+  background: #008080;
+  padding: 10px;
+  color: #fff;
+  border-radius: 5px;
+
+  p {
+    line-height: 24px;
+
+    .SpText {
+      display: inline-block;
+      width: 90px;
+      text-align: right;
+    }
+
+    .red,
+    .yellow,
+    .green {
+      display: inline-block;
+      width: 30px;
+      height: 12px;
+      margin-right: 5px;
+    }
+    .red { background-color: #E16757; }
+  .yellow { background-color: #EECB5F; }
+  .green { background-color:#7ECF51 }
+  }
+}
+.Showtree{
+  position: absolute;
+  top: 55px;
+  left: 10px;
+  width: 280px
+}
+</style>

+ 0 - 0
src/views/admin/cockpitManage/component/leftdata.vue


+ 295 - 0
src/views/admin/cockpitManage/component/rightdata copy.vue

@@ -0,0 +1,295 @@
+<template>
+
+
+    <div class="backbone">
+        <div>
+            <h3>风场分析完成率</h3>
+            <div id="main" style="width: 260px; height: 160px;"></div>
+
+        </div>
+        <div>
+            <h3>异常设备概览</h3>
+            <div class="BOX">
+                <div style="display: flex;">
+                    <div class="YC01">
+                        <strong>4545</strong>
+                        <span>异常总数</span>
+                    </div>
+                    <div class="YC02">
+                        <strong>20</strong>
+                        <span>本月异常</span>
+                    </div>
+                </div>
+
+                <div style="display: flex;">
+                    <div class="YC02">
+                        <strong class="textred">0</strong>
+                        <span>未处理异常</span>
+                    </div>
+                    <div class="YC02">
+                        <strong class="texyellow">20</strong>
+                        <span>异常设备数</span>
+                    </div>
+                    <div class="YC03">
+
+                    </div>
+
+                </div>
+            </div>
+        </div>
+        <div>
+            <h3>异常数据信息</h3>
+            <div>
+                <el-table v-loading="shujuloading" :data="tableData" :max-height="150" ref="shujuscroll_Table" stripe
+                    @mouseenter.native="shujuautoScroll(true)" @mouseleave.native="shujuautoScroll(false)"
+                    class="Tabtab">
+                    <el-table-column prop="name" label="姓名">
+                    </el-table-column>
+                    <el-table-column prop="date" label="日期">
+                    </el-table-column>
+                    <el-table-column prop="date" label="记录">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+        <div>
+            <h3>近期操作记录</h3>
+            <div>
+                <el-table v-loading="loading" :data="tableData" :max-height="150" ref="scroll_Table" stripe
+                    @mouseenter.native="autoScroll(true)" @mouseleave.native="autoScroll(false)" class="Tabtab">
+                    <el-table-column prop="name" label="姓名">
+                    </el-table-column>
+                    <el-table-column prop="date" label="日期">
+                    </el-table-column>
+                    <el-table-column prop="date" label="记录">
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+
+    </div>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+export default {
+    data() {
+        return {
+
+            myChart: null,
+            loading: false,
+            shujuloading: false,
+            tableData: [{ name: '王小虎', }, { name: '王小虎', }, { name: '王小虎', }, { name: '王小虎', }, { name: '王小虎', }, { name: '王小虎', }],
+            scrolltimer: '', // 自动滚动的定时任务
+        }
+    },
+    mounted() {
+        this.autoScroll()
+        this.shujuautoScroll()
+        this.initChart();
+
+    },
+    beforeDestroy() {
+        this.autoScroll(true)
+        this.shujuautoScroll(true)
+    },
+
+
+    methods: {
+        autoScroll(stop) {
+            const table = this.$refs.scroll_Table
+            // 拿到表格中承载数据的div元素
+            const divData = table.$refs.bodyWrapper
+            // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
+            if (stop) {
+                //再通过事件监听,监听到 组件销毁 后,再执行关闭计时器。
+                window.clearInterval(this.scrolltimer)
+            } else {
+                this.scrolltimer = window.setInterval(() => {
+                    // 元素自增距离顶部1像素
+                    divData.scrollTop += 1
+                    // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
+                    if (divData.clientHeight + divData.scrollTop == divData.scrollHeight) {
+                        // 重置table距离顶部距离
+                        divData.scrollTop = 0
+                        // 重置table距离顶部距离。值=(滚动到底部时,距离顶部的大小) - 整个高度/2
+                        // divData.scrollTop = divData.scrollTop - divData.scrollHeight / 2
+                    }
+                }, 150) // 滚动速度
+
+            }
+        },
+        shujuautoScroll(stop) {
+            const table = this.$refs.shujuscroll_Table
+            // 拿到表格中承载数据的div元素
+            const divData = table.$refs.bodyWrapper
+            // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
+            if (stop) {
+                //再通过事件监听,监听到 组件销毁 后,再执行关闭计时器。
+                window.clearInterval(this.scrolltimer)
+            } else {
+                this.scrolltimer = window.setInterval(() => {
+                    // 元素自增距离顶部1像素
+                    divData.scrollTop += 1
+                    // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
+                    if (divData.clientHeight + divData.scrollTop == divData.scrollHeight) {
+                        // 重置table距离顶部距离
+                        divData.scrollTop = 0
+                        // 重置table距离顶部距离。值=(滚动到底部时,距离顶部的大小) - 整个高度/2
+                        // divData.scrollTop = divData.scrollTop - divData.scrollHeight / 2
+                    }
+                }, 150) // 滚动速度
+
+            }
+        },
+
+        initChart() {
+            var chartDom = document.getElementById('main');
+            var myChart = echarts.init(chartDom);
+            var option;
+
+            option = {
+                tooltip: {
+                    trigger: 'item',
+                    formatter: function (params) {
+                        var percent = params.percent.toFixed(2) + '%';
+                        return `${params.name}: ${params.value} (${percent})`;
+                    }
+                },
+                legend: {
+                    orient: 'vertical',
+                    left: 'left',
+                    top: '30%' // 将图例向下移动一些
+                },
+                series: [
+                    {
+                        type: 'pie',
+                        radius: ['40%', '80%'],
+                        avoidLabelOverlap: false,
+                        label: {
+                            show: false,
+                            position: 'center'
+                        },
+                        labelLine: {
+                            show: false
+                        },
+                        center: ['60%', '50%'], // 将饼图往右移动一些
+                        data: [
+                            { value: 15, name: '已完成', itemStyle: { color: '#7ECF51' } },
+                            { value: 50, name: '进行中', itemStyle: { color: '#EECB5F' } },
+                            { value: 30, name: '未开始', itemStyle: { color: '#E16757' } },
+                        ]
+                    }
+                ]
+            };
+
+            option && myChart.setOption(option);
+        }
+
+
+
+    }
+};
+</script>
+
+
+<style lang="scss" scoped>
+.backbone {
+    width: 300px;
+    color: #FFF;
+    background: #008080;
+    height: 95%;
+    border-radius: 5px;
+    padding: 20px;
+
+}
+
+.BOX {
+    background: #004F5F;
+    display: flex;
+
+
+    padding-left: 10px;
+    flex-wrap: wrap;
+    padding-bottom: 15px;
+
+}
+
+.YC01 {
+    width: 154px;
+    height: 60px;
+    background-image: url('../../../../assets/001.png');
+    background-size: 154px 60px;
+    background-repeat: no-repeat;
+    background-position: center;
+    margin-right: 15px;
+    margin-top: 15px;
+    text-align: center;
+
+    strong {
+        display: block;
+        font-size: 26px;
+        color: #4BFFFF;
+    }
+
+    span {
+        display: block;
+        font-size: 12px;
+
+    }
+}
+
+.YC02 {
+    width: 70px;
+    height: 60px;
+    background-image: url('../../../../assets/002.png');
+    background-size: 70px 60px;
+    background-repeat: no-repeat;
+    background-position: center;
+    margin-right: 15px;
+    margin-top: 15px;
+    text-align: center;
+
+    .textred {
+        color: #D9001B;
+    }
+
+    .texyellow {
+        color: #FACD91;
+    }
+
+    strong {
+        display: block;
+        font-size: 26px;
+        color: #4BFFFF;
+    }
+
+    span {
+        display: block;
+        font-size: 12px;
+
+    }
+}
+
+.YC03 {
+    width: 70px;
+    height: 60px;
+}
+
+.Tabtab {
+    font-size: 12px;
+}
+
+::v-deep.el-table__cell {
+    padding: 2px 0 !important
+}
+
+::v-deep.el-table .el-table__cell {
+    padding: 2px 0 !important
+}
+
+
+::v-deep.el-table--scrollable-y .el-table__body-wrapper {
+    overflow-y: clip !important
+}
+</style>

+ 240 - 0
src/views/admin/cockpitManage/component/rightdata.vue

@@ -0,0 +1,240 @@
+<template>
+
+
+    <div class="backbone">
+        <div>
+            <h3>风场分析完成率</h3>
+            <div id="main" style="width: 260px; height: 160px;"></div>
+
+        </div>
+        <div>
+            <h3>异常设备概览</h3>
+            <div class="BOX">
+                <div style="display: flex;">
+                    <div class="YC01">
+                        <strong>4545</strong>
+                        <span>异常总数</span>
+                    </div>
+                    <div class="YC02">
+                        <strong>20</strong>
+                        <span>本月异常</span>
+                    </div>
+                </div>
+
+                <div style="display: flex;">
+                    <div class="YC02">
+                        <strong class="textred">0</strong>
+                        <span>未处理异常</span>
+                    </div>
+                    <div class="YC02">
+                        <strong class="texyellow">20</strong>
+                        <span>异常设备数</span>
+                    </div>
+                    <div class="YC03">
+
+                    </div>
+
+                </div>
+            </div>
+        </div>
+        <div>
+            <h3>异常数据信息</h3>
+          <Tabroll :table-data="tableData" :shujuloading="shujuloading" :columns="tableColumns" :max-height="150"></Tabroll>
+        </div>
+        <div>
+            <h3>近期操作记录</h3>
+            <Tabroll :table-data="tableData" :shujuloading="shujuloading" :columns="tableColumns" :max-height="150"></Tabroll>
+        </div>
+
+    </div>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+import Tabroll from './tabroll.vue';
+export default {
+    components: {
+        Tabroll
+  },
+    data() {
+        return {
+            myChart: null,
+            tableData: [
+        { name: '王小虎' },
+        { name: '王小虎' },
+        { name: '王小虎' },
+        { name: '王小虎' },
+        { name: '王小虎' },
+        { name: '王小虎' }
+      ],
+      shujuloading: false,
+      tableColumns: [
+        { prop: 'name', label: '姓名' },
+        { prop: 'date', label: '日期' },
+        { prop: 'record', label: '记录' }
+      ]
+       
+        }
+    },
+    mounted() {
+   
+        this.initChart();
+
+    },
+
+
+    methods: {
+   
+       
+
+        initChart() {
+            var chartDom = document.getElementById('main');
+            var myChart = echarts.init(chartDom);
+            var option;
+
+            option = {
+                tooltip: {
+                    trigger: 'item',
+                    formatter: function (params) {
+                        var percent = params.percent.toFixed(2) + '%';
+                        return `${params.name}: ${params.value} (${percent})`;
+                    }
+                },
+                legend: {
+                    orient: 'vertical',
+                    left: 'left',
+                    top: '30%' // 将图例向下移动一些
+                },
+                series: [
+                    {
+                        type: 'pie',
+                        radius: ['40%', '80%'],
+                        avoidLabelOverlap: false,
+                        label: {
+                            show: false,
+                            position: 'center'
+                        },
+                        labelLine: {
+                            show: false
+                        },
+                        center: ['60%', '50%'], // 将饼图往右移动一些
+                        data: [
+                            { value: 15, name: '已完成', itemStyle: { color: '#7ECF51' } },
+                            { value: 50, name: '进行中', itemStyle: { color: '#EECB5F' } },
+                            { value: 30, name: '未开始', itemStyle: { color: '#E16757' } },
+                        ]
+                    }
+                ]
+            };
+
+            option && myChart.setOption(option);
+        }
+
+
+
+    }
+};
+</script>
+
+
+<style lang="scss" scoped>
+.backbone {
+    width: 300px;
+    color: #FFF;
+    background: #008080;
+    height: 95%;
+    border-radius: 5px;
+    padding: 20px;
+
+}
+
+.BOX {
+    background: #004F5F;
+    display: flex;
+
+
+    padding-left: 10px;
+    flex-wrap: wrap;
+    padding-bottom: 15px;
+
+}
+
+.YC01 {
+    width: 154px;
+    height: 60px;
+    background-image: url('../../../../assets/001.png');
+    background-size: 154px 60px;
+    background-repeat: no-repeat;
+    background-position: center;
+    margin-right: 15px;
+    margin-top: 15px;
+    text-align: center;
+
+    strong {
+        display: block;
+        font-size: 26px;
+        color: #4BFFFF;
+    }
+
+    span {
+        display: block;
+        font-size: 12px;
+
+    }
+}
+
+.YC02 {
+    width: 70px;
+    height: 60px;
+    background-image: url('../../../../assets/002.png');
+    background-size: 70px 60px;
+    background-repeat: no-repeat;
+    background-position: center;
+    margin-right: 15px;
+    margin-top: 15px;
+    text-align: center;
+
+    .textred {
+        color: #D9001B;
+    }
+
+    .texyellow {
+        color: #FACD91;
+    }
+
+    strong {
+        display: block;
+        font-size: 26px;
+        color: #4BFFFF;
+    }
+
+    span {
+        display: block;
+        font-size: 12px;
+
+    }
+}
+
+.YC03 {
+    width: 70px;
+    height: 60px;
+
+}
+
+.Tabtab {
+    font-size: 12px;
+}
+
+::v-deep.el-table__cell {
+    padding: 2px 0 !important
+}
+
+::v-deep.el-table .el-table__cell {
+    padding: 2px 0 !important
+}
+
+
+::v-deep.el-table--scrollable-y .el-table__body-wrapper {
+    overflow-y: clip !important
+}
+</style>

+ 102 - 0
src/views/admin/cockpitManage/component/tabroll.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <el-table v-loading="shujuloading" :data="tableData" :max-height="maxHeight" ref="shujuscroll_Table" stripe
+      @mouseenter.native="shujuautoScroll(true)" @mouseleave.native="shujuautoScroll(false)"  class="Tabtab">
+      <el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop"
+        :label="column.label"></el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    tableData: {
+      type: Array,
+      default: () => []
+    },
+    shujuloading: {
+      type: Boolean,
+      default: false
+    },
+    tableTitle: {
+      type: String,
+      default: ''
+    },
+    columns: {
+      type: Array,
+      default: () => []
+    },
+    maxHeight: {
+      type: Number,
+      default: 150
+    }
+  },
+  mounted() {
+    this.shujuautoScroll()
+  },
+  beforeDestroy() {
+    this.shujuautoScroll(true)
+  },
+  methods: {
+
+    shujuautoScroll(stop) {
+      const table = this.$refs.shujuscroll_Table
+      const divData = table.$refs.bodyWrapper
+      if (stop) {
+        window.clearInterval(this.scrolltimer)
+      } else {
+        this.scrolltimer = window.setInterval(() => {
+          divData.scrollTop += 1
+          if (divData.clientHeight + divData.scrollTop == divData.scrollHeight) {
+            divData.scrollTop = 0
+          }
+        }, 150)
+      }
+    },
+
+    tableRowClassName ({ row, rowIndex }) {
+      if (rowIndex % 2 === 1) {
+        return 'warning-row'
+      } else {
+        return 'success-row'
+      }
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.Tabtab {
+  font-size: 12px;
+}
+
+
+::v-deep.el-table .el-table__cell {
+  padding: 2px 0 !important;
+}
+
+
+
+/* 去掉最下面的那一条线 */
+.el-table::before {
+  height: 0px;
+}
+
+/* 滚动条样式 */
+::v-deep .el-table__body-wrapper::-webkit-scrollbar-track {
+  background-color: #004F5F;
+}
+
+::v-deep .el-table__body-wrapper::-webkit-scrollbar {
+  width: 15px;
+  opacity: 0.5;
+}
+
+::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
+  border-radius: 15px;
+  background-color: rgba(0, 79, 95, 0.75);
+}
+
+
+</style>

+ 23 - 8
src/views/admin/cockpitManage/electronicMap.vue

@@ -1,21 +1,36 @@
 <template>
-  <div>
-    <!--驾驶舱 -->
-    222
-    <img src="@/assets/bg.png" alt="" />
+  <div class="map-ditu">
+    <Tmap ref="map"></Tmap>
+    <!-- <router-view></router-view> -->
   </div>
 </template>
 
 <script>
+import Tmap from "@/components/map";
 export default {
-  name: "PerformanceTestIndex",
-
+  name: "Index",
+  components: {
+    Tmap,
+  },
   data() {
-    return {};
+    return { };
   },
 
   mounted() { },
 
-  methods: {},
+  methods: {
+
+  },
 };
 </script>
+
+<style lang="scss" scoped>
+.map-ditu {
+  min-width: 86.9vw;
+  max-width: 94.9vw;
+  height: 93.4vh;
+  position: relative;
+}
+
+
+</style>

+ 31 - 77
src/views/home/components/Menu.vue

@@ -2,99 +2,49 @@
   <el-aside :width="!isCollapse ? '250px' : '100px'" class="asideBox">
     <div class="homeBox">
       <div class="logoItem" :class="{ 'flexCenter ': isCollapse }">
-        <div
-          class="logoImg"
-          v-show="isCollapse"
-          @click="
-            handleChangeMenuUrl(
-              { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
-              `/home/cockpitManage?name=驾驶舱`
-            )
-          "
-        >
-          <SvgIcons
-            name="dnao"
-            class="dnao"
-            width="40px"
-            height="40px"
-            color="#222"
-          ></SvgIcons>
+        <div class="logoImg" v-show="isCollapse" @click="
+          handleChangeMenuUrl(
+            { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
+            `/home/cockpitManage?name=驾驶舱`
+          )
+          ">
+          <SvgIcons name="dnao" class="dnao" width="40px" height="40px" color="#222"></SvgIcons>
         </div>
-        <span
-          v-if="!isCollapse"
-          @click="
-            handleChangeMenuUrl(
-              { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
-              `/home/cockpitManage?name=驾驶舱`
-            )
-          "
-          :class="isCollapse ? 'stop-animation' : 'active-animation'"
-          >风机运行管理平台</span
-        >
+        <span v-if="!isCollapse" @click="
+          handleChangeMenuUrl(
+            { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
+            `/home/cockpitManage?name=驾驶舱`
+          )
+          " :class="isCollapse ? 'stop-animation' : 'active-animation'">风机运行管理平台</span>
       </div>
     </div>
-    <el-menu
-      collapse-transition
-      ref="menu"
-      class="mt-3 el-menu-vertical-demo"
-      @open="handleOpen"
-      @close="handleClose"
-      background-color="#eff1f3"
-      text-color="#000"
-      active-text-color="#0754a1"
-      :router="true"
-      :default-active="defaultActive"
-      :unique-opened="true"
-      :collapse="isCollapse"
-    >
-      <template v-for="item in routerList">
-        <el-submenu
-          :index="item.path"
-          v-if="item.children && item.children.length > 0"
-        >
+    <el-menu collapse-transition ref="menu" class="mt-3 el-menu-vertical-demo" @open="handleOpen" @close="handleClose"
+      background-color="#eff1f3" text-color="#000" active-text-color="#0754a1" :router="true"
+      :default-active="defaultActive" :unique-opened="true" :collapse="isCollapse">
+      <div v-for="item in routerList" :key="item.id">
+        <el-submenu :index="item.path" v-if="item.children && item.children.length > 0">
           <template slot="title">
             <i class="el-icon-menu" v-if="isElPrefix(item.iconName)"></i>
-            <i v-else class="svnIcon"
-              ><svg-icon :icon-class="item.iconName"
-            /></i>
+            <i v-else class="svnIcon"><svg-icon :icon-class="item.iconName" /></i>
             <span>{{ item.name }}</span>
           </template>
-          <el-menu-item
-            v-for="child in item.children"
-            :key="child.id"
-            :index="`/home/${item.path}/${child.path}?id=${child.id}&name=${child.name}`"
-          >
+          <el-menu-item v-for="child in item.children" :key="child.id"
+            :index="`/home/${item.path}/${child.path}?id=${child.id}&name=${child.name}`">
             <i class="el-icon-menu" v-if="isElPrefix(child.iconName)"></i>
-            <i v-else class="svnIcon"
-              ><svg-icon :icon-class="child.iconName"
-            /></i>
+            <i v-else class="svnIcon"><svg-icon :icon-class="child.iconName" /></i>
             <span>{{ child.name }}</span>
           </el-menu-item>
         </el-submenu>
-        <el-menu-item
-          :key="item.id"
-          :index="`/home/${item.path}?id=${item.id}&name=${item.name}`"
-          v-else
-        >
+        <el-menu-item :key="item.id" :index="`/home/${item.path}?id=${item.id}&name=${item.name}`" v-else>
           <i class="el-icon-menu" v-if="isElPrefix(item.iconName)"></i>
           <i v-else class="svnIcon"><svg-icon :icon-class="item.iconName" /></i>
           <span>{{ item.name }}</span>
         </el-menu-item>
-      </template>
+      </div>
     </el-menu>
     <div class="foldBox flexCenter">
-      <span
-        v-show="isCollapse"
-        class="el-icon-s-unfold icon"
-        @click="isCollapse = false"
-        >展开</span
-      >
-      <span
-        v-show="!isCollapse"
-        class="el-icon-s-fold icon"
-        @click="isCollapse = true"
-        >收起</span
-      >
+      <span v-show="isCollapse" class="el-icon-s-unfold icon" @click="isCollapse = false">展开</span>
+      <span v-show="!isCollapse" class="el-icon-s-fold icon" @click="isCollapse = true">收起</span>
     </div>
   </el-aside>
 </template>
@@ -112,11 +62,13 @@ export default {
       keyObject: {},
       routerList: [
         {
+          id:1,
           path: "cockpitManage",
           name: "驾驶舱",
           iconName: "gps",
           children: [
             {
+              id:11,
               iconName: "gps",
               path: "electronic-map",
               name: "电子地图",
@@ -312,7 +264,9 @@ export default {
         p {
           color: #19436d;
         }
-        transition: width 0.5s ease, transform 0.5s ease;
+
+        transition: width 0.5s ease,
+        transform 0.5s ease;
         transform-origin: left;
       }
 

+ 13 - 0
src/views/home/components/mockData.js

@@ -64,31 +64,44 @@ export const orgList = [
     name: "台账管理",
     iconName: "Ledger",
     id: "4",
+    path: "ledger",
+    component: () =>
+      import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/index.vue"),
     children: [
       {
         id: 41,
         name: "企业信息",
         path: "enterprise",
+        component: () =>
+          import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/enterprise.vue"),
       },
       {
         id: 42,
         name: "风场信息",
         path: "windsite",
+        component: () =>
+          import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/windsite.vue"),
       },
       {
         id: 43,
         name: "风机信息",
         path: "draught",
+        component: () =>
+          import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/draught.vue"),
       },
       {
         id: 44,
         name: "机型信息",
         path: "milltype",
+        component: () =>
+          import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/milltype.vue"),
       },
       {
         id: 45,
         name: "测风塔信息",
         path: "anemometer",
+        component: () =>
+          import(/*webpackChunkName:'dataManage'*/ "@/views/ledger/anemometer.vue"),
       },
     ],
   },

+ 15 - 0
src/views/ledger/index.vue

@@ -0,0 +1,15 @@
+<!--
+ * @Author: your name
+ * @Date: 2024-05-17 16:02:11
+ * @LastEditTime: 2024-05-19 22:59:28
+ * @LastEditors: bogon
+ * @Description: In User Settings Edit
+ * @FilePath: /dasheng/performance-test/src/views/system/index.vue
+-->
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>
+<script></script>
+<style scoped lang="scss"></style>

+ 0 - 4
vue.config.js

@@ -57,11 +57,7 @@ module.exports = {
     proxy: {
       "/api": {
         // target: "http://192.168.5.4:16200", // 石月
-<<<<<<< HEAD
-        target: "http://192.168.50.235:16200",//内网
-=======
         target: "http://192.168.50.235:16200",
->>>>>>> 3c71ffd323781083528875676ea7f31295780bfd
         // target: "http://106.120.102.238:16600",//外网
         changeOrigin: true,
         pathRewrite: {