Newer
Older
smartwell_front / src / views / dataManage / deviceData / listTubeData.vue
<template>
  <app-container>
    <!--筛选条件-->
    <search-area size="small" @search="search">
      <search-item>
        <el-input v-model.trim="listQuery.keywords" size="small" placeholder="点位编号/设备编号" clearable />
      </search-item>
      <search-item>
        <dept-select v-model="listQuery.deptid" :need-top="false" size="small" dept-type="03" placeholder="选择权属单位" />
      </search-item>
      <search-item>
        <el-date-picker
          v-model="timeRange"
          size="small"
          type="datetimerange"
          range-separator="至"
          value-format="yyyy-MM-dd HH:mm:ss"
          start-placeholder="开始时间"
          end-placeholder="结束时间"
        />
      </search-item>
    </search-area>
    <!--查询结果Table显示-->
    <normal-table
      ref="normalTable"
      :data="list"
      :total="total"
      :query="listQuery"
      :list-loading="listLoading"
      :options="options"
      size="small"
      @change="changePage"
    >
      <template slot="btns">
        <el-button v-if="hasPerm('/tubedata/export')" size="small" @click="batchExport">
          导出记录
        </el-button>
      </template>
      <template slot="columns">
        <el-table-column v-for="column in columns" :key="column.value" :label="column.text" :width="column.width" :align="column.align" show-overflow-tooltip>
          <template slot-scope="scope">
            <span v-if="column.checkCell" :class="checkCell(scope.row.cell)">{{ scope.row[column.value] }}</span>
            <span v-else>{{ scope.row[column.value] }}</span>
          </template>
        </el-table-column>
      </template>
    </normal-table>
  </app-container>
</template>

<script>
import { getTubeData, batchExportTubeData } from '@/api/data/data'
import DeptSelect from '../../../components/DeptSelect/index'
import { parseUrl } from '@/utils/parseutils'
import { getSearchLastWeekTime } from '@/utils/dateutils'
import { exportFile } from '@/utils/exportutils'

export default {
  name: 'ListTubeData',
  components: { DeptSelect },
  props: {
    type: {
      type: String,
      required: true
    }, // 设备类型
    name: {
      type: String,
      default: ''
    } // 设备名称
  },
  data() {
    return {
      listQuery: {
        keywords: '', // 关键字
        deptid: '', // 部门id
        beginTime: '', // 开始时间
        endTime: '', // 结束时间
        offset: 1,
        limit: 20,
        sort: '',
        order: ''
      }, // 筛选条件
      timeRange: [], // 时间范围
      columns: [
        { text: '设备编号', value: 'devcode', align: 'center' },
        { text: '点位编号', value: 'wellCode', align: 'center' },
        { text: '设备类型', value: 'deviceTypeName', align: 'center' },
        { text: '燃气浓度(%LEL)', value: 'strength', align: 'center' },
        { text: '电量(%)', value: 'cell', width: 80, align: 'center', checkCell: true },
        // { text: '状态描述', value: 'descn', align: 'center' },
        { text: '权属单位', value: 'deptName', align: 'center' },
        { text: '上传时间', value: 'uptime', width: 170, align: 'center' }
      ], // 显示列
      // multipleSelection: [], // 多选选中项
      list: [], // 列表数据
      total: 0, // 数据总数
      options: {
        needIndex: true, // 是否需要序号列
        border: true // 是否需要上方边框
      },
      deviceTypeList: [], // 燃气配置类型列表
      deptProps: {
        parent: 'pid',
        value: 'id',
        label: 'name',
        children: 'children'
      }, // 权属单位树形下拉菜单
      // deptTreeList: null, // 组织树列表数据
      // showDeptTree: 0, // 是否显示权属单位下拉
      // showDeviceType: true, // 是否显示设备类型下拉
      listLoading: true, // 加载动画
      fullscreenLoading: false, // 全屏加载动画
      editShow: false // 是否显示编辑框
    }
  },
  mounted() {
    // 如果路径里带参数,解析devcode参数
    this.timeRange = getSearchLastWeekTime()
    if (window.location.href) {
      const params = parseUrl(window.location.href)
      if (params && params.deviceType === this.type && params.devcode) {
        this.listQuery.keywords = params.devcode
        this.fetchData()
      }
    }
  },
  activated() {
    // 要是路由里有参数
    if (this.$route.query && this.$route.query.devcode) {
      this.listQuery.keywords = this.$route.query.devcode
      this.fetchData(false)// 获取数据
    } else {
      this.fetchData()
    }
  },
  methods: {
    // 批量导出
    batchExport() {
      // 全屏加载动画
      const loading = this.$loading({
        lock: true,
        text: '数据处理中,请稍后...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      batchExportTubeData(this.listQuery).then(res => {
        loading.close() // 关闭加载动画
        let fileName = `${this.name}数据-${this.listQuery.beginTime}-${this.listQuery.endTime}.xlsx`
        fileName = fileName.replace(/-|:| /g, '')
        const blob = new Blob([res.data])
        exportFile(blob, fileName)
      }).catch((res) => {
        loading.close()
      })
    },
    // 查询数据
    search() {
      this.fetchData(false)
    },
    // 获取燃气配置数据
    fetchData(isNowPage = true) {
      this.listLoading = true
      if (!isNowPage) { // 是否显示当前页,否则跳转第一页
        this.listQuery.offset = 1
      }
      this.handleDateTime()
      getTubeData(this.listQuery).then(response => {
        this.list = response.data.rows
        this.total = response.data.total
        this.listLoading = false
      })
    },
    // 处理时间
    handleDateTime() {
      if (this.timeRange && this.timeRange.length > 0) {
        this.listQuery.beginTime = this.timeRange[0]
        this.listQuery.endTime = this.timeRange[1]
      } else {
        this.listQuery.beginTime = ''
        this.listQuery.endTime = ''
      }
    },
    checkCell(value) {
      var cell = parseFloat(value)
      if (cell < 10) {
        return 'warning-state'
      }
    },
    // 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
    changePage(val) {
      if (val && val.size) {
        this.listQuery.limit = val.size
      }
      if (val && val.page) {
        this.listQuery.offset = val.page
      }
      this.fetchData()
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .warning-state{
    color:red
  }
</style>