Newer
Older
carbon-metering-front / src / views / count / components / result.vue
liyaguang on 27 Mar 2023 7 KB feat(*): 电力碳核算页面
<script lang="ts" setup>
import carbonAnalyse from './carbonAnalyse.vue'
import carbonElement from './carbonElement.vue'
import carbonGather from './carbonGather.vue'
const emit = defineEmits(['bak'])
const carbonData = ref([])
onMounted(() => {
  carbonData.value = JSON.parse(sessionStorage.getItem('计算结果') as string) || []
})
const requestData = (data: any) => {
  carbonData.value = []
  // 接收父组件传来的数据
  // carbonData.value = data
}
defineExpose({ requestData })
// 总排放量
const totalCarbon = computed(() => {
  return carbonData.value.reduce((pre, target: any) => {
    return pre + (Number(target.co) + Number(target.no) + Number(target.ch))
  }, 0).toFixed(2)
})
// co2 排放量
const coCarbon = computed(() => {
  return carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.co)
  }, 0).toFixed(2)
})
//  ch4排放
const chCarbon = computed(() => {
  return carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.ch)
  }, 0).toFixed(2)
})
//  n2o排放
const noCarbon = computed(() => {
  return carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.no)
  }, 0).toFixed(2)
})
// 碳排分析
const carbonAnalyseData = computed(() => {
  return carbonData.value.map((item: any) => {
    return {
      name: item.name,
      value: Number(item.co) + Number(item.no) + Number(item.ch),
    }
  })
})
// 碳排元素分析
const carbonElementData = computed(() => {
  const arr = []
  // co2
  const co2 = carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.co)
  }, 0).toFixed(2)
  arr.push({ name: 'CO₂', value: co2 })
  // CH₄
  const ch4 = carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.ch)
  }, 0).toFixed(2)
  arr.push({ name: 'CH₄', value: ch4 })
  // N₂O
  const no2 = carbonData.value.reduce((pre, target: any) => {
    return pre + Number(target.no)
  }, 0).toFixed(2)
  arr.push({ name: 'N₂O', value: no2 })
})
</script>

<template>
  <div class="container">
    <!-- <div class="bg" /> -->
    <!-- <div class="bak-btn">
      <el-button class="bak" @click="emit('bak')">
        返回
      </el-button>
    </div> -->
    <div class="content">
      <!-- 碳排量 -->
      <div class="card-box u-f-ajsb">
        <!-- 总co2排放 -->
        <div class="card backgroundImg">
          <div class="title" style="color: rgb(255 255 255);">
            总CO₂e排放
          </div>
          <div class="content1" style="color: rgb(255 255 255);">
            <span class="count">{{ totalCarbon }}</span>
            <span class="unit">万吨</span>
          </div>
          <div class="line" />
          <div class="data" style="color: rgb(255 255 255);">
            <span>低于同行</span>
            <span>{{ 0 }}%</span>
          </div>
          <div />
          <img src="../../../assets/images/co.png" class="tu-1">
        </div>
        <!-- 分别排放 -->
        <div class="card part" style="color: rgb(0 0 0);">
          <div class="title">
            CO₂排放
          </div>
          <div class="content1">
            <span class="count">{{ coCarbon }}</span>
            <span class="unit">万吨</span>
          </div>
          <div class="line" style="background-color: #41a877;" />
          <div class="data">
            <span>低于同行</span>
            <span>{{ 0 }}%</span>
          </div>
          <!-- <img src="../../../assets/images/co.png" class="tu-1"> -->
          <div class="tu-1 logo logo-co" style="color: rgb(255 255 255);">
            CO₂
          </div>
        </div>
        <div class="card part" style="color: rgb(0 0 0);">
          <div class="title">
            CH₄排放
          </div>
          <div class="content1">
            <span class="count">{{ chCarbon }}</span>
            <span class="unit">万吨</span>
          </div>
          <div class="line" />
          <div class="data">
            <span>低于同行</span>
            <span>{{ 0 }}%</span>
          </div>
          <div />
          <!-- <img src="../../../assets/images/co.png" class="tu-1"> -->
          <div class="tu-1 logo logo-ch" style="color: rgb(255 255 255);">
            CH₄
          </div>
        </div>
        <div class="card part" style="color: rgb(0 0 0);">
          <div class="title">
            N₂O排放
          </div>
          <div class="content1">
            <span class="count">{{ noCarbon }}</span>
            <span class="unit">万吨</span>
          </div>
          <div class="line" />
          <div class="data">
            <span>低于同行</span>
            <span>{{ 0 }}%</span>
          </div>
          <div />
          <!-- <img src="../../../assets/images/co.png" class="tu-1"> -->
          <div class="tu-1 logo logo-no" style="color: rgb(255 255 255);">
            N₂O
          </div>
        </div>
      </div>
      <!-- 碳排结果分析标题 -->
      <div class="carbon-title" style="color: #000;">
        <!-- 碳排放结果分析 -->
      </div>
      <!-- echarts -->
      <div class="echarts">
        <!-- 碳排分析饼图 -->
        <carbon-analyse :data="carbonAnalyseData" />
        <!-- 碳排元素分析 -->
        <carbon-element :data="carbonElementData" />
        <!-- 碳排汇总 -->
        <carbon-gather />
      </div>
    </div>
  </div>
