Browse Source

整合框架,功率预测,发电能力分析,报表项目合并

SunZehao 1 year ago
parent
commit
25fce7d9de

+ 6 - 1
.env.development

@@ -5,7 +5,12 @@ NODE_ENV = 'development'
 VUE_APP_TITLE = '页面标题'
 
 # 开发环境/重写路径(公共路径)
-VUE_APP_GENERAT_URL = 'http://123.60.219.66:9002'
+# 发电能力分析
+# VUE_APP_GENERAT_URL = 'http://123.60.219.66:9002'
+VUE_APP_GENERAT_URL = 'http://192.168.2.12:9002'
+# 智能报表
+VUE_APP_REPORT_URL = 'http://192.168.2.16:9001'
+# 功率预测
 VUE_APP_BASE_URL = 'http://123.60.219.66:8086'
 
 # 百度地图KEY

+ 1 - 0
.env.production

@@ -13,6 +13,7 @@ VUE_APP_TITLE = '页面标题'
 
 # 生产环境/重写路径(公共路径)
 VUE_APP_GENERAT_URL = 'http://123.60.219.66:9002'
+VUE_APP_REPORT_URL = 'http://192.168.2.16:9001'
 VUE_APP_BASE_URL = 'http://123.60.219.66:8086'
 
 # 百度地图KEY

+ 3 - 0
components.d.ts

