Browse Source

问题修改

SunZehao 4 months ago
parent
commit
b4217c996d

+ 3 - 3
components.d.ts

@@ -20,7 +20,7 @@ declare module 'vue' {
     CalculationModelConfiguration: typeof import('./src/components/powerPredictionComponent/configPage/calculationModelConfiguration.vue')['default']
     Card1: typeof import('./src/components/coms/cards/card-1.vue')['default']
     CheckTable: typeof import('./src/components/coms/table/check-table.vue')['default']
-    Col: typeof import('./src/components/homeComponent/grid/col.vue')['default']
+    Col: typeof import('./src/components/coms/grid/col.vue')['default']
     CollapseList: typeof import('./src/components/coms/collapse/collapse-list.vue')['default']
     CollectionLineManagement: typeof import('./src/components/powerPredictionComponent/configPage/stationFlode/collectionLineManagement.vue')['default']
     CommonHeaders: typeof import('./src/components/commonHeaders.vue')['default']
@@ -154,7 +154,7 @@ declare module 'vue' {
     RoleManagement: typeof import('./src/components/powerPredictionComponent/configPage/roleManagement.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
-    Row: typeof import('./src/components/homeComponent/grid/row.vue')['default']
+    Row: typeof import('./src/components/coms/grid/row.vue')['default']
     SBQ: typeof import('./src/components/powerPredictionComponent/configPage/configDesignVue/SBQ.vue')['default']
     ScatterLineChart: typeof import('./src/components/chart/combination/scatter-line-chart.vue')['default']
     SimpleLineChart: typeof import('./src/components/chart/line/simple-line-chart.vue')['default']
@@ -166,7 +166,7 @@ declare module 'vue' {
     StrightLineChart: typeof import('./src/components/chart/line/stright-line-chart.vue')['default']
     SubmitBtn: typeof import('./src/components/generatingCapacityComponent/SubmitBtn.vue')['default']
     SvgDraw: typeof import('./src/components/coms/icon/svg-draw.vue')['default']
-    SvgIcon: typeof import('./src/components/coms/icon/svg-icon.vue')['default']
+    SvgIcon: typeof import('./src/components/powerPredictionComponent/svgIcon/index.vue')['default']
     SvgPageShow: typeof import('./src/components/powerPredictionComponent/powerControlSvg/svgPageShow.vue')['default']
     Tab: typeof import('./src/components/coms/tabs/tab.vue')['default']
     Table: typeof import('./src/components/generatingCapacityComponent/table.vue')['default']

BIN
public/static/optimizationSuggestionsReport.docx


BIN
public/static/~$timizationSuggestionsReport.docx


File diff suppressed because it is too large
+ 1 - 1
src/App.vue


+ 1 - 1
src/assets/css/eleCss/el-tableB.less

@@ -11,7 +11,7 @@
             thead {
                 tr {
                     th {
-                        background: #8F93A7 !important;
+                        // background: #8F93A7 !important;
                         color: #fff;
                     }
                 }

+ 2 - 1
src/assets/css/eleCss/el-treeW.less

@@ -2,7 +2,8 @@
     .el-tree-node {
         // height: 32px;
         line-height: 32px;
-        background: #E6E8F2;
+        // background: #E6E8F2;
+        background: transparent;
 
         .el-tree-node__content {
             height: 32px;

+ 24 - 2
src/components/generatingCapacityComponent/table.vue

@@ -15,7 +15,7 @@
         viewBox="0 -120 1024 1024"
         version="1.1"
         style="cursor: pointer"
-        @click="handleExport"
+        @click="handlefilesExport"
         xmlns="http://www.w3.org/2000/svg"
         p-id="2706"
         width="35"
@@ -110,6 +110,12 @@ export default {
         return "";
       },
     },
+    tableFilePath: {
+      type: String,
+      default: () => {
+        return "";
+      },
+    },
     theme: {
       type: Boolean,
       default: () => {
@@ -164,6 +170,22 @@ export default {
         if (typeof console !== "undefined") console.error(e);
       }
     },
+    handlefilesExport() {
+        ElMessageBox.confirm("确认导出当前节点的所有数据?", "导出", {
+            confirmButtonText: "确认",
+            cancelButtonText: "取消",
+            type: "warning",
+          }).then(() => {
+            const a = document.createElement("a");
+            let childs = [];
+            const url = "/export/files?filename="
+            a.href =
+              process.env.VUE_APP_GENERAT_URL + url + this.tableFilePath;
+            a.download = "";
+            a.target = "_blank";
+            a.click();
+          });
+    },
   },
 
   watch: {
@@ -180,7 +202,7 @@ export default {
     display: flex;
 
     p {
-      width: 20%;
+      width: 5%;
       text-overflow: ellipsis;
       white-space: nowrap;
       overflow: hidden;

+ 4 - 2
src/components/generatingCapacityComponent/tree.vue

@@ -13,7 +13,7 @@
     </div>
     <div class="treeMain">
       <div class="treeMainTit">
-        <span>数据</span>
+        <span>{{showTitle}}</span>
       </div>
       <!-- <div v-for="node in data" :key="node.id" class="treeMainMsg">
                 <span>{{node.label}}</span>
@@ -74,7 +74,7 @@
               {{ node.label }}
             </span>
             <span>{{ node.label }}</span>
-            <template #dropdown>
+            <template #dropdown v-if="node.label.indexOf('风电场') !== -1">
               <el-dropdown-menu>
                 <el-dropdown-item
                   class="text-[#409EFF]"
@@ -179,6 +179,7 @@ export default {
         label: "label",
       },
       activeNode: "",
+      showTitle: "",
       defaultExpandedKeys: [],
     };
   },
@@ -194,6 +195,7 @@ export default {
     },
 
     data(value) {
+        this.showTitle = value.length>0 ? value[0].label : "数据"
       this.defaultExpandedKeys = this.getDefaultExpandedKey([], value);
     },
   },

+ 82 - 30
src/views/generatingCapacity/dataAnalysis/combine/index.vue

@@ -2,7 +2,7 @@
   <div class="dataAnalysisCom" :class="!theme ? 'themeDark' : 'themeLight'">
     <div class="dataAnalysisComMain">
       <div class="main_top">
-        <p class="topPsty">功率曲线拟合分析</p>
+        <p class="topPsty">功率曲线拟合</p>
         <search-cop @submit="funSubmit" :maxProduction="maxProduction"> </search-cop>
       </div>
       <div class="main">
@@ -16,15 +16,17 @@
             @refresh="funGetTree"
           >
           </tree-cop>
-          <tree-cop
-            :dropdownMenu="['export', 'delete', 'save']"
-            :data="processTreeData"
-            :currentNodeKey="currentNodeKey"
-            :height="treeHeight"
-            @currentChange="funProcessCurrentChange"
-            @refresh="funGetProcessTree"
-          >
-          </tree-cop>
+          <div style="padding: 5px 0;border-radius: 5px;" :style="theme === false ? 'background: #181A1E' : 'background: #cdcdde'" >
+            <tree-cop
+                :dropdownMenu="['export', 'delete', 'save']"
+                :data="processTreeData"
+                :currentNodeKey="currentNodeKey"
+                :height="treeHeight"
+                @currentChange="funProcessCurrentChange"
+                @refresh="funGetProcessTree"
+            >
+            </tree-cop>
+          </div>
         </div>
         <div class="excelDataMain">
           <div class="excelDataMain_top">
@@ -103,6 +105,7 @@
                 :height="tableHeight"
                 :tableId="tableShowId"
                 :tableName="tableName"
+                :tableFilePath="tableFilePath"
               >
               </table-cop>
             </el-tab-pane>
@@ -254,7 +257,14 @@ const funExcelChange = async (obj) => {
   activeTab.value = "1";
   isChartArea.value = false;
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+  tableX.forEach(it =>{
+    if (obj.name.indexOf(it) !== -1) {
+        tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+        return
+    }
+  })
+  tableFilePath.value = obj.path;
   excelType.value = obj.type; // 接收excel的type 用于控制右侧tab展示
 
   let res = null;
@@ -308,8 +318,10 @@ const funExcelChange = async (obj) => {
   if (chartResponse && chartResponse.code === 200) {
     chartRes = chartResponse.data;
     markDot.pcl5 = chartRes.obj.pc5ratio;
-    markDot.pcl10 = chartRes.obj.pc10ratio;
-    markDot.pcl12 = chartRes.obj.pc12ratio;
+    markDot.pcl7 = chartRes.obj.pc7ratio;
+    markDot.pcl9 = chartRes.obj.pc9ratio;
+    markDot.pcl11 = chartRes.obj.pc11ratio;
+    markDot.pcl20 = chartRes.obj.pc20ratio;
     markDot.pcl25 = chartRes.obj.pc25ratio;
     avgObj.title = chartRes.obj.path
       .substring(
@@ -559,6 +571,7 @@ const tableShowId = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableName = ref("");
+const tableFilePath = ref("")
 const tableData = ref([]);
 /**table 结束 */
 /**search 开始 */
@@ -601,9 +614,11 @@ const avgObj = reactive({
 const markDot = reactive({
   //3-5 point点等
   pcl5: null,
-  pcl10: null,
-  pcl12: null,
-  pcl25: null,
+  pcl7: null,
+  pcl9: null,
+  pcl11: null,
+  pcl20: null,
+  pcl25: null
 });
 const xAxisData = ref([]);
 const chartRef = ref(); //chart 的ref
@@ -707,11 +722,19 @@ const funChartArea = () => {
               valueIndex: 0,
             },
             {
-              xAxis: 10,
+              xAxis: 7,
               valueIndex: 0,
             },
             {
-              xAxis: 12,
+              xAxis: 9,
+              valueIndex: 0,
+            },
+            {
+              xAxis: 11,
+              valueIndex: 0,
+            },
+            {
+              xAxis: 20,
               valueIndex: 0,
             },
             {
@@ -744,26 +767,44 @@ const funChartArea = () => {
             ],
             [
               {
-                name: `5~10m 偏差率: ${markDot.pcl10}%`,
+                name: `5~7m 偏差率: ${markDot.pcl7}%`,
                 xAxis: 5,
               },
               {
-                xAxis: 10,
+                xAxis: 7,
+              },
+            ],
+            [
+              {
+                name: `7~9m 偏差率: ${markDot.pcl9}%`,
+                xAxis: 7,
+              },
+              {
+                xAxis: 9,
+              },
+            ],
+            [
+              {
+                name: `9~11m 偏差率: ${markDot.pcl11}%`,
+                xAxis: 9,
+              },
+              {
+                xAxis: 11,
               },
             ],
             [
               {
-                name: `10~12m 偏差率: ${markDot.pcl12}%`,
-                xAxis: 10,
+                name: `11~20m 偏差率: ${markDot.pcl20}%`,
+                xAxis: 11,
               },
               {
-                xAxis: 12,
+                xAxis: 20,
               },
             ],
             [
               {
-                name: `12~25m 偏差率: ${markDot.pcl25}%`,
-                xAxis: 12,
+                name: `20~25m 偏差率: ${markDot.pcl25}%`,
+                xAxis: 20,
               },
               {
                 xAxis: 25,
@@ -910,7 +951,14 @@ const initPageData = () => {
     activeTab.value = "1";
     isChartArea.value = false;
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+    tableX.forEach(it =>{
+        if (obj.name.indexOf(it) !== -1) {
+            tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+            return
+        }
+    })
+    tableFilePath.value = obj.path;
     excelType.value = obj.type; // 接收excel的type 用于控制右侧tab展示
 
     let chartRes = {
@@ -934,9 +982,12 @@ const initPageData = () => {
 
     chartRes = jsonData.chartData;
     markDot.pcl5 = chartRes.obj.pc5ratio;
-    markDot.pcl10 = chartRes.obj.pc10ratio;
-    markDot.pcl12 = chartRes.obj.pc12ratio;
+    markDot.pcl7 = chartRes.obj.pc7ratio;
+    markDot.pcl9 = chartRes.obj.pc9ratio;
+    markDot.pcl11 = chartRes.obj.pc11ratio;
+    markDot.pcl20 = chartRes.obj.pc20ratio;
     markDot.pcl25 = chartRes.obj.pc25ratio;
+    
     avgObj.title = chartRes.obj.path
       .substring(
         chartRes.obj.path.indexOf(chartRes.obj.station + "_") +
@@ -1093,7 +1144,8 @@ onMounted(() => {
 
       .treeDataMain {
         margin-right: 10px;
-        padding: 10px 0 10px 10px;
+        // padding: 10px 0 10px 10px;
+        padding: 10px 5px;
         width: calc(19% - 20px);
       }
 
@@ -1139,7 +1191,7 @@ onMounted(() => {
       background: #13171e;
 
       .treeDataMain {
-        background: transparent;
+        background: #142446;
       }
 
       .excelDataMain {

+ 28 - 4
src/views/generatingCapacity/dataAnalysis/hotAnalysis/index.vue

@@ -139,7 +139,8 @@
                     :theme="theme"
                     :height="tableHeight"
                     tableId="1"
-                    tableName="温度与功率分析"
+                    :tableName="tableName"
+                    :tableFilePath="tableFilePath"
                   ></table-cop>
                 </div>
               </el-tabs>
@@ -149,7 +150,7 @@
       </div>
     </div>
     <el-dialog
-      custom-class="windLifeDialog"
+      class="windLifeDialog"
       draggable
       width="80%"
       v-model="dialog"
@@ -158,6 +159,7 @@
       <el-form class="whitespace-nowrap" :inline="true" :model="queryForm">
         <el-form-item label="" class="!mb-0">
           <el-select
+            style="width:110px"
             v-model="queryForm.checkIds"
             clearable
             @clear="checkAll = false"
@@ -315,14 +317,25 @@ const tableDataGet = async () => {
 const excelCheckboxShow = ref(false);
 const excelCheckIds = ref([]);
 const excelList = ref([]);
+const tableName = ref("");
+const tableFilePath = ref("");
 const funExcelChange = async (obj) => {
   //点击excel项时
   /**次代码供温度功率曲线分析使用 */
   excelCheckIds.value = [obj.id]; //当为单选展示风机图表时
+  let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+  tableX.forEach(it =>{
+    if (obj.name.indexOf(it) !== -1) {
+        tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+        return
+    }
+  })
+  tableFilePath.value = obj.path;
+
   chartExcelList.value = excelList.value.map((o) => {
     return {
       ...o,
-      name: o.windturbine,
+      name: o.code,
     };
   }); // 选中excel当前项时, excel列表赋值给dialog 下拉框
   queryForm.checkIds = excelList.value.map((o) => o.id);
@@ -447,6 +460,7 @@ const funCurrentChange = ({ current, currentNode }) => {
     excelList.value = current.childs.map((o) => {
       return {
         id: o.id,
+        code: o.code,
         interval: o.interval,
         path: o.path,
         prepareid: o.prepareid,
@@ -500,6 +514,7 @@ const funProcessCurrentChange = ({ current, currentNode }) => {
     excelList.value = current.childs.map((o) => {
       return {
         id: o.id,
+        code: o.code,
         interval: o.interval,
         path: o.path,
         prepareid: o.prepareid,
@@ -1133,6 +1148,7 @@ const initPageData = () => {
       excelList.value = actTreeNode.value.childs.map((o) => {
         return {
           id: o.id,
+          code: o.code,
           interval: o.interval,
           path: o.path,
           prepareid: o.prepareid,
@@ -1167,10 +1183,18 @@ const initPageData = () => {
     currentNodeKey.value = actTreeNode.value?.id || "";
 
     excelCheckIds.value = [obj.id]; //当为单选展示风机图表时
+    let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+    tableX.forEach(it =>{
+        if (obj.name.indexOf(it) !== -1) {
+            tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+            return
+        }
+    })
+    tableFilePath.value = obj.path;
     chartExcelList.value = excelList.value.map((o) => {
       return {
         ...o,
-        name: o.windturbine,
+        name: o.code,
       };
     }); // 选中excel当前项时, excel列表赋值给dialog 下拉框
     queryForm.checkIds = excelList.value.map((o) => o.id);

+ 4 - 4
src/views/generatingCapacity/dataAnalysis/lineAnalysis/components/current-scatter-chart.vue

@@ -134,14 +134,14 @@ export default {
         //     : "rgba(255,255,255,0.5)",
         //工具箱
         color: [
-          "rgb(255,0,0)",
+          "#ff0000",
           "#FF8700",
-          "#e6b600d9",
-          "#0098d9",
           "#3D54BE",
+          "#32a487",
           "#005eaa",
           "#cda819",
-          "#32a487",
+          "#7500d9",
+          "#6ce600",
         ],
         toolbox: {
           show: false,

+ 5 - 4
src/views/generatingCapacity/dataAnalysis/lineAnalysis/index.vue

@@ -99,14 +99,15 @@
           </bar-chart-cop>
         </div>
         <div v-if="activeTab === '2'">
-          <bar-chart-cop
-            height="600px"
-            :colors="[
+            <!-- :colors="[color: ["#05bb4c", "#C531C7", "#4b55ae", "#fa8c16", "#1DA0D7", "#DD5044"],
               'rgb(222,132,82)',
               'rgb(105,188,80)',
               'rgb(197,78,82)',
               'rgb(129,114,181)',
-            ]"
+            ]" -->
+          <bar-chart-cop
+            height="600px"
+            :colors="['#05bb4c', '#C531C7', '#4b55ae', '#fa8c16', '#1DA0D7', '#DD5044', '#323E6F']"
             width="100%"
             :xAxis="barxAxis"
             :yAxis="baryAxis"

+ 15 - 2
src/views/generatingCapacity/dataAnalysis/windAnalysis/index.vue

@@ -92,7 +92,8 @@ const excelHeight = ref(window.innerHeight - 111 + "px"); //excel高度
 const tableHeight = ref(window.innerHeight - 175 + "px");
 /**table 开始 */
 const tableShowId = ref("");
-const tableName = ref("损失电量分析");
+const tableName = ref("");
+const tableFilePath = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableData = ref([]);
@@ -279,7 +280,9 @@ const excelCheckIds = ref([]);
 const excelList = ref([]);
 const funExcelChange = async (obj) => {
   //点击excel项时
-  return false;
+//   return false;
+tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+tableFilePath.value = obj.path;
 };
 const funExcelCheckChange = ({ checkArr, data }) => {
   //bug
@@ -415,6 +418,16 @@ const initPageData = () => {
       excelList.value = [];
     }
 
+    const child = actTreeNode.value.childs[0];
+    const obj = {
+      path: child.path,
+      name: child.path.substring(
+        child.path.indexOf(child.station + "_") + (child.station + "_").length
+      ),
+    };
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
+
     if (treeCopRef.value) {
       treeCopRef.value.$refs.tree.setCheckedKeys([actTreeNode.value.id]);
       excelCheckIds.value = actTreeNode.value.childs.map((o) => o.id);

+ 6 - 2
src/views/generatingCapacity/dataFilter/prepare/index.vue

@@ -35,6 +35,7 @@
             :height="tableHeight"
             :tableId="tableShowId"
             :tableName="tableName"
+            :tableFilePath="tableFilePath"
             @export="funExport"
           >
           </table-cop>
@@ -78,7 +79,8 @@ const currentNodeKey = ref("");
 const funExcelChange = async (obj) => {
   //点击excel项时
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+  tableFilePath.value = obj.path;
   tableLoading.value = true;
 
   const res = await httpRequest.get("/power/prepare/show", {
@@ -179,6 +181,7 @@ const funCurrentChange = ({ current, currentNode }) => {
 /**table 开始 */
 const tableShowId = ref("");
 const tableName = ref("");
+const tableFilePath = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableData = ref([]);
@@ -264,7 +267,8 @@ const initPageData = () => {
     currentNodeKey.value = actTreeNode.value?.id || "";
 
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
     tableLoading.value = true;
 
     tableColumn.value = jsonData.tableData.title.map((o) => {

+ 20 - 14
src/views/generatingCapacity/dataFilter/process/index.vue

@@ -20,18 +20,20 @@
             @checkChange="funTreeCheckChange"
           >
           </tree-cop>
-          <tree-cop
-            :data="processTreeData"
-            :height="treeHeight"
-            :currentNodeKey="currentNodeKey"
-            @currentChange="
-              (treeItem) => {
-                funProcessCurrentChange(treeItem);
-              }
-            "
-            @refresh="funGetProcessTree"
-          >
-          </tree-cop>
+          <div style="padding: 5px 0;border-radius: 5px;" :style="theme === false ? 'background: #181A1E' : 'background: #cdcdde'" >
+            <tree-cop
+                :data="processTreeData"
+                :height="treeHeight"
+                :currentNodeKey="currentNodeKey"
+                @currentChange="
+                (treeItem) => {
+                    funProcessCurrentChange(treeItem);
+                }
+                "
+                @refresh="funGetProcessTree"
+            >
+            </tree-cop>
+          </div>
         </div>
         <div class="excelDataMain">
           <excel-cop
@@ -55,6 +57,7 @@
             :height="tableHeight"
             :tableId="tableShowId"
             :tableName="tableName"
+            :tableFilePath="tableFilePath"
             @export="funExport"
           >
           </table-cop>
@@ -91,7 +94,8 @@ const maxProduction = ref(2500);
 const funExcelChange = async (obj) => {
   //点击excel项时
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+  tableFilePath.value = obj.path;
   let res = null;
   tableLoading.value = true;
   if (obj.type === "prepare") {
@@ -274,6 +278,7 @@ const tableShowId = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableName = ref("");
+const tableFilePath = ref("")
 const tableData = ref([]);
 const funExport = async () => {
   const a = document.createElement("a");
@@ -368,7 +373,8 @@ const initPageData = () => {
     };
     currentNodeKey.value = actTreeNode.value?.id || "";
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
     let res = null;
     tableLoading.value = true;
     tableColumn.value = jsonData.tableData.title.map((o) => {

+ 43 - 0
src/views/generatingCapacity/yhjyReport/dataJson.json

@@ -5176,6 +5176,49 @@
             "F219": [
                 "性能问题:实际额定功率偏小 。"
             ]
+        },
+        "jxjy": {
+            "F105": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障",
+                "额定功率小于设定值:解决额定功率小于设定值的问题,首先需要检查机组的发电机参数、控制系统设置和电力变换设备,确保其工作状态正常并符合设计要求。其次,优化风机叶片的设计和调整,确保其在不同风速下能够达到最佳发电效率。最后,定期对机组进行性能测试和校准,确保设备能够在各种工况下稳定运行并达到预定的额定功率。"
+            ],
+            "F106": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障",
+                "额定功率小于设定值:解决额定功率小于设定值的问题,首先需要检查机组的发电机参数、控制系统设置和电力变换设备,确保其工作状态正常并符合设计要求。其次,优化风机叶片的设计和调整,确保其在不同风速下能够达到最佳发电效率。最后,定期对机组进行性能测试和校准,确保设备能够在各种工况下稳定运行并达到预定的额定功率。"
+            ],
+            "F107": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障",
+                "额定功率小于设定值:解决额定功率小于设定值的问题,首先需要检查机组的发电机参数、控制系统设置和电力变换设备,确保其工作状态正常并符合设计要求。其次,优化风机叶片的设计和调整,确保其在不同风速下能够达到最佳发电效率。最后,定期对机组进行性能测试和校准,确保设备能够在各种工况下稳定运行并达到预定的额定功率。"
+            ],
+            "F108": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障",
+                "额定功率小于设定值:解决额定功率小于设定值的问题,首先需要检查机组的发电机参数、控制系统设置和电力变换设备,确保其工作状态正常并符合设计要求。其次,优化风机叶片的设计和调整,确保其在不同风速下能够达到最佳发电效率。最后,定期对机组进行性能测试和校准,确保设备能够在各种工况下稳定运行并达到预定的额定功率。"
+            ],
+            "F109": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F110": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F111": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F112": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F101": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F102": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F103": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障"
+            ],
+            "F104": [
+                "轴A温度大于轴B温度15度:变桨桨叶2安全链故障",
+                "额定功率小于设定值:解决额定功率小于设定值的问题,首先需要检查机组的发电机参数、控制系统设置和电力变换设备,确保其工作状态正常并符合设计要求。其次,优化风机叶片的设计和调整,确保其在不同风速下能够达到最佳发电效率。最后,定期对机组进行性能测试和校准,确保设备能够在各种工况下稳定运行并达到预定的额定功率。"
+            ]
         }
     }
 }

+ 58 - 22
src/views/generatingCapacity/yhjyReport/index.vue

@@ -164,7 +164,7 @@
                                 align="center">
                                 <template #default="scope">
                                     <span>
-                                        {{ scope.row[res.code] }}
+                                        {{ scope.row[res.code] ? scope.row[res.code] : '-' }}
                                     </span>
                                 </template>
                             </el-table-column>
@@ -246,11 +246,11 @@
                 display: inline-block;
                 margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
                         <!-- <span>{{idx+1}}</span> -->
-                        <span style="font-weight: bolder;margin-right: 10px;"
-                            :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span>
+                        <!-- <span style="font-weight: bolder;margin-right: 10px;"
+                            :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span> -->
                         <span style="
                 text-align: justify;
-                line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
+                line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item }}</span>
                     </div>
                 </div>
 
@@ -265,9 +265,9 @@
             text-align: justify;
             line-height: 22px;
           ">
-                    {{conclusionMsg.result}}
+                    {{conclusionMsg}}
                 </p>
-                <div style="text-indent: 2em;line-height: 30px;font-size: 15px;"
+                <!-- <div style="text-indent: 2em;line-height: 30px;font-size: 15px;"
                     v-for="(item, idx) in conclusionMsg.resultObj" :key="idx">
                     <span style="background: #fff;
             width: 8px;
@@ -275,15 +275,14 @@
             border-radius: 10px;
             display: inline-block;
             margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
-                    <!-- <span>{{idx+1}}</span> -->
                     <span style="font-weight: bolder;margin-right: 10px;"
                         :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span>
                     <span style="
             text-align: justify;
             line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
-                </div>
+                </div> -->
 
-                <div style="display: flex; margin-top: 15px">
+                <!-- <div style="display: flex; margin-top: 15px">
                     <p style="
             text-indent: 2em;
             font-size: 15px;
@@ -308,7 +307,7 @@
           ">
                         日期:XXX
                     </p>
-                </div>
+                </div> -->
 
             </div>
         </div>
@@ -375,6 +374,9 @@
             /**场站 */
             funGetStation() {
                 let that = this;
+                this.renderReportPage({
+                    data: jsonData.data
+                });
                 apiGetbaseStation().then((res) => {
                     if (res) {
                         that.stationList = res.data;
@@ -417,25 +419,37 @@
                     zzjrl: tempRes.data.stationid.windCapacity,
                     reportTime: tempRes.data.reporttime,
                     fjsxList1: tempRes.data.xnwtls,
-                    fjsxList2: tempRes.data.kkxwtls,
+                    fjsxList2: [],
                     orderResultArr: this.orderResultArr,
                     windSituationReportWord: [],
-                    maintenanceRecommendationsWord: []
+                    maintenanceRecommendationsWord: [],
+                    conclusionResult: `本次分析针对${tempRes.data.stationid.aname}的风机发电能力下降及可靠性隐患进行了全面评估。通过实施短期和长期检修措施,预计将显著提高设备的发电效率和运行可靠性。`
                 }
 
+                tempRes.data.kkxwtls.forEach(it => {
+                    for (const key in it) {
+                        if (Object.prototype.hasOwnProperty.call(it, key)) {
+                            const element = it[key];
+                            if (element === null) {
+                                it[key] = '-'
+                            }
+                        }
+                    }
+                })
+                temWordData.fjsxList2 = tempRes.data.kkxwtls
+
                 //4.风机情况说明
                 let qksmNum = 0
                 for (const key in tempRes.data.qksm) {
                     if (Object.prototype.hasOwnProperty.call(tempRes.data.qksm, key)) {
                         const element = tempRes.data.qksm[key];
                         let eleArr = []
-                        let eleObj = {
-                            name: "",
-                            value: ""
-                        }
+
                         element.forEach(it => {
-                            eleObj.name = it.split(':')[0]
-                            eleObj.value = it.split(':')[1]
+                            let eleObj = {
+                                name: it.substring(0, it.indexOf(':')),
+                                value: it.substring(it.indexOf(':'), it.length)
+                            }
                             eleArr.push(eleObj)
                         })
                         let obj = {
@@ -447,6 +461,28 @@
                     }
                 }
 
+                //5.风机情况说明
+                let jxjyNum = 0
+                for (const key in tempRes.data.jxjy) {
+                    if (Object.prototype.hasOwnProperty.call(tempRes.data.jxjy, key)) {
+                        const element = tempRes.data.jxjy[key];
+                        let eleArr = []
+                        element.forEach(it => {
+                            let eleObj = {
+                                name: it.substring(0, it.indexOf(':')),
+                                value: it.substring(it.indexOf(':'), it.length)
+                            }
+                            eleArr.push(eleObj)
+                        })
+                        let obj = {
+                            index: jxjyNum++,
+                            windName: key,
+                            windValue: eleArr
+                        }
+                        temWordData.maintenanceRecommendationsWord.push(obj)
+                    }
+                }
+
                 // 读取并获得模板文件的二进制内容
                 JSZipUtils.getBinaryContent(
                     `./static/optimizationSuggestionsReport.docx`,
@@ -538,11 +574,11 @@
                 }
                 // 4风机情况说明
                 this.windSituationReport = res.data.qksm
+                // 5检修建议
+                this.maintenanceRecommendations = res.data.jxjy
 
-                // this.maintenanceRecommendations = res.data.maintenanceRecommendations
-                // this.conclusionMsg = res.data.conclusion
-
-                // this.OperationData = res.data;
+                this.conclusionMsg =
+                    `本次分析针对${res.data.stationid.aname}的风机发电能力下降及可靠性隐患进行了全面评估。通过实施短期和长期检修措施,预计将显著提高设备的发电效率和运行可靠性。`
             },
         },
 

+ 195 - 1
src/views/powerPrediction/component/statisticalSummary.json

@@ -199,7 +199,7 @@
         ]
     },
     "annualPowerGenerationReportData": {
-        "list": [
+        "list2": [
             {
                 "dataTime": null,
                 "theoreticalPower": null,
@@ -328,6 +328,200 @@
                 "november": 0.0,
                 "december": 0.0
             }
+        ],
+        "list": [
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 9472.26,
+                "february": 10492.0,
+                "march": 11190.0,
+                "april": 10808.0,
+                "may": 7301.58,
+                "june": 9750.0,
+                "july": 11155.0,
+                "august": 11325.0,
+                "september": 9557.0,
+                "october": 10304.0,
+                "november": 10225.0,
+                "december": 10703.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 11245.374,
+                "february": 8624.14,
+                "march": 13214.845,
+                "april": 12157.593,
+                "may": 13949.593,
+                "june": 11469.241,
+                "july": 8449.203,
+                "august": 11261.299,
+                "september": 14929.166,
+                "october": 12245.856,
+                "november": 2226.602,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 0.0,
+                "november": 0.0,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 0.0,
+                "november": 0.0,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 68.99,
+                "november": 73.71,
+                "december": null
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 75.03,
+                "november": 79.65,
+                "december": null
+            }
         ]
     }
 }

+ 1 - 1
src/views/powerPrediction/powerPredictionPage.vue

@@ -839,7 +839,7 @@
                     timeType: type,
                     // itemVal: this.itemVal,
                     itemVal: 0,
-                    leadTime: 7,
+                    leadTime: 0
                 };
                 apiGetglobalPowerCharts(params).then((datas) => {
                     if (datas && datas.data) {

+ 37 - 6
src/views/powerPrediction/statisticalSummaryPage.vue

@@ -47,11 +47,11 @@
                                 <el-table :data="tableData" border style="width: 100%"
                                     element-loading-background="rgba(0,0,0,.5)"
                                     :header-cell-style="{ 'text-align': 'center' }">
-                                    <el-table-column prop="name" label="月份" align="center" fixed>
+                                    <el-table-column prop="name" label="月份" width="90" align="center" fixed>
                                     </el-table-column>
-                                    <el-table-column prop="statistic" label="合计" align="right" fixed>
+                                    <el-table-column prop="statistic" width="90" label="合计" align="right" fixed>
                                     </el-table-column>
-                                    <el-table-column :prop="item.value" width="73" align="right" :label="item.name"
+                                    <el-table-column :prop="item.value" align="right" :label="item.name"
                                         v-for="(item, index) in tableColumn" :key="index">
                                     </el-table-column>
                                 </el-table>
@@ -99,7 +99,7 @@
             },
         },
         created() {
-            // this.initPageData();
+            this.initPageData();
             // this.getStationData();
             (this.pieColor = [{
                     value: "",
@@ -294,7 +294,7 @@
                     let monthLen = 0;
                     monthLen = new Date().getMonth() + 1;
                     // 表格数据处理
-                    that.getTableData(jsonData.annualPowerGenerationReportData.list);
+                    that.getTableData2(jsonData.annualPowerGenerationReportData.list);
                     // 柱状图数据处理
                     that.getBarData(
                         jsonData.annualPowerGenerationReportData.list,
@@ -406,7 +406,7 @@
                         let monthLen = 0;
                         monthLen = new Date().getMonth() + 1;
                         // 表格数据处理
-                        that.getTableData(datas.data.list);
+                        that.getTableData2(datas.data.list);
                         // 柱状图数据处理
                         that.getBarData(datas.data.list, monthLen);
                         //饼状图数据处理
@@ -509,6 +509,37 @@
                 datas[5].statistic = (num3 / num).toFixed(2) * 100 + "%";
                 this.tableData = datas;
             },
+            getTableData2(datas) {
+                let nameArr = ["计划发电", "实际发电", "当月占比", "全年占比", "短期准确率", "超短准确率"]
+                let monthName = [
+                    "january",
+                    "february",
+                    "march",
+                    "april",
+                    "may",
+                    "june",
+                    "july",
+                    "august",
+                    "september",
+                    "october",
+                    "november",
+                    "december",
+                ];
+                datas.forEach((it, idx) => {
+                    let statisticNum = 0
+                    it.name = nameArr[idx]
+                    monthName.forEach(o => {
+                        if (it[o] !== null) {
+                            it[o] = Number(it[o].toFixed(2))
+                            statisticNum = statisticNum + it[o]
+                        } else {
+                            statisticNum = statisticNum + 0
+                        }
+                    })
+                    it.statistic = statisticNum.toFixed(2)
+                })
+                this.tableData = datas;
+            },
             //处理当年月发电量柱状图数据
             getBarData(datas, val) {
                 let xAxisAll = [