智慧园区前端大屏
shuishen
2024-12-18 9a37c5e1b2190c3f6ec71483923922189091dd52
src/views/survey/components/box/fireContent.vue
@@ -1,79 +1,151 @@
<!--
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-11-04 16:32:04
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-12-03 12:57:49
 * @FilePath: \bigScreen\src\views\survey\components\box\fireContent.vue
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
-->
<script setup>
// import publicContent from './publicContent.vue'
import { useEchartsResize } from 'hooks/useEchartsResize'
import { getRiskSourceStatistic } from '../../../../api/indParkInfo'
let $echarts = inject('echarts')
const curEcharts = ref(null)
let myEcharts = reactive(null)
onMounted(() => {
    myEcharts = $echarts.init(curEcharts.value)
    getRiskSource()
let myEcharts = reactive({
  chart: ''
})
let typeLevel = [
  {
    name: '暂定',
    itemStyle: {
      color: '#ADADAD'
    }
  },
  {
    name: '一般',
    itemStyle: {
      color: '#FFC000'
    }
  },
  {
    name: '较大',
    itemStyle: {
function getRiskSource() {
    getRiskSourceStatistic().then(res => {
        let xaxis_data = []
        res.data.data.forEach(element => {
            xaxis_data.push(element.riskLevel)
        });
        let yaxis_data = []
        res.data.data.forEach(element => {
            yaxis_data.push(element.num)
        });
        myEcharts.setOption({
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow'
                }
            },
            xAxis: {
                data: xaxis_data
            },
            yAxis: {},
            series: [
                {
                    type: 'bar',
                    data: yaxis_data,
                    barWidth: '30%'
                }
            ]
        })
      color: '#F4090F'
    }
  },
  {
    name: '重大',
    itemStyle: {
      color: '#FE0000'
    }
  }
]
function getRiskSource () {
  getRiskSourceStatistic().then(res => {
    let data = res.data.data
    let dataRsult = []
    var total = 0
    data.forEach(item => {
      dataRsult.push({
        name: item.riskLevel,
        value: item.num,
        itemStyle: typeLevel.find(i => i.name == item.riskLevel).itemStyle
      })
      total = total + item.num
    })
    myEcharts.chart.setOption({
      title: {
        text: "总数",
        subtext: String(total),
        textStyle: {
          fontSize: 16,
          color: "#fff",
          lineHeight: 20,
        },
        subtextStyle: {
          fontSize: 28,
          color: "#fff",
        },
        textAlign: "center",
        left: "62%",
        // right: "43%",
        top: "36%",
      },
      legend: {
        orient: "vertical",
        top: "40%",
        left: "5%",
        textStyle: {
          color: "#fff",
        },
      },
      grid: {
        top: '6%',
        left: '6%',
        right: '6%',
        bottom: '6%',
        containLabel: true
      },
      tooltip: {
        trigger: 'item'
      },
      series: [
        {
          // name: 'Access From',
          type: 'pie',
          left: '-5%',
          radius: ['45%', '75%'],
          data: dataRsult,
          left: "25%",
          label: {
            show: false,
          },
          labelLine: {
            show: false,
          },
        }
      ]
    })
  })
}
nextTick(() => {
  myEcharts.chart = $echarts.init(curEcharts.value)
  getRiskSource()
})
const echartsResize = () => {
  myEcharts.chart && myEcharts.chart.resize()
}
useEchartsResize(echartsResize)
onUnmounted(() => {
  if (myEcharts.chart) {
    myEcharts.chart.clear()
    myEcharts.chart.dispose()
    myEcharts.chart = null
  }
})
</script>
<template>
    <!-- <public-content>
        <template #content> -->
    <div class="fireContent-box">
  <div class="w100 h100" ref="curEcharts">
        <div>
            <div class="fire-content-echarts" ref="curEcharts">
            </div>
        </div>
    </div>
    <!-- </template>
    </public-content> -->
  </div>
</template>
<style lang="scss" scoped>
.fireContent-box {
    color: #fff;
}
.fire-content-echarts {
    height: 200px;
}
</style>
<style lang="scss" scoped></style>