Newer
Older
smartcity_env_front / src / views / data / pointData.vue
<template>
  <app-container>
    <div class="choose-device">
      <el-button type="primary" size="small">选择设备</el-button>
      <span class="detail"><span class="title">设备编号:</span>{{currentDevice.deviceNo}}</span>
      <span class="detail"><span class="title">安装点位:</span>{{currentDevice.deviceName}}</span>
      <span class="detail"><span class="title">地址:</span>{{currentDevice.position}}</span>
    </div>
    <search-area :need-clear="false" :need-search-more="false" type="seperate" size="small" search-more-type="default"
                 @search="fetchData" @clear="clearInput">
      <!--一般查询条件-->
      <search-item>
        <el-radio-group v-model="listQuery.searchType" size="small">
          <el-radio-button v-for="item of searchTypes" :label="item.value">{{item.name}}</el-radio-button>
        </el-radio-group>
      </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-item>
        <el-select v-model="listQuery.params" placeholder="参数选择" size="small" multiple collapse-tags clearable>
          <el-option
            v-for="item in paramsList"
            :key="item.value"
            :label="item.name"
            :value="item.value"/>
        </el-select>
      </search-item>
    </search-area>

    <div class="data-container">
      <div class="title-header">
        <i class="el-icon-menu"/>
        历史数据
      </div>
      <div class="edit_btns">
        <el-button type="primary" size="small">导出数据</el-button>
      </div>
    </div>
    <div style="padding:12px;">
      <ve-line :data="chartData" :settings="chartSettings"/>
    </div>

    <!--<el-row style="height: 12px;background-color: #ebebeb"/>-->
    <!--<div style="padding: 10px 10px 0px 10px">-->
      <!--<el-tabs v-model="activeName" type="card" @tab-click="lineSearch">-->
        <!--<el-tab-pane-->
          <!--v-for="(item, index) in tabs"-->
          <!--:key="item.name"-->
          <!--:label="item.title"-->
          <!--:name="item.name"/>-->
      <!--</el-tabs>-->
    <!--</div>-->

    <normal-table :data="list" :head="tableOption.head" :query="listQuery" :total="total" :columns="columns"
                  :list-loading="listLoading" :options="tableOption.options" :tools-option="tableOption.toolsOption"
                  size="small" @change="changePage">
      <template slot="btns"/>
    </normal-table>
  </app-container>
</template>

