From a1fb7d5473505c08cd0a20f68d3007c6efd383ff Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期五, 10 十一月 2023 13:40:46 +0800
Subject: [PATCH] 油烟

---
 src/views/smoke/report/components/alarm.vue            |  270 ++++++++++++
 src/views/smoke/report/components/overallSituation.vue |   85 ---
 src/views/smoke/realTime/components/header/index.vue   |  356 ++++++++--------
 src/views/smoke/report/components/reduceEmissions.vue  |  273 ++++++++++++
 src/views/smoke/report/components/header/header2.vue   |    7 
 src/views/smoke/report/components/header/header1.vue   |    1 
 src/views/smoke/report/components/maintenance.vue      |  310 +++++++++++++
 7 files changed, 1,037 insertions(+), 265 deletions(-)

diff --git a/src/views/smoke/realTime/components/header/index.vue b/src/views/smoke/realTime/components/header/index.vue
index cac24b3..47d5873 100644
--- a/src/views/smoke/realTime/components/header/index.vue
+++ b/src/views/smoke/realTime/components/header/index.vue
@@ -1,199 +1,197 @@
 <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-select
-                    style="width: 120px"
-                    v-model="seachData.status"
-                    placeholder="鎺掓斁鐘舵��"
-                >
-                    <el-option
-                        v-for="item in statusOptions"
-                        :key="item.label"
-                        :label="item.label"
-                        :value="item.value"
-                    >
-                    </el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="">
-                <el-select
-                    style="width: 120px"
-                    v-model="seachData.onlineStatus"
-                    placeholder="鏁翠綋鐘舵��"
-                >
-                    <el-option
-                        v-for="item in onlineStatusOptions"
-                        :key="item.label"
-                        :label="item.label"
-                        :value="item.value"
-                    >
-                    </el-option>
-                </el-select>
-            </el-form-item>
+  <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-select
+          style="width: 120px"
+          v-model="seachData.status"
+          placeholder="鎺掓斁鐘舵��"
+        >
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.label"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="">
+        <el-select
+          style="width: 120px"
+          v-model="seachData.onlineStatus"
+          placeholder="鏁翠綋鐘舵��"
+        >
+          <el-option
+            v-for="item in onlineStatusOptions"
+            :key="item.label"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
 
-            <el-form-item>
-                <el-radio v-model="seachData.type" label="1">鐩戞帶璁惧</el-radio>
-                <el-radio v-model="seachData.type" label="2">鐩戞祴璁惧</el-radio>
-            </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-form-item>
+        <el-radio v-model="seachData.type" label="1">鐩戞帶璁惧</el-radio>
+        <el-radio v-model="seachData.type" label="2">鐩戞祴璁惧</el-radio>
+      </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>
+        <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 {
-            onlineStatusOptions: [
-                {
-                    label: "姝e父",
-                    value: 1,
-                },
-                {
-                    label: "绂荤嚎",
-                    value: 2,
-                },
-                {
-                    label: "寮傚父绂荤嚎",
-                    value: 3,
-                },
-            ],
-            statusOptions: [
-                {
-                    label: "姝e父",
-                    value: "NORMAL",
-                },
-                {
-                    label: "棰勮",
-                    value: "ALARM",
-                },
-                {
-                    label: "瓒呮爣",
-                    value: "EXCESS",
-                },
-                {
-                    label: "绂荤嚎",
-                    value: "DOWN",
-                },
-                {
-                    label: "寮傚父绂荤嚎",
-                    value: "OFF",
-                },
-            ],
-            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]);
-                        },
-                    },
-                ],
+  data() {
+    return {
+      onlineStatusOptions: [
+        {
+          label: "姝e父",
+          value: 1,
+        },
+        {
+          label: "绂荤嚎",
+          value: 2,
+        },
+        {
+          label: "寮傚父绂荤嚎",
+          value: 3,
+        },
+      ],
+      statusOptions: [
+        {
+          label: "姝e父",
+          value: "NORMAL",
+        },
+        {
+          label: "棰勮",
+          value: "ALARM",
+        },
+        {
+          label: "瓒呮爣",
+          value: "EXCESS",
+        },
+        {
+          label: "绂荤嚎",
+          value: "DOWN",
+        },
+        {
+          label: "寮傚父绂荤嚎",
+          value: "OFF",
+        },
+      ],
+      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));
     },