</template>

<style lang="scss" scoped>
.bg {
  height: 160px;
  background-image: url("../../../assets/images/result-bg.png");
}

// .bak {
//   position: absolute;
//   top: 30px;
//   left: 10%;
// }
.bak-btn {
  position: absolute;
  left: 0;
  top: 0;
}

.content {
  // width: 80%;
  background: #fff;
  margin: 0 auto;
  min-height: 100vh;
  // margin-top: -85px;
  border-radius: 8px;
  // background-image: url("../../../assets/images/result-bg.png") no-repeat;
  .echarts {
    display: flex;
    justify-content: space-around;
    height: 25rem;
  }

  .carbon-title {
    // width: 60%;
    margin: 0 auto;
    background: url("../../../assets/images/carbon-result-bg-1.png") no-repeat;
    height: 115px;
  }

  .part {
    border: 2px solid #41a877 !important;
    width: 24% !important;
    border-radius: 6px;
    height: 8rem !important;
    // background-color: #ccc;
    padding: 1.5rem 3rem 4rem 2.5rem !important;
    // padding: 0 !important;
    .logo {
      top: 1rem !important;
      border-radius: 4px;
    }

    .logo-co {
      background-color: #41a877;
    }

    .logo-ch {
      background-color: #6686f3;
    }

    .logo-no {
      background-color: #bc86ff;
    }
  }

  .card-part {
    width: 70%;

    .item {
      border: 3px solid #41a877;
      border-radius: 6px;
    }
  }

  .data {
    padding: 0 15px;
    display: flex;
    justify-content: space-between;
  }

  .u-f-ajsb {
    display: flex;
    align-items: center;
    justify-content: space-around;
  }

  .card {
    overflow: hidden;
    position: relative;
    padding: 4rem 3rem 4rem 2.5rem;
    width: 25%;
    height: 12rem;
    border: 1px solid #fff;
    border-radius: 6px;

    .title {
      font-size: 16px;
      font-family: "Source Han Sans SC";
      font-weight: 400;
      margin-bottom: 0.5rem;
    }

    .tu-1 {
      position: absolute;
      right: 2.5rem;
      top: 2.5rem;
      width: 45px;
      height: 45px;
      text-align: center;
      line-height: 45px;
    }

    .line {
      width: 96%;
      height: 3px;
      background-color: #fff;
      margin: 0 auto;
      margin-top: 10px;
      border-radius: 4px;
    }

    .content1 {
      margin-top: 10px;

      .count {
        font-size: 20px;
        font-weight: 700;
      }
    }
  }

  .backgroundImg {
    background: url("../../../assets/images/result1.png") no-repeat;
    background-size: 100% 100%;
  }
}
</style>