<script>
  import {getToday} from '@/utils/dateutils'
  import ElSlPanel from "element-ui/packages/color-picker/src/components/sv-panel";

  export default {
    name: 'PointData',
    components: {ElSlPanel, getToday},
    data() {
      return {
        deviceList: [], //所有设备列表
        currentDevice: {
          id: "1",
          deviceNo: "2021030803100001",
          deviceName: "王泥岭",
          area: '崇仁县',
          online: '1',
          deptName: "城管局",
          areaCode: '361024',
          lat: 27.77740600,
          lng: 116.05673800,
          notes: "无",
          position: "王泥岭",
          ts: "2021-01-12",
          deptid: '24',
          installDate: "2021-07-01"

        },// 当前设备
        searchTypes:[
          {name:'分钟平均值', value:'minute'},
          {name:'小时平均值', value:'hour'},
          {name:'日平均值', value:'day'}
        ], // 查询类别
        paramsList:[
          {name: 'PM2.5', unit:'ug/m³', value:'pm25'},
          {name: 'PM10', unit:'ug/m³', value:'pm10'},
          {name: 'TSP', unit:'ug/m³', value:'tsp'},
          {name: '噪声', unit:'db', value:'noise'},
          {name: '风速', unit:'m/s', value:'windSpeed'},
          {name: '风力', unit:'级', value:'windPower'},
          {name: '风向', unit:'°', value:'windDirection'},
          {name: '温度', unit:'℃', value:'temperature'},
          {name: '湿度', unit:'%RH', value:'humidity'},
          {name: '气压', unit:'kpa', value:'pressure'},
        ], // 数据类型列表
        chartData: {
          columns: ['date', 'standard', 'value'],
          rows: []
        },
        chartSettings: {
          labelMap: {
            '': '指标值',
            'standard': '标准值'
          },
          metrics: ['standard', 'value'],
          dimension: ['date']
        },
        listQuery: {
          deviceNo:'', // 设备编号
          searchType:'minute', // 查询类型,
          params:[],
          startDate: '', // 开始时间
          endDate: '', // 结束时间
          offset: 1,
          limit: 20
        }, // 筛选条件
        columns: [], // 显示列
        timeRange: [], // 时间范围
        list: [], // 列表数据
        total: 0, // 数据总数
        listLoading: true, // 列表加载动画
        tableOption: {
          head: {
            show: true, // 是否需要标题栏,
            text: '历史数据列表' // 标题名称
          },
          options: {
            needIndex: false // 是否需要序号列
          },
          toolsOption: {
            selectColumns: false, // 是否需要筛选列
            refresh: false // 是否需要刷新按钮
          }
        } // 表格属性
      }
    },
    watch: {
      timeRange(val) {
        if (val && val.length > 0) {
          this.listQuery.startDate = val[0]
          this.listQuery.endDate = val[1]
          this.fetchData()
        } else {
          this.listQuery.startDate = ''
          this.listQuery.endDate = ''
        }
      }
    },
    activated() {
      if (this.$route.query) {
        this.listQuery.keywords = this.$route.query.name
      }
    },
    created() {
      if (this.$route.query) {
        this.listQuery.keywords = this.$route.query.name
      }
      this.listQuery.startDate = getToday('yyyy-MM-dd 00:00:00')
      this.listQuery.endDate = getToday('yyyy-MM-dd hh:mm:ss')
      this.timeRange = [this.listQuery.startDate, this.listQuery.endDate]
      this.fetchData()
    },
    methods: {
      fetchData() {
        this.lineSearch()
        // this.listLoading = true
        const that = this
        // setTimeout(function () {
        //       that.list = [
        //         { deviceNo:'1245521111141', deviceName: '宝水新城监控点', pm25: '23.40', pm10: 25.80, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50, ts: '2021-05-07 11:15' },
        //         { deviceNo:'1245521111141', deviceName: '宝水新城监控点', pm25: '23.40', pm10: 25.80, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50, ts: '2021-05-07 11:15' },
        //         { deviceNo:'1245521111141', deviceName: '宝水新城监控点', pm25: '23.40', pm10: 25.80, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50, ts: '2021-05-07 11:15' },
        //         { deviceNo:'1245521111141', deviceName: '宝水新城监控点', pm25: '23.40', pm10: 25.80, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50, ts: '2021-05-07 11:15' }
        //       ]
        //       that.total = 4
        //   that.listLoading = false
        // }, 500)
      },
      lineSearch() {
        const labelMap = {}
        const metrics = []
        const columns = [{text: '名称', value: 'ts', align: 'center'}]
        for(const item of this.paramsList){
          if(this.listQuery.params.length==0){
            labelMap[item.value] = item.name
            metrics.push(item.value)
            columns.push({text:item.name, value:item.value})
          }else{
            if(this.listQuery.params.indexOf(item.value)>-1){
              labelMap[item.value] = item.name
              metrics.push(item.value)
            }
          }
        }
        this.columns = columns
        this.chartSettings = {
          labelMap: labelMap,
          metrics: metrics,
          dimension: ['ts']
        }
        this.chartData.rows = this.list = [
          {ts: '9月20日', pm25: 153, pm10: 43, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 },
          {ts: '9月21日', pm25: 150, pm10: 30, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 },
          {ts: '9月22日', pm25: 143, pm10: 23, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 },
          {ts: '9月23日', pm25: 173, pm10: 23, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 },
          {ts: '9月24日', pm25: 272, pm10: 52, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 },
          {ts: '9月25日', pm25: 253, pm10: 53, tsp: 0.00, noise: 3.40, windPower: 0.40, windDirection: 7.40, temperature: 22.50, humidity: 80.50, windSpeed: 2.50, pressure: 122.50 }
        ]
        this.listLoading = false
      },
      // 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
      changePage(val) {
        if (val && val.size) {
          this.listQuery.limit = val.size
        }
        if (val && val.page) {
          this.listQuery.offset = val.page
        }
        this.fetchData()
      },
      // 重置后的操作, 若不需要显示重置按钮则不需要写
      clearInput() {
        this.$message.success('clearInput')
      }
    }
  }
</script>

<style rel="stylesheet/scss" lang="scss">
  .choose-device {
    padding: 12px 12px 0px 12px;
    .detail {
      padding: 0px 10px;
      font-size: 14px;
      .title {
        color: #8c939d;
      }
    }
  }
  .data-container{
    border-top:12px solid #ebebeb ;
    padding: 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    .title-header{
      font-size:15px;
      color: #606266;
    }
  }
</style>