瀏覽代碼

+ 设备告警

chen.cheng 11 月之前
父節點
當前提交
e3c434072a

+ 13 - 0
ems-ui/src/api/alarm/alarm-info.js

@@ -60,3 +60,16 @@ export const fetchAlarmIndexMonth = (params) => {
 export const fetchAlarmIndexYear = (params) => {
   return get('/alarm-info/alarm/type/index/year', params);
 };
+
+export const fetchSubSysIndexDay = (params) => {
+  return get('/alarm-info/subsys/index/day', params);
+};
+
+export const fetchSubSysIndexMonth = (params) => {
+  return get('/alarm-info/subsys/index/month', params);
+};
+
+
+export const fetchSubSysIndexYear = (params) => {
+  return get('/alarm-info/subsys/index/year', params);
+};

+ 2 - 1
ems-ui/src/components/Block/charts/BarChartBlock.vue

@@ -51,6 +51,7 @@ const opts = {
   },
   yAxis: {
     type: 'value',
+    minInterval: 1,
   },
   series: [],
 };
@@ -104,7 +105,7 @@ export default {
         legend.push(item.name);
       });
       option.legend.data = legend;
-      option.xAxis.data = this.optCfg.categories;
+      option.xAxis = this.optCfg.xAxis;
       option && this.refCharts && this.refCharts.setOption(option);
       this.refCharts.resize();
     },

+ 76 - 36
ems-ui/src/views/analysis/device/warn.vue

@@ -52,8 +52,14 @@
                 align="center"
             />
             <el-table-column
+                prop="alarmTime"
+                label="时间"
+                align="center"
+            />
+            <el-table-column
                 label="操作"
                 align="center"
+                width="100"
             >
               <template slot-scope="scope">
                 <el-dropdown @command="(cmd)=>handleCommand(cmd, scope.row)"
@@ -63,7 +69,9 @@
             <i class="el-icon-arrow-down el-icon--right"></i>
           </span>
                   <el-dropdown-menu slot="dropdown">
-                    <el-dropdown-item :command="ALARM_STATE.disposing.code" v-if="scope.row.alarmState === ALARM_STATE.new.value">开始处理</el-dropdown-item>
+                    <el-dropdown-item :command="ALARM_STATE.disposing.code"
+                                      v-if="scope.row.alarmState === ALARM_STATE.new.value">开始处理
+                    </el-dropdown-item>
                     <el-dropdown-item :command="ALARM_STATE.disposed.code">已处理</el-dropdown-item>
                     <el-dropdown-item :command="ALARM_STATE.dissolved.code">已消散</el-dropdown-item>
                   </el-dropdown-menu>
@@ -74,31 +82,15 @@
         </BlockTable>
       </el-col>
       <el-col :span="12">
-        <BlockTable title="告警统计" :table-data="alarmTableData">
-          <template v-slot:columns>
-            <el-table-column
-                type="index"
-                label="序号"
-                align="center"
-            />
-            <el-table-column
-                prop="warnType"
-                label="告警部位"
-                align="center"
-            />
-            <el-table-column
-                prop="warnFacsType"
-                label="告警能源类型"
-                align="center"
-            />
-            <el-table-column
-                prop="date"
-                label="日期"
-                align="center"
+        <BarChartBlock title="告警统计报表" :opt-cfg="subSysIndex">
+          <template v-slot:filters>
+            <SwitchTag
+                :ds="[{val: 'day', text: '按日'},{val: 'month', text: '按月'},{val: 'year', text: '按年'}]"
+                :defTag="dateType"
+                :tagClick="onSubSysDateTypeSwitch"
             />
-
           </template>
-        </BlockTable>
+        </BarChartBlock>
       </el-col>
     </el-row>
   </div>
@@ -107,7 +99,8 @@
 <script>
 
 import {
-  fetchAlarmIndexDay, fetchAlarmIndexMonth, fetchAlarmIndexYear, listAlarmInfo, updateAlarmInfo,
+  fetchAlarmIndexDay, fetchAlarmIndexMonth, fetchAlarmIndexYear, fetchSubSysIndexDay, fetchSubSysIndexMonth,
+  fetchSubSysIndexYear, listAlarmInfo, updateAlarmInfo,
 } from '@/api/alarm/alarm-info';
 import { ApiCode } from '@/api/apiEmums';
 import Block from '@/components/Block/block.vue';
@@ -151,18 +144,15 @@ export default {
         },
         series: [],
       },
-      alarmTableData: [
-        {
-          warnType: '研发部照明',
-          warnFacsType: '电',
-          date: '2024年6月1日 12:00:00',
-        },
-        {
-          warnType: '研发部照明',
-          warnFacsType: '电',
-          date: '2024年6月1日 12:00:00',
+      subSysIndex: {
+        unit: '  ',
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: [],
         },
-      ],
+        series: [],
+      },
       realTimeTableData: [],
     };
   },
@@ -217,6 +207,35 @@ export default {
       this.devcWarningHis.xAxis.data = xaxis;
       this.devcWarningHis.series = series;
     },
+    async onSubSysDateTypeSwitch(item) {
+      if (!this.selectedServiceArea) {
+        return;
+      }
+      if (item.val === 'day') {
+        const xaxis = DateTool.getTime(60);
+        const { data } = await fetchSubSysIndexDay({
+          areaCode: this.selectedServiceArea.val,
+        });
+        const series = this.subSysIndexToSeries(data, xaxis);
+        this.subSysIndex.xAxis.data = xaxis;
+        this.subSysIndex.series = series;
+        return;
+      }
+      if (item.val === 'month') {
+        const xaxis = DateTool.getDayOfRange(
+            dayjs().subtract(1, 'month'), dayjs(), DateTool.DateFormat.YYYY_MM_DD);
+        const { data } = await fetchSubSysIndexMonth({ areaCode: this.selectedServiceArea.val });
+        const series = this.subSysIndexToSeries(data, xaxis);
+        this.subSysIndex.xAxis.data = xaxis;
+        this.subSysIndex.series = series;
+        return;
+      }
+      const xaxis = DateTool.getMonthsOfYearAgo();
+      const { data } = await fetchSubSysIndexYear({ areaCode: this.selectedServiceArea.val });
+      const series = this.subSysIndexToSeries(data, xaxis);
+      this.subSysIndex.xAxis.data = xaxis;
+      this.subSysIndex.series = series;
+    },
     toSeries(data, xaxis) {
       const dayGroup = _.groupBy(data, 'alarmType');
       const series = [];
@@ -237,6 +256,26 @@ export default {
       });
       return series;
     },
+
+    subSysIndexToSeries(data, xaxis) {
+      const dayGroup = _.groupBy(data, 'systemCode');
+      const series = [];
+      Object.keys(dayGroup).forEach((subSysCode) => {
+        let ds = {};
+        let systemName = dayGroup[subSysCode][0].systemName;
+        dayGroup[subSysCode].forEach(item => {
+          ds[item.dateIndex] = item.cnt;
+        });
+        let seriesData = [];
+        xaxis.forEach((item) => seriesData.push(ds[item] || 0));
+        series.push({
+          name: systemName,
+          type: 'bar',
+          data: seriesData,
+        });
+      });
+      return series;
+    },
     async initData() {
       const {
         rows,
@@ -259,6 +298,7 @@ export default {
     },
     queryCharts() {
       this.onDateTypeSwitch(this.dateType);
+      this.onSubSysDateTypeSwitch(this.dateType);
       this.getRealTimeAlarm();
     },
     async getRealTimeAlarm() {