@@ -40,10 +40,13 @@ declare module 'vue' {
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSpace: typeof import('element-plus/es')['ElSpace']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
+    ElText: typeof import('element-plus/es')['ElText']
+    ElTimeSelect: typeof import('element-plus/es')['ElTimeSelect']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
     Excel: typeof import('./src/components/generatingCapacityComponent/excel.vue')['default']

+ 2 - 2
package-lock.json

@@ -1,11 +1,11 @@
 {
-  "name": "own-vue3-vuecli-template",
+  "name": "windLifecontrolPro",
   "version": "0.1.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
-      "name": "own-vue3-vuecli-template",
+      "name": "windLifecontrolPro",
       "version": "0.1.0",
       "dependencies": {
         "axios": "^1.4.0",

+ 1 - 1
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "own-vue3-vuecli-template",
+  "name": "windLifecontrolPro",
   "version": "0.1.0",
   "private": true,
   "scripts": {

File diff suppressed because it is too large
+ 14495 - 0
public/Cesium.js


BIN
public/favicon.ico


+ 2 - 0
public/index.html

@@ -12,6 +12,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <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">
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>
   <body>
@@ -21,4 +22,5 @@
     <div id="app"></div>
     <!-- built files will be auto injected -->
   </body>
+  <script src="./Cesium.js"></script>
 </html>

+ 37 - 0
public/static/config/modeConfig.js

@@ -0,0 +1,37 @@
+// 本地联调开关
+const localTest = false;
+
+// 服务器地址
+let baseURL = "/current/" // 正式环境
+
+// websocket 服务器地址
+let websocketUrl = null;
+
+// 3D 地球瓦片路径
+let tilesUrl = null;
+// 3D 地球最大支持放大到多少级
+const tilesMaxLevel = 18;
+
+// 适配器地址
+// const adapterUrl = "http://10.155.32.4:8011/";
+
+// 切换模块时是否提示当前模块名称(用于对内介绍项目时便捷显示模块名称)
+const showModuleName = 0;
+
+// if (localTest) {
+//     baseURL = "http://192.168.10.8:9002/" // 联机调试 
+// } else {
+//     baseURL = "http://10.155.32.14:9002/" // 正式环境
+    
+// }
+
+websocketUrl = (baseURL.replace(/http:\/\/|https:\/\//g, "")) + "gyee-websocket";
+
+window.__MODE__ = {
+    baseURL,
+    websocketUrl,
+    // adapterUrl,
+    tilesUrl,
+    tilesMaxLevel,
+    showModuleName
+};

File diff suppressed because it is too large
+ 10503 - 0
public/static/geoJson/sx.json


BIN
public/static/glb/wp.glb


BIN
public/static/glb/wt.glb


BIN
public/static/img/markIcon.png


File diff suppressed because it is too large
+ 1311 - 0
public/widgets.css


+ 20 - 11
src/App.vue

@@ -12,8 +12,7 @@
             <li class="menu-item" v-for="(menu, index) in showMenuData" :key="index"
                 @click="handleNodeClick(menu.index)">
                 <router-link :to="menu.index">
-                    <el-tooltip class="item" effect="dark" :content="menu.name" placement="bottom" :show-after="500"
-                        :enterable="false" hide-after="10">
+                    <el-tooltip class="item" effect="dark" :content="menu.name" placement="right" :enterable="false">
                         <component :is="menu.icon">
                         </component>
                     </el-tooltip>
@@ -43,7 +42,7 @@
                 showMenuData: [],
                 powerPreDatas: [{
                         index: '/powerPrediction/index',
-                        icon: 'Collection',
+                        icon: 'Coin',
                         name: '概要'
                     },
                     {
@@ -72,6 +71,17 @@
                         name: '统计汇总'
                     },
                 ],
+                intelligentReportDatas: [{
+                        icon: 'Finished',
+                        index: '/intelligentReport/reporting',
+                        name: '报表上报'
+                    },
+                    {
+                        icon: 'Odometer',
+                        index: '/intelligentReport/scriptgeneration',
+                        name: '报表脚本'
+                    },
+                ],
                 generatingCapDatas: [{
                     icon: 'Coin',
                     index: '/generatingCap/dataFilter/prepare',
@@ -131,29 +141,28 @@
             }
         },
         created() {
+
+        },
+        mounted() {
             if (this.$route.path.indexOf('powerPrediction') > -1) {
                 this.showMenuData = this.powerPreDatas
+            } else if (this.$route.path.indexOf('intelligentReport') > -1) {
+                this.showMenuData = this.intelligentReportDatas
             } else if (this.$route.path.indexOf('generatingCap') > -1) {
                 this.showMenuData = this.generatingCapDatas
             }
         },
-        mounted() {
-            this.loadPage()
-        },
         methods: {
             headerName(name) {
                 this.showMenuData = []
                 if (name === '功率预测') {
                     this.showMenuData = this.powerPreDatas
+                } else if (name === '智能报表') {
+                    this.showMenuData = this.intelligentReportDatas
                 } else if (name === '发电能力分析') {
                     this.showMenuData = this.generatingCapDatas
                 }
             },
-            loadPage() {
-                setTimeout(() => {
-                    this.loading = false;
-                }, 1000);
-            },
             showMenu() {
                 if (!this.fixed) {
                     this.isShowMenu = true;

+ 27 - 0
src/api/report.js

@@ -0,0 +1,27 @@
+import httpRequest from '@/utils/request.js'
+httpRequest.defaults.baseURL = process.env.VUE_APP_REPORT_URL;
+
+// 保存脚本
+export function save(param, data) {
+  return httpRequest({
+    url: 'script/save',
+    method: 'post',
+    params: param,
+    data: data
+  })
+}
+// 读取脚本
+export function read() {
+  return httpRequest({
+    url: 'script/read',
+    method: 'get'
+  })
+}
+// 运行脚本
+export function run(data) {
+  return httpRequest({
+    url: 'script/run',
+    method: 'post',
+    data: data
+  })
+}

+ 41 - 39
src/components/commonHeaders.vue

@@ -73,7 +73,7 @@
                     name: '发电能力分析'
                 },
                 {
-                    index: '/weather',
+                    index: '/intelligentReport/reporting',
                     icon: 'PictureFilled',
                     name: '智能报表'
                 },
@@ -95,56 +95,58 @@
                 that.showRole = false
             }
             // that.getUserMes(userMes.userId)
+            debugger
+            that.showHeader(that.$route)
         },
         watch: {
             $route: {
                 handler: function (route) {
                     console.log('route', route)
-                    this.menuData.forEach(it => {
-                        if (route.path.indexOf('powerPrediction') > -1) {
-                            httpRequest.defaults.baseURL = process.env.VUE_APP_BASE_URL;
-                            if (it.name === '功率预测') {
-                                it.showBac = true
-                            } else {
-                                it.showBac = false
-                            }
-                        } else if (route.path.indexOf('generatingCap') > -1) {
-                            httpRequest.defaults.baseURL = process.env.VUE_APP_GENERAT_URL;
-                            if (it.name === '发电能力分析') {
-                                it.showBac = true
-                            } else {
-                                it.showBac = false
-                            }
-                        } else if (route.path === '/index') {
-                            if (it.name === '首页') {
-                                it.showBac = true
-                            } else {
-                                it.showBac = false
-                            }
-                        } else {
-                            it.showBac = false
-                        }
-                    })
+                    this.showHeader(route)
                 },
                 immediate: true
             }
         },
         methods: {
-            changeRoute(item) {
-                if (item.name === '智能营销') {
-                    let url = ''
-                    if (location.origin.indexOf('10.15.32.7') !== -1) {
-                        url = location.origin + '/#/dashboard/marketBoundary' + `?userid=uuu&markKey=YXSSO`
+            showHeader(route) {
+                this.menuData.forEach(it => {
+                    if (route.path.indexOf('powerPrediction') > -1) {
+                        httpRequest.defaults.baseURL = process.env.VUE_APP_BASE_URL;
+                        if (it.name === '功率预测') {
+                            it.showBac = true
+                        } else {
+                            it.showBac = false
+                        }
+                    } else if (route.path.indexOf('intelligentReport') > -1) {
+                        httpRequest.defaults.baseURL = process.env.VUE_APP_REPORT_URL;
+                        if (it.name === '智能报表') {
+                            it.showBac = true
+                        } else {
+                            it.showBac = false
+                        }
+                    } else if (route.path.indexOf('generatingCap') > -1) {
+                        httpRequest.defaults.baseURL = process.env.VUE_APP_GENERAT_URL;
+                        if (it.name === '发电能力分析') {
+                            it.showBac = true
+                        } else {
+                            it.showBac = false
+                        }
+                    } else if (route.path === '/home') {
+                        if (it.name === '首页') {
+                            it.showBac = true
+                        } else {
+                            it.showBac = false
+                        }
                     } else {
-                        url = item.index
+                        it.showBac = false
                     }
-                    window.open(url, '_self')
-                } else {
-                    window.sessionStorage.setItem('headerRoute', item.index)
-                    this.$router.push({
-                        path: item.index
-                    })
-                }
+                })
+            },
+            changeRoute(item) {
+                window.sessionStorage.setItem('headerRoute', item.index)
+                this.$router.push({
+                    path: item.index
+                })
                 this.$emit('headerName', item.name)
             },
             async backLogin() {

+ 24 - 7
src/components/generatingCapacityComponent/kMap/index.vue

@@ -1,17 +1,13 @@
 <template>
     <div class="kMapBox">
-        <div id="kMap"></div>
+        <div id="kMap" class="kMapss"></div>
         <div class="tipBox" v-if="cameraHeight">
             <span class="tipItem">视角高度≈{{ cameraHeight.toFixed(2) }}</span>
             <span class="tipItem">视角经度≈{{ cameraLongitude.toFixed(2) }}</span>
             <span class="tipItem">视角纬度≈{{ cameraLatitude.toFixed(2) }}</span>
         </div>
         <RightMenu :rightMenuPosition="rightMenuPosition" :rightMenuShow="rightMenuShow" :clickModel="clickModel"
-            @cliclMenu="clickMenuItem" @closeRightmenu="
-        () => {
-          rightMenuShow = false;
-        }
-      " />
+            @cliclMenu="clickMenuItem" @closeRightmenu="() => { rightMenuShow = false; }" />
     </div>
 </template>
 
@@ -89,7 +85,7 @@
             //     })
             //     .then(() => {})
             //     .catch(() => {
-            //         this.initGetLocalTiles();
+            this.initGetLocalTiles();
             //     })
             //     .finally(() => {
 
@@ -552,6 +548,27 @@
     .kMapBox #kMap {
         width: 100%;
         height: 100%;
+
+
+
+    }
+
+    .kMapss {
+        .cesium-viewer {
+            height: 100%;
+
+            .cesium-viewer-cesiumWidgetContainer {
+                height: 100%;
+
+                .cesium-widget {
+                    height: 500px !important;
+
+                    canvas {
+                        height: 500px;
+                    }
+                }
+            }
+        }
     }
 
     .kMapBox {

+ 175 - 158
src/router/index.js

@@ -8,94 +8,94 @@
 import { createRouter, createWebHashHistory } from 'vue-router'
 
 const routes = [
-  {
-    path: '/login',
-    name: 'login',
-    meta: {
-        title: '登录',
+    {
+        path: '/login',
+        name: 'login',
+        meta: {
+            title: '登录',
+        },
+        component: () => import('../views/login/index.vue')
     },
-    component: () => import('../views/login/index.vue')
-  },
-  {
-    path: '/',
-    redirect: '/login'
+    {
+        path: '/',
+        redirect: '/login'
+    },
+    {
+            path: '/home',
+            name: 'homePage',
+            meta: {
+                title: '首页',
+            },
+            component: () =>
+                import(
+                    '../views/home/index.vue'
+                ),
     },
     {
-        path: '/home',
-        name: 'homePage',
+        path: '/404',
+        component: () => import('../views/error/404.vue')
+    },
+    {
+        path: '/:catchAll(.*)',
+        redirect: '/404'
+        },
+    //功率预测相关页面
+    {
+        path: '/powerPrediction/index',
+        name: 'powerPredictionIndex',
         meta: {
-            title: '首页',
+            title: '概要',
         },
         component: () =>
             import(
-                '../views/home/index.vue'
+                '../views/powerPrediction/homePageNoMap.vue'
             ),
     },
-  {
-    path: '/404',
-    component: () => import('../views/error/404.vue')
-  },
-  {
-    path: '/:catchAll(.*)',
-    redirect: '/404'
-    },
-  //功率预测相关页面
-  {
-    path: '/powerPrediction/index',
-    name: 'powerPredictionIndex',
-    meta: {
-        title: '概要',
-    },
-    component: () =>
-        import(
-            '../views/powerPrediction/homePageNoMap.vue'
-        ),
-},
-{
-    path: '/powerPrediction/panoramicPower',
-    name: 'panoramicPower',
-    meta: {
-        title: '全景功率',
+    {
+        path: '/powerPrediction/panoramicPower',
+        name: 'panoramicPower',
+        meta: {
+            title: '全景功率',
+        },
+        component: () =>
+            import(
+                '../views/powerPrediction/panoramicPower.vue'
+            ),
     },
-    component: () =>
-        import(
-            '../views/powerPrediction/panoramicPower.vue'
-        ),
-},
-{
-    path: '/powerPrediction/power',
-    name: 'powerPre',
-    meta: {
-        title: '功率预测',
+    {
+        path: '/powerPrediction/power',
+        name: 'powerPre',
+        meta: {
+            title: '功率预测',
+        },
+        component: () =>
+            import(
+                '../views/powerPrediction/powerPredictionPage.vue'
+            ),
     },
-    component: () =>
-        import(
-            '../views/powerPrediction/powerPredictionPage.vue'
-        ),
-},
-{
-    path: '/powerPrediction/batteryDiviner',
-    name: 'batteryDiviner',
-    meta: {
-        title: '电量预测',
+    {
+        path: '/powerPrediction/batteryDiviner',
+        name: 'batteryDiviner',
+        meta: {
+            title: '电量预测',
+        },
+        component: () =>
+            import(
+                '../views/powerPrediction/batteryDivinerPage.vue'
+            ),
     },
-    component: () =>
-        import(
-            '../views/powerPrediction/batteryDivinerPage.vue'
-        ),
-},
-{
-    path: '/powerPrediction/weather',
-    name: 'weatherPage',
-    meta: {
-        title: '天气预报',
+    {
+        path: '/powerPrediction/weather',
+        name: 'weatherPage',
+        meta: {
+            title: '天气预报',
+        },
+        component: () =>
+            import(
+                '../views/powerPrediction/weatherPage.vue'
+            ),
     },
-    component: () =>
-        import(
-            '../views/powerPrediction/weatherPage.vue'
-        ),
-},
-{
+    {
     path: '/powerPrediction/statisticalSummary',
     name: 'statisticalSummary',
     meta: {
@@ -106,100 +106,117 @@ const routes = [
             '../views/powerPrediction/statisticalSummaryPage.vue'
         ),
     },
-//发电能力分析
-{
-    path: "/generatingCap/dataFilter/prepare",
-    name: "dataFilterPrepare",
-    meta: {
-        title: "风电数据准备",
+    //智能报表
+    {
+        path: "/intelligentReport/reporting",
+        name: "intelligentReportreporting",
+        meta: {
+            title: "报表上报",
+        },
+        component: () => import("../views/intelligentReporting/reporting/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataFilter/prepare/index.vue"),
-},
-{
-    path: "/generatingCap/dataFilter/process",
-    name: "dataFilterProcess",
-    meta: {
-        title: "风电数据处理",
+    {
+        path: "/intelligentReport/scriptgeneration",
+        name: "intelligentReportscriptgeneration",
+        meta: {
+            title: "报表脚本",
+        },
+        component: () => import("../views/intelligentReporting/scriptgeneration/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataFilter/process/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/combine",
-    name: "dataAnalysisCombine",
-    meta: {
-        title: "功率曲线拟合分析",
+    //发电能力分析
+    {
+        path: "/generatingCap/dataFilter/prepare",
+        name: "dataFilterPrepare",
+        meta: {
+            title: "风电数据准备",
+        },
+        component: () => import("../views/generatingCapacity/dataFilter/prepare/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataAnalysis/combine/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/rateAnalysis",
-    name: "dataAnalysisRateAnalysis",
-    meta: {
-        title: "对风偏差分析",
+    {
+        path: "/generatingCap/dataFilter/process",
+        name: "dataFilterProcess",
+        meta: {
+            title: "风电数据处理",
+        },
+        component: () => import("../views/generatingCapacity/dataFilter/process/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataAnalysis/rateAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/lineAnalysis",
-    name: "dataAnalysisLineAnalysis",
-    meta: {
-        title: "曲线偏差率分析",
+    {
+        path: "/generatingCap/dataAnalysis/combine",
+        name: "dataAnalysisCombine",
+        meta: {
+            title: "功率曲线拟合分析",
+        },
+        component: () => import("../views/generatingCapacity/dataAnalysis/combine/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataAnalysis/lineAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/hotAnalysis",
-    name: "dataAnalysisthotAnalysis",
-    meta: {
-        title: "温度与功率分析",
+    {
+        path: "/generatingCap/dataAnalysis/rateAnalysis",
+        name: "dataAnalysisRateAnalysis",
+        meta: {
+            title: "对风偏差分析",
+        },
+        component: () => import("../views/generatingCapacity/dataAnalysis/rateAnalysis/index.vue"),
     },
-    component: () => import("../views/generatingCapacity/dataAnalysis/hotAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/windAnalysis",
-    name: "dataAnalysisWindAnalysis",
-    meta: {
-      title: "损失电量分析",
+    {
+        path: "/generatingCap/dataAnalysis/lineAnalysis",
+        name: "dataAnalysisLineAnalysis",
+        meta: {
+            title: "曲线偏差率分析",
+        },
+        component: () => import("../views/generatingCapacity/dataAnalysis/lineAnalysis/index.vue"),
     },
-    component: () =>
-      import("../views/generatingCapacity/dataAnalysis/windAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/posAnalysis",
-    name: "dataAnalysisPosAnalysis",
-    meta: {
-      title: "微观选址分析",
+    {
+        path: "/generatingCap/dataAnalysis/hotAnalysis",
+        name: "dataAnalysisthotAnalysis",
+        meta: {
+            title: "温度与功率分析",
+        },
+        component: () => import("../views/generatingCapacity/dataAnalysis/hotAnalysis/index.vue"),
     },
-    component: () =>
-      import("../views/generatingCapacity/dataAnalysis/posAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/spaceAnalysis",
-    name: "dataAnalysisspaceAnalysis",
-    meta: {
-      title: "毛容量分析",
+    {
+        path: "/generatingCap/dataAnalysis/windAnalysis",
+        name: "dataAnalysisWindAnalysis",
+        meta: {
+        title: "损失电量分析",
+        },
+        component: () =>
+        import("../views/generatingCapacity/dataAnalysis/windAnalysis/index.vue"),
     },
-    component: () =>
-      import("../views/generatingCapacity/dataAnalysis/spaceAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/angleAnalysis",
-    name: "dataAnalysisAngleAnalysis",
-    meta: {
-      title: "浆距角分析",
+    {
+        path: "/generatingCap/dataAnalysis/posAnalysis",
+        name: "dataAnalysisPosAnalysis",
+        meta: {
+        title: "微观选址分析",
+        },
+        component: () =>
+        import("../views/generatingCapacity/dataAnalysis/posAnalysis/index.vue"),
     },
-    component: () =>
-      import("../views/generatingCapacity/dataAnalysis/angleAnalysis/index.vue"),
-},
-{
-    path: "/generatingCap/dataAnalysis/agcAnalysis",
-    name: "dataAnalysisAgcAnalysis",
-    meta: {
-      title: "AGC曲线偏差分析",
+    {
+        path: "/generatingCap/dataAnalysis/spaceAnalysis",
+        name: "dataAnalysisspaceAnalysis",
+        meta: {
+        title: "毛容量分析",
+        },
+        component: () =>
+        import("../views/generatingCapacity/dataAnalysis/spaceAnalysis/index.vue"),
+    },
+    {
+        path: "/generatingCap/dataAnalysis/angleAnalysis",
+        name: "dataAnalysisAngleAnalysis",
+        meta: {
+        title: "浆距角分析",
+        },
+        component: () =>
+        import("../views/generatingCapacity/dataAnalysis/angleAnalysis/index.vue"),
+    },
+    {
+        path: "/generatingCap/dataAnalysis/agcAnalysis",
+        name: "dataAnalysisAgcAnalysis",
+        meta: {
+        title: "AGC曲线偏差分析",
+        },
+        component: () =>
+        import("../views/generatingCapacity/dataAnalysis/agcAnalysis/index.vue"),
     },
-    component: () =>
-      import("../views/generatingCapacity/dataAnalysis/agcAnalysis/index.vue"),
-  },
 ]
 
 const router = createRouter({

+ 2 - 2
src/views/generatingCapacity/dataAnalysis/combine/components/search.vue

@@ -47,8 +47,8 @@
             }
         },
         methods: {
-            funSubmit(query) {
-                this.$emit('submit', query)
+            funSubmit() {
+                this.$emit('submit', this.queryForm)
             }
         }
     }

+ 1 - 1
src/views/generatingCapacity/dataAnalysis/posAnalysis/components/posChart.vue

@@ -62,7 +62,7 @@
                     marker.setLabel({
                         direction: 'right',
                         offset: new aMap.value.Pixel(10, 0), //设置文本标注偏移量
-                        content: `${item.address}`, //设置文本标注内容
+                        content: `${item.aname}`, //设置文本标注内容
                     });
                     map.value.add(marker)
                     // marker.setTitle(item.name);

+ 4 - 4
src/views/generatingCapacity/dataAnalysis/posAnalysis/index.vue

@@ -20,10 +20,10 @@
                 overflow: 'hidden',
               }">
                         <posChart @mapDone="funMapDone" @rightClick="funRightClick" :height="tableHeight"
-                            :windList="windList" v-if="!showOnlineMap" />
+                            :windList="windList" 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 />
                     </div>
                 </div>
             </div>
@@ -169,7 +169,7 @@
     import chartCop from "../rateAnalysis/components/chart.vue";
     import lineChartCop from "../rateAnalysis/components/lineChart.vue";
     import scatterSingleChartCop from "../rateAnalysis/components/scatterSingleChart.vue";
-    // import kMap from "@/components/generatingCapacityComponent/kMap/index.vue";
+    import kMap from "@/components/generatingCapacityComponent/kMap/index.vue";
     import httpRequest from '@/utils/request.js'
     const router = useRouter();
     /**配置参数 */

+ 2 - 2
src/views/generatingCapacity/dataFilter/process/search.vue

@@ -45,8 +45,8 @@
             }
         },
         methods: {
-            funSubmit(query) {
-                this.$emit('submit', query)
+            funSubmit() {
+                this.$emit('submit', this.queryForm)
             }
         }
     }

+ 61 - 0
src/views/intelligentReporting/existing.vue

@@ -0,0 +1,61 @@
+<template>
+    <el-table :data="tableData2" highlight-current-row height="500" @current-change="handleCurrentChange"
+        ref="singleTableRef">
+        <el-table-column label="已有脚本">
+            <template #default="scope">
+                <el-button type="warning" round>{{ scope.row.scriptName}}</el-button>
+            </template>
+        </el-table-column>
+        <el-table-column align="right">
+            <template #default="scope">
+                <el-button type="primary">编辑</el-button>
+            </template>
+        </el-table-column>
+    </el-table>
+</template>
+
+<script>
+    import {
+        read
+    } from "@/api/report";
+
+    export default {
+        data() {
+            return {
+                tableData2: [],
+                childCurrentRow: {}
+            }
+        },
+        mounted() {
+            this.getData()
+        },
+        methods: {
+            getData() {
+                read().then(res => {
+                    console.log("res:", res.data)
+                    this.$emit("getExistingData", res.data)
+                    this.tableData2 = res.data
+                });
+            },
+            handleCurrentChange(val) {
+                this.$emit("getExistingData", val)
+                this.childCurrentRow = val;
+                //清除父组件的行选择
+                this.tableRow()
+                this.setTableRow(val)
+            },
+            setTableRow(row) {
+                this.$refs.singleTableRef.setCurrentRow(row)
+            },
+            tableRow() {
+
+            }
+        }
+    }
+</script>
+
+
+
+<style scoped lang="less">
+
+</style>

+ 118 - 0
src/views/intelligentReporting/reporting/index.vue

@@ -0,0 +1,118 @@
+<template>
+    <el-row :gutter="50" justify="space-evenly">
+        <el-col :span="8">
+            <existing @getExistingData="getData" />
+        </el-col>
+        <el-col :span="2">
+            <el-space :fill="true" :size="65" direction="vertical">
+                <div />
+                <el-button type="primary" @click="onAddItem1">
+                    <el-icon class="el-icon--right">
+                        <ArrowRight />
+                    </el-icon>
+                </el-button>
+                <div />
+                <div />
+                <el-button type="primary" @click="onAddItem2">
+                    <el-icon class="el-icon--right">
+                        <ArrowRight />
+                    </el-icon>
+                </el-button>
+            </el-space>
+        </el-col>
+        <el-col :span="12">
+            <el-table :data="tableData">
+                <el-table-column type="index" width="30" />
+                <el-table-column label="脚本列表">
+                    <template #default="scope">
+                        <el-button v-if="scope.row.scriptName !==''" type="warning" round>{{ scope.row.scriptName}}
+                        </el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column align="right">
+                    <template #default="scope">
+                        <el-button type="primary" @click="handleRun(scope.$index)">运行</el-button>
+                        <el-button type="danger" @click="handleDelete(scope.$index)">删除
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <el-button class="run-all-script" type="primary" @click="runAllScript">运行所有脚本</el-button>
+
+            <br><br><br><br>
+            <el-text class="mx-1" size="large" tag="b">每天运行一次</el-text>
+
+            <el-table :data="tableData4">
+                <el-table-column label="时间" width="300">
+                    <el-time-select v-model="timeValue" start="00:05" step="00:05" end="23:55" placeholder="选择时间" />
+                </el-table-column>
+                <el-table-column label="脚本名称">
+                    <template #default="scope">
+                        <el-button v-if="scope.row.scriptName !==''" type="warning" round>{{ scope.row.scriptName}}
+                        </el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column align="right">
+                    <template #default="scope">
+                        <el-button type="primary" @click="handleDelete(scope.$index)">运行</el-button>
+                        <el-button type="danger" @click="handleDelete(scope.$index)">取消
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-col>
+    </el-row>
+
+</template>
+<script>
+    import {
+        run
+    } from '@/api/report';
+    import existing from "../existing.vue";
+    export default {
+        components: {
+            existing
+        },
+        data() {
+            return {
+                childCurrentRow: [],
+                tableData: [],
+                tableData4: [],
+                timeValue: ''
+            }
+        },
+        methods: {
+            onAddItem1() {
+                this.tableData.push(this.childCurrentRow)
+            },
+            onAddItem2() {
+                this.tableData4.push(this.childCurrentRow)
+            },
+            runAllScript() {
+                run(this.tableData).then(res => {
+                    console.log(res)
+                });
+            },
+            handleRun(index) {
+                run(new Array(this.tableData[index])).then(res => {
+                    console.log(res)
+                })
+            },
+            handleDelete(index) {
+                this.tableData.splice(index, 1)
+            },
+            getData(data) {
+                console.log("data:", data)
+                this.childCurrentRow = data
+            }
+        }
+    }
+</script>
+
+<style scoped lang="less">
+    .run-all-script {
+        position: absolute;
+        right: 120px;
+    }
+</style>

+ 158 - 0
src/views/intelligentReporting/scriptgeneration/index.vue

@@ -0,0 +1,158 @@
+<template>
+    <el-row :gutter="50" justify="space-evenly">
+        <el-col :span="8">
+            <el-table :data="tableData" highlight-current-row ref="singleTableRef"
+                @current-change="handleCurrentChange">
+                <el-table-column label="基本脚本">
+                    <template #default="scope">
+                        <el-input style="width: 150px" disabled>
+                            <template #prepend>{{ scope.row.before }}</template>
+                        </el-input>
+                        <el-input v-if="scope.row.behind !==''" style="width: 150px" disabled>
+                            <template #prepend>{{ scope.row.behind }}</template>
+                        </el-input>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <existing ref="childRowSet" @getExistingData="getData" />
+
+        </el-col>
+
+        <el-col :span="2">
+            <br><br><br><br><br>
+            <el-button type="primary" @click="onAddItem">
+                填加
+                <el-icon class="el-icon--right">
+                    <ArrowRight />
+                </el-icon>
+            </el-button>
+        </el-col>
+        <el-col :span="12">
+            <el-table :data="tableData3">
+                <el-table-column type="index" width="30" />
+                <el-table-column label="脚本步骤">
+                    <template #default="scope">
+                        <el-input v-model="scope.row.beforeText" v-if="scope.row.before && scope.row.before !==''"
+                            style="width: 419px">
+                            <template #prepend>{{ scope.row.before }}</template>
+                        </el-input>
+                        <el-input v-model="scope.row.behindText" v-if="scope.row.behind && scope.row.behind !==''"
+                            style="width: 250px">
+                            <template #prepend>{{ scope.row.behind }}</template>
+                        </el-input>
+                        <el-button v-if="scope.row.scriptName !==''" type="warning" round>{{ scope.row.scriptName}}
+                        </el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column align="right" width="80">
+                    <template #default="scope">
+                        <el-button type="danger" @click="handleDelete(scope.$index)">删除
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-input v-model="scriptname" style="width: 500px">
+                <template #prepend>输入脚本名称:</template>
+            </el-input>
+            <el-button type="primary" @click="saveJson">保存脚本</el-button>
+        </el-col>
+    </el-row>
+
+</template>
+
+<script>
+    import {
+        save
+    } from '@/api/report';
+    import existing from "../existing.vue";
+    export default {
+        components: {
+            existing
+        },
+        data() {
+            return {
+                tableData: [{
+                        id: '',
+                        scriptName: '',
+                        before: '打开网页:',
+                        behind: '',
+                        beforeText: '',
+                        behindText: ''
+                    },
+                    {
+                        id: '',
+                        scriptName: '',
+                        before: '在:',
+                        behind: '输入:',
+                        beforeText: '',
+                        behindText: ''
+                    },
+                    {
+                        id: '',
+                        scriptName: '',
+                        before: '点击:',
+                        behind: '',
+                        beforeText: '',
+                        behindText: ''
+                    },
+                    {
+                        id: '',
+                        scriptName: '',
+                        before: '读取:',
+                        behind: '',
+                        beforeText: '',
+                        behindText: ''
+                    },
+                    {
+                        id: '',
+                        scriptName: '',
+                        before: '自动填写:',
+                        behind: '',
+                        beforeText: '',
+                        behindText: ''
+                    }
+                ],
+                childCurrentRow: [],
+                tableData3: [],
+                childRowSet: null
+            }
+        },
+        methods: {
+            handleCurrentChange(val) {
+                this.currentRow = val;
+                if (this.childRowSet) {
+                    this.childRowSet.setTableRow()
+                }
+                this.setCurrent(val)
+            },
+            onAddItem() {
+                if (this.currentRow) {
+                    this.tableData3.push(Object.assign({}, this.currentRow))
+                } else {
+                    this.tableData3.push(Object.assign({}, this.childCurrentRow))
+                }
+            },
+            saveJson() {
+                save({
+                    scriptname: this.scriptname
+                }, this.tableData3).then(res => {
+                    console.log(res)
+                });
+            },
+            handleDelete(index) {
+                this.tableData3.splice(index, 1)
+            },
+            getData(data) {
+                this.childCurrentRow = data
+            },
+            setCurrent(row) {
+                this.$refs.singleTableRef.setCurrentRow(row)
+            }
+        }
+    }
+</script>
+
+<style scoped lang="less">
+
+</style>

+ 15 - 4
src/views/login/index.vue

@@ -1,8 +1,10 @@
 <template>
     <div class="loginPic">
         <div class="login_left">
-            <p>Welcome!</p>
-            <p class="title">光耀集中式风电功率预测系统</p>
+            <p class="titleW">Welcome!</p>
+            <p class="title">基于风机发电量全寿命周期管控的研究与应用</p>
+            <p class="titleEn">Research and application of full lifecycle control based on wind turbine power generation
+            </p>
         </div>
         <div class="login_right">
             <p class="loginTit">账号登录</p>
@@ -21,7 +23,7 @@
                 </el-input>
             </div>
             <div class="loginYanzhengma">
-                <el-input type="password" v-model="inputYanzhengma" placeholder="请输入验证码">
+                <el-input type="password" v-model="inputYanzhengma" placeholder="请输入验证码" @keyup.enter="handleLogin">
                     <template #prepend>
                         <i class="el-input__icon icon-yanzhengma" />
                     </template>
@@ -156,14 +158,23 @@
 
             p {
                 margin-bottom: 0px;
-                font-size: 32px;
                 color: #fff;
                 margin-top: 10px;
             }
 
+            .titleW {
+                font-size: 33px;
+            }
+
             .title {
+                font-size: 33px;
                 letter-spacing: 5px;
             }
+
+            .titleEn {
+                font-size: 17px;
+                letter-spacing: 1px;
+            }
         }
 
         .login_right {

+ 9 - 2
vue.config.js

@@ -66,12 +66,19 @@ module.exports = defineConfig({
   configureWebpack:{
     name: name,
     resolve: {
-      alias: {
+        alias: {
             '@': resolve('src'),
             '@tools': resolve('./src/tools'),
             '@api': resolve('./src/api'),
             '@com': resolve('./src/components'),
-      }
+        },
+        fallback: {
+            "https": false,
+            "zlib": false,
+            "http": false,
+            "url": false
+        },
+        mainFiles: ['index', 'Cesium']
     },
     //配置webpack自动按需引入element-plus
     plugins: [