Newer
Older
carbon-metering-front / src / views / data / device / detail.vue
<!--
  Description: 详情分析页面
  Author: 李亚光
  Date: 2023-06-05
 -->
<script lang="ts" setup name="sceneEdit">
import { getDeviceDetail, getDeviceDetailAnalysis } from '@/api/api/index'
const $router = useRouter()
const $route = useRoute()
const width = (document.body.clientWidth - 180 - 20 - 40 - 24) / 24
// 监测类型  用来判断碳排趋势chart显不显示
const monitorType = ref('')
monitorType.value = $route.query.monitor as string
// 设备类型
const deviceType = ref('')
deviceType.value = $route.query.deviceType as string
// 监测趋势时间段
const range = ref('day')
const goBak = () => {
  $router.push({
    name: 'Ddevice',
  })
}
const deviceInfo = ref<{ [key: string]: string | any }>({})
// 获取设备基本信息
const fetchDeviceInfo = () => {
  getDeviceDetail($route.query.id).then((res) => {
    deviceInfo.value = res.data
  })
}
// 节点监测趋势数据
const xAxisData1 = ref([])
const data1 = ref<any[]>([])
const loadingChart1 = ref(true)
const selected = ref({})
// 节点碳排趋势数据
const xAxisData2 = ref([])
const data2 = ref<any[]>([])
// 获取设备监测分析
const fetchDeviceAnalysis = () => {
  loadingChart1.value = true
  getDeviceDetailAnalysis({
    deviceId: $route.query.id,
    type: range.value,
  }).then((res) => {
    const data = res.data
    // 整理节点监测趋势数据-用电
    if (data.monitorTrends?.rp.length && deviceType.value === '1') {
      xAxisData1.value = data.monitorTrends?.rp?.map((item: any) => item.time)
      data1.value = [
        {
          name: '有功功率(KW)',
          data: data.monitorTrends?.rp?.map((item: any) => item.value),
        },
        {
          name: '无功功率(KVAr)',
          data: data.monitorTrends?.ap?.map((item: any) => item.value),
        },
      ]
      selected.value = {
        '有功功率(KW)': true,
        '无功功率(KVAr)': false,
      }
    }
    // 整理节点监测趋势数据-用热/用气
    if (data.monitorTrends?.val.length && deviceType.value !== '1') {
      xAxisData1.value = data.monitorTrends?.val?.map((item: any) => item.time)
      data1.value = [
        {
          name: '监测值',
          data: data.monitorTrends?.val?.map((item: any) => item.value),
        },
      ]
      selected.value = {}
    }
    // 整理节点碳排趋势数据
    if (data.emissionsTrends?.data?.length) {
      const emissionsTrends = data.emissionsTrends.data
      xAxisData2.value = emissionsTrends.map((item: any) => item.time)
      data2.value = [
        {
          name: `碳排趋势(${deviceType.value !== '2' ? 'gCO2/kWh' : 'gCO2/KJ'})`,
          data: emissionsTrends.map((item: any) => item.value),
        },
      ]
    }
    loadingChart1.value = false
  }).catch(() => {
    data1.value = []
    data2.value = []
    loadingChart1.value = false
  })
}
// 监听 监测趋势时间段 变化 重新获取数据
watch(() => range.value, (newVal) => {
  fetchDeviceAnalysis()
},
{
  deep: true,
})

onMounted(() => {
  fetchDeviceInfo()
  fetchDeviceAnalysis()
})
</script>

<template>
  <app-container style="overflow: hidden;">
    <detail-page title="设备详情分析">
      <template #btns>
        <el-button type="primary" @click="goBak">
          返回
        </el-button>
      </template>
      <el-row :gutter="24">
        <el-col :span="1" />
        <el-col :span="3">
          当前设备:
        </el-col>
        <el-col :span="8">
          {{ deviceInfo.deviceName }}
        </el-col>
        <el-col :span="3">
          监测对象:
        </el-col>
        <el-col :span="8">
          {{ deviceInfo.monitorObjName }}
        </el-col>
      </el-row>
      <el-row :gutter="24" style="margin-top: 30px;">
        <el-col :span="1" />
        <el-col :span="3">
          安装位置:
        </el-col>
        <el-col :span="8">
          {{ deviceInfo.installLocaltion }}
        </el-col>
      </el-row>
      <el-row :gutter="24" style="margin-top: 30px;">
        <el-col :span="1" />
        <el-col :span="3">
          安装时间:
        </el-col>
        <el-col :span="8">
          {{ deviceInfo.installTime }}
        </el-col>
        <el-col :span="3">
          当前状态:
        </el-col>
        <el-col :span="8">
          {{ deviceInfo.statName }}
        </el-col>
      </el-row>
      <el-row :gutter="24" style="margin-top: 30px;">
        <el-col :span="1" />
        <el-col :span="4">
          趋势查看方式:
        </el-col>
        <el-col :span="18">
          <el-radio-group v-model="range">
            <el-radio label="year">
              年
            </el-radio>
            <el-radio label="month">
              月
            </el-radio>
            <el-radio label="day">
              日
            </el-radio>
            <el-radio label="hour">
              小时
            </el-radio>
          </el-radio-group>
        </el-col>
      </el-row>
      <el-row v-show="!loadingChart1" :gutter="24" style="margin-top: 30px;">
        <el-col :span="1" />
        <!--  -->
        <el-col v-loading="loadingChart1" :span="monitorType === '5' ? 11 : 23">
          <div class="chart-title">
            节点监测趋势
          </div>
          <line-chart height="400px" :selected="selected" :width="`${monitorType === '5' ? 11 * width : 23 * width}px`" :data="data1" :x-axis-data="xAxisData1" />
        </el-col>
        <el-col v-if="monitorType === '5'" :span="1" />
        <el-col v-if="monitorType === '5'" v-loading="loadingChart1" :span="11">
          <div class="chart-title">
            节点碳排趋势
          </div>
          <line-chart height="400px" :width="`${11 * width}px`" :data="data2" :x-axis-data="xAxisData2" />
        </el-col>
      </el-row>
    </detail-page>
  </app-container>
</template>

<style lang="scss" scoped>
.chart-title {
  background-color: #ccc;
}
</style>