-    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 });
-        }
+    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;
+  line-height: normal;
+  margin-left: 20px;
 }
 </style>
diff --git a/src/views/smoke/report/components/alarm.vue b/src/views/smoke/report/components/alarm.vue
index 17bcab3..3d8eb85 100644
--- a/src/views/smoke/report/components/alarm.vue
+++ b/src/views/smoke/report/components/alarm.vue
@@ -1,13 +1,277 @@
 <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="80">
+        </el-table-column>
+        <el-table-column
+          prop="AcquitAtStr"
+          label="鐩戞祴鐐�"          
+          min-width="20%"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="Addr"
+          label="瓒呮爣澶╂暟"          
+          min-width="10%"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="FanStatusStr"
+          label="鍑�鍖栧櫒涓嶆甯镐娇鐢ㄥぉ鏁�"          
+          min-width="20%"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="AA"
+          label="寮傚父浣跨敤澶╂暟"          
+          min-width="10%"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="EmissionsConc"
+          label="娓呮礂璁板綍锛堟锛�"          
+          min-width="10%"
+        >
+        </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/header2.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>
+<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/header/header1.vue b/src/views/smoke/report/components/header/header1.vue
index d5f49f7..6c4ef30 100644
--- a/src/views/smoke/report/components/header/header1.vue
+++ b/src/views/smoke/report/components/header/header1.vue
@@ -122,5 +122,6 @@
 <style lang="scss" scoped>
 .header {
   line-height: normal;
+  margin-left: 20px;
 }
 </style>
