Newer
Older
h2sFront / src / components / homeComp / dataTableCH4.vue
Stephanie on 24 Nov 2022 6 KB first commit
<template>
  <div class="container">
    <div class="frist">
      <div class="input">
        {{ name }}: {{ currentVls }} {{unit}}
      </div>
      <div class="input">
        报警阀值:{{ thresholdVol }} {{ unit }}
      </div>
      <el-button type="primary" size="small" @click="showConfig">
        设置
      </el-button>
    </div>
    <div class="content">
      <el-tabs v-model="currentTab" @tab-click="handleClick">
        <el-tab-pane label="报警列表" name="alarm">
          <el-button type="primary" size="small" @click="clearAlarm">
            一键消警
          </el-button>
          <use-table
            :columns="alarmTableColumns"
            :data="alarmList"
          />
          <div style="margin: 10px 0;display: flex; justify-content: flex-end;">
            <el-pagination
              ref="listpage1"
              background
              layout="prev, pager, next"
              :current-page="alarmQuery.offset"
              :page-size="alarmQuery.pageSize"
              :total="totalAlarm"
              hide-on-single-page
              @size-change="val=>{handleSizeChange('alarm', val)}"
              @current-change="val=>{handleCurrentChange('alarm', val)}"
            />
          </div>
        </el-tab-pane>
        <el-tab-pane label="历史数据" name="history">
          <use-table
            :columns="dataTableColumns"
            :data="dataList"
          />
          <div style="margin: 10px 0;display: flex; justify-content: flex-end;">
            <el-pagination
              ref="listpage2"
              background
              layout="prev, pager, next"
              :current-page="dataQuery.offset"
              :page-size="dataQuery.pageSize"
              :total="totalData"
              hide-on-single-page
              @size-change="val=>{handleSizeChange('data', val)}"
              @current-change="val=>{handleCurrentChange('data', val)}"
            />
          </div>
        </el-tab-pane>
      </el-tabs>
    </div>
    <show-config
      ref="configDialog"
      :config-info="configInfo"
      :device-type="deviceType"
      @close="closeConfig"
    />
  </div>
</template>

<script>
import { batchCancelled, gitNewVls, listPage, warnList } from '@/api/models'
import UseTable from '../../components/homeComp/useTable.vue'
import showConfig from '../../components/homeComp/showConfig.vue'
export default {
  name: 'DataTable',
  components:{ UseTable, showConfig },
  props: {
    deviceType: {
      type: String,
      required: true
    },
    devcode: {
      type: String,
      default:''
    },
    unit: {
      type: String,
      default:'ppm'
    },
    name: {
      type: String,
      default: ''
    }, // 名称
    currentVls: {
      type: String,
      default: ''
    }, // 数值
    configInfo: {
      type: Object,
      default: () => {
        return {
          thresholdVol: '20%',
          collectInterval: 10,
          uploadCycle: '7',
          retryNum: '5',
          IP: '192.0.0.1',
          port: '8081',
          current: 30,
          id: '23'
        }
      }
    }
  },
  data() {
    return {
      thresholdVol:0, // 报警阈值
      alarmQuery: {
        deviceType: '',
        devcode: '',
        currentIndex: 1,
        pageSize: 20
      },
      dataQuery: {
        deviceType: '',
        devcode: '',
        currentIndex: 1,
        pageSize: 20
      },
      alarmTableColumns: [
        { value: 'id', text: '编号', width: '80' },
        { value: 'devcode', text: '设备编号' },
        { value: 'alarmTime', text: '时间', width: 180 }
      ],
      dataTableColumns: [
        { value: 'devcode', text: '设备编号' },
        { value: 'dataValue', text: '历史数值' },
        { value: 'uptime', text: '时间', width: 180 }
      ],
      alarmList: [],
      dataList: [],
      currentTab: 'alarm', // 当前tab
      totalAlarm: 0, // 数据总数
      totalData: 0 // 数据总数
    }
  },
  mounted() {
    this.fetchAlarm()
    this.fetchVls()
  },
  methods: {
    handleClick(tab) {
      if (tab.name === 'alarm') {
        this.fetchAlarm()
      } else {
        this.fetchData()
      }
    },
    fetchVls(){
      gitNewVls(this.deviceType).then(res => {
        if (res.code === 200) {
          this.thresholdVol = res.data
        }
      })
    },
    // 报警列表
    fetchAlarm() {
      this.alarmQuery.deviceType = this.deviceType
      this.alarmQuery.devcode = this.devcode
      warnList(this.alarmQuery).then(res => {
        this.alarmList = res.data.rows
        this.totalAlarm = res.data.total
      })
    },
    fetchData() {
      this.dataQuery.deviceType = this.deviceType
      this.dataQuery.devcode = this.devcode
      listPage(this.dataQuery).then(res => {
        this.totalData = res.data.total
        this.dataList = res.data.rows
      })
    },
    clearAlarm() {
      // 消警操作
      batchCancelled({ deviceType: this.deviceType }).then(res => {
        if (res.code === 200) {
          this.fetchAlarm()
        }
      })
      // this.tableDataCH4 = [];
    },
    showConfig() {
      this.$emit('changeShow', this.configInfo)
      this.$refs.configDialog.initDialog()
    },
    closeConfig(){
      this.fetchVls()
    },
    // 改变页容量
    handleSizeChange(type, val) {
      if (type === 'alarm') {
        this.alarmQuery.pageSize = val
        this.fetchAlarm()
      } else {
        this.dataQuery.pageSize = val
        this.fetchData()
      }
    },
    // 改变当前页
    handleCurrentChange(type, val) {
      if (type === 'alarm') {
        this.alarmQuery.currentIndex = val
        this.fetchAlarm()
      } else {
        this.dataQuery.currentIndex = val
        this.fetchData()
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.container {
  width: 100%;

}
.frist {
  display: flex;
  justify-content: space-between;
  align-items: center
}

.content {
  margin: 10px 0;
  display: flex;
  justify-content: space-around;
}

.content > div {
  flex: 1;
}

.btnBorder {
  border: 1px solid #999;
  padding: 2px;
  box-sizing: border-box;
  cursor: pointer;
}
</style>