From c068a9cbaca1c984590c14b8851e97486bfdb430 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期五, 06 十月 2023 21:05:57 +0800
Subject: [PATCH] 导出功能

---
 src/views/smoke/realTime/index.vue                   |  149 ++++++++++------
 src/views/smoke/realTime/components/header/index.vue |  343 +++++++++++++++++++------------------
 src/api/smoke/realTime.js                            |    4 
 3 files changed, 272 insertions(+), 224 deletions(-)

diff --git a/src/api/smoke/realTime.js b/src/api/smoke/realTime.js
index 9849483..6087d48 100644
--- a/src/api/smoke/realTime.js
+++ b/src/api/smoke/realTime.js
@@ -13,4 +13,8 @@
     getInTimeCount: () => {
         return http.get('/sccg/smoke/inTime/count');
     },
+    // 瀵煎嚭瀹炴椂鏁版嵁
+    exportInTime: (params) => {
+        return http.downloadFile('/sccg/smoke/inTime/export', params);
+    },
 }
\ No newline at end of file
diff --git a/src/views/smoke/realTime/components/header/index.vue b/src/views/smoke/realTime/components/header/index.vue
index bcfb6fb..5618876 100644
--- a/src/views/smoke/realTime/components/header/index.vue
+++ b/src/views/smoke/realTime/components/header/index.vue
@@ -1,185 +1,198 @@
 <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="getUserList">鍒锋柊</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: "NORMAL",
-        },
-        {
-          label: "棰勮",
-          value: "ALARM",
-        },
-        {
-          label: "瓒呮爣",
-          value: "EXCESS",
-        },
-        {
-          label: "绂荤嚎",
-          value: "DOWN",
-        },
-        {
-          label: "寮傚父绂荤嚎",
-          value: "OFF",
-        },
-      ],
-      statusOptions: [
-        {
-          label: "姝e父",
-          value: 1,
-        },
-        {
-          label: "绂荤嚎",
-          value: 2,
-        },
-        {
-          label: "寮傚父绂荤嚎",
-          value: 3,
-        },
-      ],
-      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]);
+    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]);
+                        },
+                    },
+                ],
             },
-          },
-          {
-            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));
+        };
     },
-
-    getUserList() {
-      const ownerItem = this.ownerOptions[this.seachData.ownerIndex];
-      this.seachData.owner = ownerItem.Pid + ownerItem.Id;
-      this.$emit("getList", { seachData: this.seachData });
+    created() { },
+    mounted() {
+        this.getOwnerOptions();
     },
-    exportTableData(){
+    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;
+    line-height: normal;
 }
 </style>
diff --git a/src/views/smoke/realTime/index.vue b/src/views/smoke/realTime/index.vue
index 09f4a4e..00a65c3 100644
--- a/src/views/smoke/realTime/index.vue
+++ b/src/views/smoke/realTime/index.vue
@@ -1,6 +1,9 @@
 <template>
     <div>
-        <MyHeader @getList="getRealTimeList"></MyHeader>
+        <MyHeader
+            @getList="getRealTimeList"
+            @exportTable="exportInTime"
+        ></MyHeader>
         <!-- 鏁版嵁灞曠ず -->
         <div style="width: 100%; overflow-x: scroll">
             <el-table
@@ -148,43 +151,7 @@
         getRealTimeList(seachData) {
             let params;
             if (seachData) {
-                params = {
-                    pageNum: this.currentPage,
-                    pageSize: this.pageSize,
-                    resource:
-                        seachData.seachData.resource == undefined
-                            ? null
-                            : seachData.seachData.resource,
-                    region:
-                        seachData.seachData.region == undefined
-                            ? null
-                            : seachData.seachData.region,
-                    type: this.statusArr[1] ?? null,
-                    code:
-                        seachData.seachData.code == undefined
-                            ? null
-                            : seachData.seachData.code,
-                    categoryBig:
-                        seachData.seachData.categoryBig == undefined
-                            ? null
-                            : seachData.seachData.categoryBig,
-                    categorySmall:
-                        seachData.seachData.categorySmall == undefined
-                            ? null
-                            : seachData.seachData.categorySmall,
-                    site:
-                        seachData.seachData.site == undefined
-                            ? null
-                            : seachData.seachData.site,
-                    street:
-                        seachData.seachData.street == undefined
-                            ? null
-                            : seachData.seachData.street,
-                    alarmTime:
-                        seachData.seachData.alarmTime == undefined
-                            ? null
-                            : seachData.seachData.alarmTime,
-                };
+                params = this.getParam(seachData)
             } else {
                 params = {
                     pageNum: this.currentPage,
@@ -196,7 +163,7 @@
                 .findInTimeList(params)
                 .then(({ list, total }) => {
                     list.forEach(e => {
-                        e.AcquitAtStr = this.Dateformat(e.AcquitAt);
+                        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)
@@ -207,6 +174,72 @@
                 })
                 .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:
@@ -264,28 +297,26 @@
             this.currentPage = page;
             this.getRealTimeList();
         },
-        Dateformat(fmt) {
-            var fmtdate = new Date(fmt)
-            var o = {
-                "M+": fmtdate.getMonth() + 1,                 //鏈堜唤 
-                "d+": fmtdate.getDate(),                    //鏃� 
-                "h+": fmtdate.getHours(),                   //灏忔椂 
-                "m+": fmtdate.getMinutes(),                 //鍒� 
-                "s+": fmtdate.getSeconds(),                 //绉� 
-                "q+": Math.floor((fmtdate.getMonth() + 3) / 3), //瀛e害 
-                "S": fmtdate.getMilliseconds()             //姣 
+        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()          // 绉�
+                // 鏈夊叾浠栨牸寮忓寲瀛楃闇�姹傚彲浠ョ户缁坊鍔狅紝蹇呴』杞寲鎴愬瓧绗︿覆
             };
-            if (/(y+)/.test(fmt)) {
-                fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
-            }
-            for (var k in o) {
-                if (new RegExp("(" + k + ")").test(fmt)) {
-                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
-                }
-            }
+            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>
 

--
Gitblit v1.8.0