diff --git a/src/views/smoke/report/components/header/header2.vue b/src/views/smoke/report/components/header/header2.vue
index 9cde2a1..a71f20a 100644
--- a/src/views/smoke/report/components/header/header2.vue
+++ b/src/views/smoke/report/components/header/header2.vue
@@ -66,8 +66,12 @@
     return {
       codeColorOptions: [
         {
-          label: "绾功",
+          label: "绾㈣壊",
           value: "Red",
+        },
+        {
+          label: "榛勮壊",
+          value: "Yellow",
         },
         {
           label: "缁胯壊",
@@ -151,5 +155,6 @@
 <style lang="scss" scoped>
 .header {
   line-height: normal;
+  margin-left: 20px;
 }
 </style>
diff --git a/src/views/smoke/report/components/maintenance.vue b/src/views/smoke/report/components/maintenance.vue
index 17bcab3..f0ac3f6 100644
--- a/src/views/smoke/report/components/maintenance.vue
+++ b/src/views/smoke/report/components/maintenance.vue
@@ -1,13 +1,301 @@
 <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="80">
+          </el-table-column>
+          <el-table-column
+            prop="AcquitAtStr"
+            label="鐩戞祴鐐�"          
+            min-width="15%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="Addr"
+            label="璁惧缂栧彿"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="FanStatusStr"
+            label="寮傚父绂荤嚎澶╂暟"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="AA"
+            label="寮傚父绂荤嚎寰呭鐞嗗ぉ鏁�"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="EmissionsConc"
+            label="姝囦笟澶╂暟"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="EmissionsConc"
+            label="鍑�鍖栧櫒涓嶆甯镐娇鐢ㄥぉ鏁�"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="EmissionsConc"
+            label="鐩戞祴浠晠闅滃ぉ鏁�"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="EmissionsConc"
+            label="搴楀鍘熷洜瀵艰嚧绂荤嚎澶╂暟"          
+            min-width="10%"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="EmissionsConc"
+            label="澶勭悊鐜�"          
+            min-width="10%"
+          >
+          </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>
   
-</template>
-
-<script>
-export default {
-
-}
-</script>
-
-<style>
-
-</style>
\ No newline at end of file
+  <script>
+  import MyHeader from "./header/header2.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/overallSituation.vue b/src/views/smoke/report/components/overallSituation.vue
index b7ce7bf..0a1ab48 100644
--- a/src/views/smoke/report/components/overallSituation.vue
+++ b/src/views/smoke/report/components/overallSituation.vue
@@ -18,98 +18,47 @@
                 :data="tableData"
                 :row-class-name="tableRowClassName"
             >
-                <el-table-column label="搴忓彿" type="index" width="60px">
+                <el-table-column label="搴忓彿" type="index" width="50">
                 </el-table-column>
-                <el-table-column prop="Locale" label="鐩戞祴鐐�" width="120px">
+                <el-table-column prop="AcquitAtStr" label="閲囬泦鏃堕棿" width="auto" min-width="20%">
                 </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 prop="Addr" label="璁惧鎬绘暟" width="auto" min-width="10%">
                 </el-table-column>
                 <el-table-column
                     prop="FanStatusStr"
-                    label="椋庢満鐘舵��"
-                    width="80px"
+                    label="杈炬爣鏁�"
+                    width="auto" min-width="10%"
                 >
                 </el-table-column>
                 <el-table-column
-                    prop="FilterStatusStr"
+                    prop="杈炬爣姣斾緥"
                     label="鍑�鍖栧櫒鐘舵��"
-                    width="95px"
+                    width="auto" min-width="10%"
                 >
                 </el-table-column>
                 <el-table-column
                     prop="EmissionsConc"
-                    label="娌圭儫瀹炴椂娴撳害锛坢g/m3锛�"
-                    width="110px"
+                    label="瓒呮爣鏁�"
+                    width="auto" min-width="10%"
                 >
                 </el-table-column>
                 <el-table-column
                     prop="CEmissions"
-                    label="娌圭儫鎶樼畻娴撳害锛坢g/m3锛�"
-                    width="110px"
+                    label="瓒呮爣姣斾緥"
+                    width="auto" min-width="10%"
                 >
                 </el-table-column>
                 <el-table-column
                     prop="GranuleConc"
-                    label="棰楃矑鐗╁疄鏃舵祿搴︼紙mg/m3锛�"
-                    width="120px"
+                    label="鍦ㄧ嚎鏁�"
+                    width="auto" min-width="10%"
                 >
                 </el-table-column>
                 <el-table-column
                     prop="CGranule"
-                    label="棰楃矑鐗╂姌绠楁祿搴︼紙mg/m3锛�"
-                    width="120px"
+                    label="鍦ㄧ嚎姣斾緥"
+                    width="auto" min-width="10%"
                 >
-                </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>
@@ -191,14 +140,14 @@
                     if (window.navigator.msSaveBlob) {
                         window.navigator.msSaveBlob(
                             blob,
-                            deathdate + "瀹炴椂鏁版嵁" + ".xls"
+                            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);
diff --git a/src/views/smoke/report/components/reduceEmissions.vue b/src/views/smoke/report/components/reduceEmissions.vue
index 17bcab3..4f2b7f7 100644
--- a/src/views/smoke/report/components/reduceEmissions.vue
+++ b/src/views/smoke/report/components/reduceEmissions.vue
@@ -1,13 +1,280 @@
 <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="AcquitAtStr" label="鐩戞祴鐐�" min-width="10%">
+                </el-table-column>
+                <el-table-column prop="Addr" label="瀹夎鍦板潃"  min-width="20%">
+                </el-table-column>
+                <el-table-column
+                    prop="FanStatusStr"
+                    label="璁惧缂栫爜"
+                    min-width="15%"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="AAA"
+                    label="PM2.5鍑忔帓閲忥紙Kg锛�"
+                    min-width="10%"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="EmissionsConc"
+                    label="PM10鍑忔帓閲忥紙Kg锛�"
+                    min-width="10%"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="CEmissions"
+                    label="娌圭儫鍑忔帓锛圞g锛�"
+                    min-width="10%"
+                >
+                </el-table-column>
+                <el-table-column
+                    prop="GranuleConc"
+                    label="vocs鍑忔帓閲忥紙Kg锛�"
+                    min-width="10%"
+                >
+                </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>
+<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

--
Gitblit v1.8.0