From da21fe61c8d8d22ca1b6244b233fbce9e2dc5814 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期五, 27 十月 2023 09:16:35 +0800
Subject: [PATCH] 统计页面

---
 src/api/smoke/alarm.js                                 |    4 
 src/views/smoke/report/components/alarm.vue            |   13 +
 src/views/smoke/report/components/overallSituation.vue |  337 +++++++++++++++++++++++++
 src/views/smoke/report/components/reduceEmissions.vue  |   13 +
 src/views/smoke/report/index.vue                       |   44 ++
 src/views/smoke/alarm/index.vue                        |   50 +--
 src/views/smoke/report/components/header/header2.vue   |  155 +++++++++++
 src/views/smoke/report/components/header/header1.vue   |  126 +++++++++
 src/views/smoke/report/components/maintenance.vue      |   13 +
 9 files changed, 718 insertions(+), 37 deletions(-)

diff --git a/src/api/smoke/alarm.js b/src/api/smoke/alarm.js
index ff90753..d385f48 100644
--- a/src/api/smoke/alarm.js
+++ b/src/api/smoke/alarm.js
@@ -3,10 +3,10 @@
 export default {
     // 鏌ヨ瀹炴椂鏁版嵁
     findAlarmList: (params) => {
-        return http.get('/sccg/smoke/Alarm/list', params);
+        return http.get('/sccg/smoke/alarm/list', params);
     },
     // 瀵煎嚭瀹炴椂鏁版嵁
     exportAlarm: (params) => {
-        return http.downloadFile('/sccg/smoke/Alarm/export', params);
+        return http.downloadFile('/sccg/smoke/alarm/export', params);
     },
 }
\ No newline at end of file
diff --git a/src/views/smoke/alarm/index.vue b/src/views/smoke/alarm/index.vue
index dc098df..45ec584 100644
--- a/src/views/smoke/alarm/index.vue
+++ b/src/views/smoke/alarm/index.vue
@@ -15,16 +15,20 @@
         :data="tableData"
         :row-class-name="tableRowClassName"
       >
-        <el-table-column label="搴忓彿" type="index" width="60px">
+        <el-table-column label="搴忓彿" type="index" min-width="2">
         </el-table-column>
-        <el-table-column prop="AcquitAtStr" label="鏃堕棿" width="120px">
+        <el-table-column prop="MN" label="璁惧缂栫爜" min-width="2">
         </el-table-column>
-        <el-table-column prop="MsgTypeStr" label="娑堟伅绫诲瀷" width="180px">
+        <el-table-column prop="AcquitAtStr" label="鏃堕棿" min-width="3">
         </el-table-column>
-        <el-table-column prop="Content" label="娑堟伅鍐呭" width="100px">
+        <el-table-column prop="MsgTypeStr" label="娑堟伅绫诲瀷" min-width="2">
+        </el-table-column>
+        <!-- <el-table-column prop="Addr" label="鍦板潃" min-width="4">
+        </el-table-column> -->
+        <el-table-column prop="Content" label="娑堟伅鍐呭" min-width="8">
         </el-table-column>
 
-        <el-table-column prop="operation" label="鎿嶄綔" width="550px">
+        <el-table-column prop="operation" label="鎿嶄綔" min-width="3">
           <template slot-scope="scope">
             <div class="operation">
               <span @click="handleUpload(scope.row)">涓婃姤</span>
@@ -67,6 +71,7 @@
       totalNum: 0,
       pageSize: 10,
       currentPage: 1,
+      params: {},
     };
   },
   components: { MyHeader },
