Sfoglia il codice sorgente

feat: warning export

Casper Dai 1 anno fa
parent
commit
775c4c5fac

+ 4 - 2
src/constant.js

@@ -522,12 +522,14 @@ export const AsyncTaskType = {
   SCREEN_BROADCAST: 1,
   SCREEN_ONLINE: 2,
   PEOPLE_COUNTING: 3,
-  ONLINE_DURATION: 4
+  ONLINE_DURATION: 4,
+  ONLINE_DURATION_TOTAL: 5
 }
 
 export const AsyncTaskTypeInfo = {
   [AsyncTaskType.SCREEN_BROADCAST]: '大屏播出单',
   [AsyncTaskType.SCREEN_ONLINE]: '大屏上下线记录',
   [AsyncTaskType.PEOPLE_COUNTING]: '人流量统计',
-  [AsyncTaskType.ONLINE_DURATION]: '在线时长'
+  [AsyncTaskType.ONLINE_DURATION]: '在线时长',
+  [AsyncTaskType.ONLINE_DURATION_TOTAL]: '总在线时长'
 }

+ 20 - 0
src/views/realm/report/api.js

@@ -48,6 +48,26 @@ export function getContentExcel (params, fileName = '') {
   })
 }
 
+export function getDeviceStatusExcel (data, fileName = '') {
+  return send({
+    url: '/device/tenant/export/excelByDate',
+    method: 'POST',
+    data: addTenant(data)
+  }, downloadRequest).then(response => {
+    download(response, `设备状况${parseTime(new Date(), '{y}{m}{d}{h}{i}{s}')}_${fileName}.xlsx`)
+  })
+}
+
+export function getDeviceWarnExcel (data, fileName = '') {
+  return send({
+    url: '/device/warn/export/excel',
+    method: 'POST',
+    data: addTenant(data)
+  }, downloadRequest).then(response => {
+    download(response, `设备预警${parseTime(new Date(), '{y}{m}{d}{h}{i}{s}')}_${fileName}.xlsx`)
+  })
+}
+
 export function getAccountExcel (params, fileName = '') {
   return send({
     url: '/admin/department/user/export',

+ 75 - 0
src/views/realm/report/components/DeviceStatusDialog.vue

@@ -0,0 +1,75 @@
+<template>
+  <confirm-dialog
+    ref="dialog"
+    title="设备状况"
+    confirm-text="下载"
+    @confirm="onConfirm"
+  >
+    <template #default>
+      <div class="c-grid-form auto u-align-self--center">
+        <div class="c-grid-form__label u-required">
+          日期范围
+        </div>
+        <el-date-picker
+          v-model="dateRange"
+          type="daterange"
+          range-separator="至"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions"
+          :editable="false"
+          :clearable="false"
+          @change="handleDateChange"
+        />
+      </div>
+    </template>
+  </confirm-dialog>
+</template>
+
+<script>
+import { parseTime } from '@/utils'
+import { getDeviceStatusExcel } from '../api.js'
+
+export default {
+  name: 'DeviceStatusDialog',
+  data () {
+    return {
+      dateRange: null
+    }
+  },
+  computed: {
+    pickerOptions () {
+      return {
+        disabledDate: date => date > Date.now()
+      }
+    }
+  },
+  methods: {
+    handleDateChange (value) {
+      if (value && value.length === 2) {
+        const startDate = new Date(value[0])
+        const endDate = new Date(value[1])
+        const dayCount = Math.ceil(Math.abs(endDate - startDate) / (1000 * 60 * 60 * 24))
+        if (dayCount > 7) {
+          this.$message.error('最多导出7天数据')
+          const date = parseTime(new Date(), '{y}-{m}-{d}')
+          this.dateRange = [date, date]
+        }
+      }
+    },
+    show () {
+      const date = parseTime(new Date(), '{y}-{m}-{d}')
+      this.dateRange = [date, date]
+      this.$refs.dialog.show()
+    },
+    onConfirm (done) {
+      const time = this.dateRange[0] === this.dateRange[1] ? this.dateRange[0] : `${this.dateRange[0]}~${this.dateRange[1]}`
+      const endDate = new Date(this.dateRange[1].replace(/-/g, '/'))
+      endDate.setDate(endDate.getDate() + 1)
+      getDeviceStatusExcel({
+        startDate: this.dateRange[0],
+        endDate: parseTime(endDate, '{y}-{m}-{d}')
+      }, time).then(done)
+    }
+  }
+}
+</script>

+ 75 - 0
src/views/realm/report/components/DeviceWarnDialog.vue

@@ -0,0 +1,75 @@
+<template>
+  <confirm-dialog
+    ref="dialog"
+    title="设备预警"
+    confirm-text="下载"
+    @confirm="onConfirm"
+  >
+    <template #default>
+      <div class="c-grid-form auto u-align-self--center">
+        <div class="c-grid-form__label u-required">
+          日期范围
+        </div>
+        <el-date-picker
+          v-model="dateRange"
+          type="daterange"
+          range-separator="至"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions"
+          :editable="false"
+          :clearable="false"
+          @change="handleDateChange"
+        />
+      </div>
+    </template>
+  </confirm-dialog>
+</template>
+
+<script>
+import { parseTime } from '@/utils'
+import { getDeviceWarnExcel } from '../api.js'
+
+export default {
+  name: 'DeviceWarnDialog',
+  data () {
+    return {
+      dateRange: null
+    }
+  },
+  computed: {
+    pickerOptions () {
+      return {
+        disabledDate: date => date > Date.now()
+      }
+    }
+  },
+  methods: {
+    handleDateChange (value) {
+      if (value && value.length === 2) {
+        const startDate = new Date(value[0])
+        const endDate = new Date(value[1])
+        const dayCount = Math.ceil(Math.abs(endDate - startDate) / (1000 * 60 * 60 * 24))
+        if (dayCount > 7) {
+          this.$message.error('最多导出7天数据')
+          const date = parseTime(new Date(), '{y}-{m}-{d}')
+          this.dateRange = [date, date]
+        }
+      }
+    },
+    show () {
+      const date = parseTime(new Date(), '{y}-{m}-{d}')
+      this.dateRange = [date, date]
+      this.$refs.dialog.show()
+    },
+    onConfirm (done) {
+      const time = this.dateRange[0] === this.dateRange[1] ? this.dateRange[0] : `${this.dateRange[0]}~${this.dateRange[1]}`
+      const endDate = new Date(this.dateRange[1].replace(/-/g, '/'))
+      endDate.setDate(endDate.getDate() + 1)
+      getDeviceWarnExcel({
+        startDate: this.dateRange[0],
+        endDate: parseTime(endDate, '{y}-{m}-{d}')
+      }, time).then(done)
+    }
+  }
+}
+</script>

+ 30 - 4
src/views/realm/report/index.vue

@@ -29,6 +29,18 @@
           >
             总在线时长报表
           </button>
+          <button
+            class="o-button"
+            @click="getDeviceStatusExcel"
+          >
+            设备状况报表
+          </button>
+          <button
+            class="o-button"
+            @click="getDeviceWarnExcel"
+          >
+            设备预警报表
+          </button>
         </div>
       </template>
       <div class="c-sibling-item--v u-font-size--sm u-bold">
@@ -142,6 +154,8 @@
       @added="showServerAsyncTask"
     />
     <server-async-task-dialog ref="serverAsyncTaskDialog" />
+    <device-status-dialog ref="deviceStatusDialog" />
+    <device-warn-dialog ref="deviceWarnDialog" />
   </wrapper>
 </template>
 
@@ -163,6 +177,8 @@ import PeopleCountingDialog from './components/PeopleCountingDialog.vue'
 import ScreenOnlineDialog from './components/ScreenOnlineDialog.vue'
 import ScreenBroadcastDialog from './components/ScreenBroadcastDialog.vue'
 import ServerAsyncTaskDialog from './components/ServerAsyncTaskDialog.vue'
+import DeviceStatusDialog from './components/DeviceStatusDialog.vue'
+import DeviceWarnDialog from './components/DeviceWarnDialog.vue'
 
 export default {
   name: 'Report',
@@ -178,12 +194,17 @@ export default {
     PeopleCountingDialog,
     ScreenOnlineDialog,
     ScreenBroadcastDialog,
-    ServerAsyncTaskDialog
+    ServerAsyncTaskDialog,
+    DeviceStatusDialog,
+    DeviceWarnDialog
   },
   computed: {
     ...mapGetters(['isGroupAdmin', 'isTopGroup'])
   },
   methods: {
+    showServerAsyncTask (type) {
+      this.$refs.serverAsyncTaskDialog.show(type)
+    },
     getDeviceExcel () {
       getDeviceExcel()
     },
@@ -209,7 +230,9 @@ export default {
       this.$refs.programPlaysDialog.show()
     },
     getOnlineDurationExcel () {
-      getOnlineDurationExcel({ type: 'DEVICE_ONLINE_TOTAL' })
+      getOnlineDurationExcel().then(({ data: { type } }) => {
+        this.showServerAsyncTask(type)
+      })
     },
     getDepartmentOnlineDurationExcel () {
       this.$refs.onlineDurationDialog.show()
@@ -223,8 +246,11 @@ export default {
     addScreenBroadcastTask () {
       this.$refs.screenBroadcastDialog.show()
     },
-    showServerAsyncTask (type) {
-      this.$refs.serverAsyncTaskDialog.show(type)
+    getDeviceStatusExcel () {
+      this.$refs.deviceStatusDialog.show()
+    },
+    getDeviceWarnExcel () {
+      this.$refs.deviceWarnDialog.show()
     }
   }
 }