@@ -75,28 +80,24 @@
   },
   methods: {
     getAlarmList(seachData) {
-      let params;
       if (seachData) {
-        params = this.getParam(seachData);
+        this.params = this.getParam(seachData);
       } else {
-        params = {
+        this.params = {
           pageNum: this.currentPage,
           pageSize: this.pageSize,
         };
       }
 
       realTimeApi
-        .findAlarmList(params)
+        .findAlarmList(this.params)
         .then(({ list, total }) => {
           list.forEach((e) => {
             e.AcquitAtStr = this.dateFormat(
               "YYYY-mm-dd HH:MM",
               new Date(e.AcquitAt)
             );
-            e.FanStatusStr = this.FanStatusStr(e.FanStatus);
-            e.FilterStatusStr = this.FanStatusStr(e.FilterStatus);
-            e.OnlineStatusStr = this.OnlineStatusStr(e.OnlineStatus);
-            e.StatusStr = this.StatusStr(e.Status);
+            e.MsgTypeStr = this.MsgTypeStr(e.MsgType);
           });
           this.tableData = list;
           this.totalNum = total;
@@ -117,13 +118,13 @@
             type: "application/vnd.ms-excel;charset=utf-8",
           });
           if (window.navigator.msSaveBlob) {
-            window.navigator.msSaveBlob(blob, deathdate + "瀹炴椂鏁版嵁" + ".xls");
+            window.navigator.msSaveBlob(blob, deathdate + "鎶ヨ淇℃伅" + ".xls");
           } else {
             const url = window.URL.createObjectURL(blob);
             const link = document.createElement("a");
             link.style.display = "none";
             link.href = url;
-            link.download = deathdate + "瀹炴椂鏁版嵁" + ".xls";
+            link.download = deathdate + "鎶ヨ淇℃伅" + ".xls";
             document.body.appendChild(link);
             link.click();
             document.body.removeChild(link);
@@ -135,15 +136,10 @@
     getParam(seachData) {
       let params;
       if (seachData) {
-        const seachParams = seachData.seachData;
+        const seachParams = seachData.seachData || seachData;
         params = {
-          owner: seachParams.owner == undefined ? null : seachParams.owner,
-          onlineStatus:
-            seachParams.onlineStatus == undefined
-              ? null
-              : seachParams.onlineStatus,
-          status: seachParams.status == undefined ? null : seachParams.status,
-          type: seachParams.type == undefined ? null : seachParams.type,
+          msgType:
+            seachParams.msgType == undefined ? null : seachParams.msgType,
           startTime:
             seachParams.alarmTime == undefined
               ? null
@@ -159,6 +155,8 @@
                   seachParams.alarmTime[1]
                 ),
         };
+        params.pageNum = this.currentPage;
+        params.pageSize = this.pageSize;
       }
       return params;
     },
@@ -184,17 +182,17 @@
     // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
     changeCurrentPage(page) {
       this.currentPage = page;
-      this.getRealTimeList();
+      this.getAlarmList(this.params);
     },
     // 涓婁竴椤电偣鍑讳簨浠�
     handlePrev(page) {
       this.currentPage = page;
-      this.getRealTimeList();
+      this.getAlarmList(this.params);
     },
     // 涓嬩竴椤电偣鍑讳簨浠�
     handleNext(page) {
       this.currentPage = page;
-      this.getRealTimeList();
+      this.getAlarmList(this.params);
     },
     dateFormat(fmt, date) {
       let ret;
diff --git a/src/views/smoke/report/components/alarm.vue b/src/views/smoke/report/components/alarm.vue
new file mode 100644
index 0000000..17bcab3
--- /dev/null
+++ b/src/views/smoke/report/components/alarm.vue
@@ -0,0 +1,13 @@
+<template>
+  
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/smoke/report/components/header/header1.vue b/src/views/smoke/report/components/header/header1.vue
new file mode 100644
index 0000000..d5f49f7
--- /dev/null
+++ b/src/views/smoke/report/components/header/header1.vue
@@ -0,0 +1,126 @@
+<template>
+  <div class="header">
+    <el-form :inline="true" :model="seachData" class="demo-form-inline">
+      <el-form-item label="">
+        <el-select
+          style="width: 140px"
+          v-model="seachData.ownerIndex"
+          placeholder="鎵�灞炲崟浣�"
+        >
+          <el-option
+            v-for="(item, index) in ownerOptions"
+            :key="item.Id"
+            :label="item.Name"
+            :value="index"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="">
+        <el-date-picker
+          v-model="seachData.alarmTime"
+          type="daterange"
+          align="right"
+          unlink-panels
+          range-separator="鑷�"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+          :picker-options="pickerOptions"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getList">鍒锋柊</el-button>
+        <el-button type="primary" @click="resetAll">閲嶇疆</el-button>
+
+        <el-button type="primary" @click="exportTableData">瀵煎嚭</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import realTimeApi from "@/api/smoke/realTime";
+
+export default {
+  data() {
+    return {
+      ownerOptions: [],
+      seachData: {},
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "鏈�杩戜竴鍛�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜竴涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜笁涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+    };
+  },
+  created() {},
+  mounted() {
+    this.getOwnerOptions();
+  },
+  methods: {
+    // 鑾峰彇鎵�灞炲崟浣�
+    getOwnerOptions() {
+      const param = { pageSize: 100, pageNum: 1 };
+      realTimeApi
+        .findCustomerList(param)
+        .then((res) => {
+          this.ownerOptions = res.list;
+        })
+        .catch((err) => this.$message.error(err));
+    },
+
+    resetAll() {
+      this.seachData = {};
+      this.$emit("getList", { seachData: this.seachData });
+    },
+    getList() {
+      if (this.seachData.ownerIndex !== undefined) {
+        const ownerItem = this.ownerOptions[this.seachData.ownerIndex];
+        this.seachData.owner = ownerItem.Pid + ownerItem.Id + "/";
+      }
+      this.$emit("getList", { seachData: this.seachData });
+    },
+    exportTableData() {
+      if (this.seachData.ownerIndex !== undefined) {
+        const ownerItem = this.ownerOptions[this.seachData.ownerIndex];
+        this.seachData.owner = ownerItem.Pid + ownerItem.Id + "/";
+      }
+      this.$emit("exportTable", { seachData: this.seachData });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.header {
+  line-height: normal;
+}
+</style>
diff --git a/src/views/smoke/report/components/header/header2.vue b/src/views/smoke/report/components/header/header2.vue
new file mode 100644
index 0000000..9cde2a1
--- /dev/null
+++ b/src/views/smoke/report/components/header/header2.vue
@@ -0,0 +1,155 @@
+<template>
+  <div class="header">
+    <el-form :inline="true" :model="seachData" class="demo-form-inline">
+      <el-form-item label="">
+        <el-input v-model="seachData.code" placeholder="缂栫爜"></el-input>
+      </el-form-item>
+      <el-form-item label="">
+        <el-select
+          style="width: 140px"
+          v-model="seachData.ownerIndex"
+          placeholder="鎵�灞炲崟浣�"
+        >
+          <el-option
+            v-for="(item, index) in ownerOptions"
+            :key="item.Id"
+            :label="item.Name"
+            :value="index"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="">
+        <el-select
+          style="width: 120px"
+          v-model="seachData.codeColor"
+          placeholder="娌圭儫鍋ュ悍鐮�"
+        >
+          <el-option
+            v-for="item in codeColorOptions"
+            :key="item.label"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="">
+        <el-date-picker
+          v-model="seachData.alarmTime"
+          type="daterange"
+          align="right"
+          unlink-panels
+          range-separator="鑷�"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+          :picker-options="pickerOptions"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getList">鍒锋柊</el-button>
+        <el-button type="primary" @click="resetAll">閲嶇疆</el-button>
+
+        <el-button type="primary" @click="exportTableData">瀵煎嚭</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import realTimeApi from "@/api/smoke/realTime";
+
+export default {
+  data() {
+    return {
+      codeColorOptions: [
+        {
+          label: "绾功",
+          value: "Red",
+        },
+        {
+          label: "缁胯壊",
+          value: "Green",
+        },
+      ],
+
+      ownerOptions: [],
+      seachData: {},
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "鏈�杩戜竴鍛�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜竴涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜笁涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+    };
+  },
+  created() {},
+  mounted() {
+    this.getOwnerOptions();
+  },
+  methods: {
+    // 鑾峰彇鎵�灞炲崟浣�
+    getOwnerOptions() {
+      const param = { pageSize: 100, pageNum: 1 };
+      realTimeApi
+        .findCustomerList(param)
+        .then((res) => {
+          this.ownerOptions = res.list;
+        })
+        .catch((err) => this.$message.error(err));
+    },
+
+    resetAll() {
+      this.seachData = {};
+      this.$emit("getList", { seachData: this.seachData });
+    },
+    getList() {
+      if (this.seachData.ownerIndex !== undefined) {
+        const ownerItem = this.ownerOptions[this.seachData.ownerIndex];
+        this.seachData.owner = ownerItem.Pid + ownerItem.Id + "/";
+      }
+      this.$emit("getList", { seachData: this.seachData });
+    },
+    exportTableData() {
+      if (this.seachData.ownerIndex !== undefined) {
+        const ownerItem = this.ownerOptions[this.seachData.ownerIndex];
+        this.seachData.owner = ownerItem.Pid + ownerItem.Id + "/";
+      }
+      this.$emit("exportTable", { seachData: this.seachData });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.header {
+  line-height: normal;
+}
+</style>
diff --git a/src/views/smoke/report/components/maintenance.vue b/src/views/smoke/report/components/maintenance.vue
new file mode 100644
index 0000000..17bcab3
--- /dev/null
+++ b/src/views/smoke/report/components/maintenance.vue
@@ -0,0 +1,13 @@
+<template>
+  
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/smoke/report/components/overallSituation.vue b/src/views/smoke/report/components/overallSituation.vue
new file mode 100644
index 0000000..b7ce7bf
--- /dev/null
+++ b/src/views/smoke/report/components/overallSituation.vue
@@ -0,0 +1,337 @@
+<template>
+    <div>
+        <MyHeader
+            @getList="getRealTimeList"
+            @exportTable="exportInTime"
+        ></MyHeader>
+        <!-- 鏁版嵁灞曠ず -->
+        <div style="width: 100%; overflow-x: scroll">
+            <el-table
+                border
+                stripe
+                ref="multipleTable"
+                :header-cell-style="{
+                    background: '#F5F5F5',
+                    'font-weight': '650',
+                    'line-height': '45px'
+                }"
+                :data="tableData"
+                :row-class-name="tableRowClassName"
+            >
+                <el-table-column label="搴忓彿" type="index" width="60px">
+                </el-table-column>
+                <el-table-column prop="Locale" label="鐩戞祴鐐�" width="120px">
+                </el-table-column>
+                <el-table-column prop="Addr" label="瀹夎鍦板潃" width="180px">
+                </el-table-column>
+                <el-table-column
+                    prop="AcquitAtStr"
+                    label="閲囬泦鏃堕棿"
+                    width="100px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="FanStatusStr"
+                    label="椋庢満鐘舵��"
+                    width="80px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="FilterStatusStr"
+                    label="鍑�鍖栧櫒鐘舵��"
+                    width="95px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="EmissionsConc"
+                    label="娌圭儫瀹炴椂娴撳害锛坢g/m3锛�"
+                    width="110px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="CEmissions"
+                    label="娌圭儫鎶樼畻娴撳害锛坢g/m3锛�"
+                    width="110px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="GranuleConc"
+                    label="棰楃矑鐗╁疄鏃舵祿搴︼紙mg/m3锛�"
+                    width="120px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="CGranule"
+                    label="棰楃矑鐗╂姌绠楁祿搴︼紙mg/m3锛�"
+                    width="120px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="HydrocarbonConc"
+                    label="闈炵敳鐑锋�荤儍瀹炴椂娴撳害锛坢g/m3锛�"
+                    width="160px"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="CHydrocarbon"
+                    label="闈炵敳鐑锋�荤儍鎶樼畻娴撳害锛坢g/m3锛�"
+                    width="160px"
+                >
+                </el-table-column>
+                <el-table-column prop="StatusStr" label="鎺掓斁鐘舵��" width="80px">
+                </el-table-column>
+                <el-table-column
+                    prop="OnlineStatusStr"
+                    label="鏁翠綋鐘舵��"
+                    width="80px"
+                >
+                </el-table-column>
+                <el-table-column prop="operation" label="鎿嶄綔" width="550px">
+                    <template slot-scope="scope">
+                        <div class="operation">
+                            <span @click="handleUpload(scope.row)"
+                                >涓�鐐逛竴妗�</span
+                            >
+                            <span class="line">|</span>
+                            <span @click="handleDispatch(scope.row)"
+                                >鏌ョ湅姣忓垎閽熸暟鎹�</span
+                            >
+                            <span class="line">|</span>
+                            <span @click="handleLearn(scope.row)"
+                                >鏌ョ湅10min娴撳害</span
+                            >
+                            <span class="line">|</span>
+                            <span @click="handleNotDeal(scope.row)"
+                                >鏌ョ湅灏忔椂鎶樼畻娴撳害</span
+                            >
+                            <span class="line">|</span>
+                            <span @click="handleNotDeal(scope.row)"
+                                >鐩戞祴鐐硅澶囩鐞�</span
+                            >
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div class="tools">
+            <div class="pagination">
+                <el-pagination
+                    background
+                    @prev-click="handlePrev"
+                    @next-click="handleNext"
+                    :current-page="currentPage"
+                    layout="prev, pager, next"
+                    :total="totalNum"
+                    :page-size="pageSize"
+                    @current-change="changeCurrentPage"
+                >
+                </el-pagination>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import MyHeader from "./header/header1.vue";
+import realTimeApi from "@/api/smoke/realTime";
+export default {
+    data() {
+        return {
+            tableData: [],
+            totalNum: 0,
+            pageSize: 10,
+            currentPage: 1,
+        };
+    },
+    components: { MyHeader },
+    created() {
+        this.getRealTimeList();
+    },
+    methods: {
+        getRealTimeList(seachData) {
+            let params;
+            if (seachData) {
+                params = this.getParam(seachData)
+            } else {
+                params = {
+                    pageNum: this.currentPage,
+                    pageSize: this.pageSize,
+                };
+            }
+
+            realTimeApi
+                .findInTimeList(params)
+                .then(({ list, total }) => {
+                    list.forEach(e => {
+                        e.AcquitAtStr = this.dateFormat("YYYY-mm-dd HH:MM", new Date(e.AcquitAt));
+                        e.FanStatusStr = this.FanStatusStr(e.FanStatus)
+                        e.FilterStatusStr = this.FanStatusStr(e.FilterStatus)
+                        e.OnlineStatusStr = this.OnlineStatusStr(e.OnlineStatus)
+                        e.StatusStr = this.StatusStr(e.Status)
+                    });
+                    this.tableData = list;
+                    this.totalNum = total;
+                })
+                .catch((err) => this.$message.error(err));
+        },
+        exportInTime(seachData) {
+            let params;
+            if (seachData) {
+                params = this.getParam(seachData)
+            }
+            realTimeApi
+                .exportInTime(params)
+                .then((res) => {
+                  debugger
+                    let time = new Date();
+                    let deathdate = time.toLocaleDateString();
+                    const blob = new Blob([res.data], {
+                        type: "application/vnd.ms-excel;charset=utf-8",
+                    });
+                    if (window.navigator.msSaveBlob) {
+                        window.navigator.msSaveBlob(
+                            blob,
+                            deathdate + "瀹炴椂鏁版嵁" + ".xls"
+                        );
+                    } else {
+                        const url = window.URL.createObjectURL(blob);
+                        const link = document.createElement("a");
+                        link.style.display = "none";
+                        link.href = url;
+                        link.download = deathdate + "瀹炴椂鏁版嵁" + ".xls";
+                        document.body.appendChild(link);
+                        link.click();
+                        document.body.removeChild(link);
+                    }
+                    this.$message.success("鎿嶄綔鎴愬姛");
+                })
+                .catch((err) => this.$message.error(err));
+        },
+        getParam(seachData) {
+            let params;
+            if (seachData) {
+                const seachParams = seachData.seachData
+                params = {
+                    owner:
+                        seachParams.owner == undefined
+                            ? null
+                            : seachParams.owner,
+                    onlineStatus:
+                        seachParams.onlineStatus == undefined
+                            ? null
+                            : seachParams.onlineStatus,
+                    status: seachParams.status == undefined
+                        ? null
+                        : seachParams.status,
+                    type:
+                        seachParams.type == undefined
+                            ? null
+                            : seachParams.type,
+                    startTime:
+                        seachParams.alarmTime == undefined
+                            ? null
+                            : this.dateFormat("YYYY-mm-dd HH:MM:SS", seachParams.alarmTime[0]),
+                    endTime:
+                        seachParams.alarmTime == undefined
+                            ? null
+                            : this.dateFormat("YYYY-mm-dd HH:MM:SS", seachParams.alarmTime[1]),
+                };
+            }
+            return params;
+        },
+
+        FanStatusStr(FanStatus) {
+            switch (FanStatus) {
+                case 1:
+                    return "寮�"
+                case 2:
+                    return "鍏�"
+                default:
+                    return "寮傚父"
+            }
+        },
+        OnlineStatusStr(Status) {
+            switch (Status) {
+                case 1:
+                    return "鍦ㄧ嚎"
+                case 2:
+                    return "绂荤嚎"
+                default:
+                    return "寮傚父绂荤嚎"
+            }
+        },
+        StatusStr(Status) {
+            switch (Status) {
+                case "NORMAL":
+                    return "姝e父"
+                case "ALARM":
+                    return "棰勮"
+                case "EXCESS":
+                    return "瓒呮爣"
+                case "DOWN":
+                    return "绂荤嚎"
+                default:
+                    return "寮傚父绂荤嚎"
+            }
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 === 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+        },
+        // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        changeCurrentPage(page) {
+            this.currentPage = page;
+            this.getRealTimeList();
+        },
+        // 涓婁竴椤电偣鍑讳簨浠�
+        handlePrev(page) {
+            this.currentPage = page;
+            this.getRealTimeList();
+        },
+        // 涓嬩竴椤电偣鍑讳簨浠�
+        handleNext(page) {
+            this.currentPage = page;
+            this.getRealTimeList();
+        },
+        dateFormat(fmt, date) {
+            let ret;
+            const opt = {
+                "Y+": date.getFullYear().toString(),        // 骞�
+                "m+": (date.getMonth() + 1).toString(),     // 鏈�
+                "d+": date.getDate().toString(),            // 鏃�
+                "H+": date.getHours().toString(),           // 鏃�
+                "M+": date.getMinutes().toString(),         // 鍒�
+                "S+": date.getSeconds().toString()          // 绉�
+                // 鏈夊叾浠栨牸寮忓寲瀛楃闇�姹傚彲浠ョ户缁坊鍔狅紝蹇呴』杞寲鎴愬瓧绗︿覆
+            };
+            for (let k in opt) {
+                ret = new RegExp("(" + k + ")").exec(fmt);
+                if (ret) {
+                    fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
+                };
+            };
+            return fmt;
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.el-table {
+    .operation {
+        display: flex;
+        color: var(--operation-color);
+        .line {
+            padding: 0 5px;
+        }
+
+        span:hover {
+            cursor: pointer;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/smoke/report/components/reduceEmissions.vue b/src/views/smoke/report/components/reduceEmissions.vue
new file mode 100644
index 0000000..17bcab3
--- /dev/null
+++ b/src/views/smoke/report/components/reduceEmissions.vue
@@ -0,0 +1,13 @@
+<template>
+  
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/smoke/report/index.vue b/src/views/smoke/report/index.vue
index ddfb58b..a1b73ba 100644
--- a/src/views/smoke/report/index.vue
+++ b/src/views/smoke/report/index.vue
@@ -1,13 +1,39 @@
 <template>
-  <div>缁熻鎶ヨ〃</div>
+  <el-tabs
+    style="line-height: normal"
+    v-model="activeName"
+    @tab-click="handleClick"
+  >
+    <el-tab-pane label="妫�娴嬩华鎬讳綋鎯呭喌鎶ヨ〃" name="first">
+      <OverallSituation
+    /></el-tab-pane>
+    <el-tab-pane label="娌圭儫鍑忔帓缁熻" name="second">
+      <ReduceEmissions />
+    </el-tab-pane>
+    <el-tab-pane label="鐩戞祴鎶ヨ缁熻" name="third">
+      <Alarm />
+    </el-tab-pane>
+    <el-tab-pane label="杩愮淮鎯呭喌鎶ヨ〃" name="fourth">
+      <Maintenance />
+    </el-tab-pane>
+  </el-tabs>
 </template>
-
 <script>
+import OverallSituation from "./components/overallSituation.vue";
+import ReduceEmissions from "./components/reduceEmissions.vue";
+import Alarm from "./components/alarm.vue";
+import Maintenance from "./components/maintenance.vue";
 export default {
-
-}
-</script>
-
-<style>
-
-</style>
\ No newline at end of file
+  data() {
+    return {
+      activeName: "first",
+    };
+  },
+  components: { OverallSituation, ReduceEmissions, Alarm, Maintenance },
+  methods: {
+    handleClick(tab, event) {
+      console.log(tab, event);
+    },
+  },
+};
+</script>
\ No newline at end of file

--
Gitblit v1.8.0