Newer
Older
urbanLifeline_YanAn / src / views / oneMap / floodPrevention / yhhsqEch.vue
@鲁yixuan 鲁yixuan on 16 Oct 4 KB updata
<template>
  <div :id="id" style="width: 100%; height: 100%"></div>
</template>
<script>
import * as echarts from 'echarts';
import { guid } from '@/utils/util';

import { reactive, toRefs, onMounted, watch, nextTick } from 'vue';

export default {
  name: 'shishijiangyu',
  props: {
    //刷新标志
    refresh: {
      type: [String, Number],
      default: 1,
    },
    //数据
    data: {
      type: Object,
      default: {},
    },
  },
  setup(props) {
    const state = reactive({
      id: guid(),
      chart: null,
      xData: [],
      yData1: [],
      yData2: [],
    });

    const resizeTheChart = () => {
      if (state.chart) {
        state.chart.resize();
      }
    };
    const init = () => {
      state.xData = props.data.listName;
      state.yData1 = props.data.diduan;
      state.yData2 = props.data.zhengzhi;

      let chartDom = echarts.init(document.getElementById(state.id));
      var option;
      option = {
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow',
          },
          backgroundColor: '#000000',
          borderColor: '#00D2FF',
          textStyle: { fontSize: 14, fontWeight: 500, color: '#00D2FF' },
        },
        grid: {
          top: '22%',
          left: '10%',
          right: '8%',
          bottom: '0%',
          containLabel: true,
        },
        legend: {
          show: true,
          textStyle: {
            color: '#E8F7FF',
          },
          itemHeight: 3,
          itemWidth: 10,
          icon: 'rect',
        },
        xAxis: {
          type: 'category',
          data: state.xData,

          splitLine: {
            show: false,
          },
          axisLabel: {
            color: '#ffffffFF',
            fontSize: 11,
          },
        },
        yAxis: [
          {
            type: 'value',
            name: '单位:立方米/秒',
            alignTicks: true,
            min: 0,
            nameTextStyle: {
              color: '#16d0dcFF',
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dotted',
                color: 'rgba(14, 107, 165, 1)',
              },
            },
            axisLabel: {
              color: '#1cf5fcFF',
            },
          },
          {
            show: false,
            type: 'value',
            // name: '整治长度(km)',
            alignTicks: true,
            min: 0,
            position: 'right',
            nameTextStyle: {
              color: '#52d183FF',
            },
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dotted',
                color: 'rgba(14, 107, 165, 1)',
              },
            },
            axisLabel: {
              color: 'rgb(44 252 100 / 98%)',
            },
          },
        ],
        series: [
          {
            name: '警戒流量',
            // data: props.data.rainlist,
            data: state.yData1,
            type: 'bar',
            barWidth: 10,
            itemStyle: {
              normal: {
                barBorderRadius: [2, 2, 0, 0],
                color: '#1cf5fcFF',
                // color: new proxy.echarts.graphic.LinearGradient(
                //   0,
                //   1,
                //   0,
                //   0, // 0,0,1,0表示从左向右    0,0,0,1表示从右向左
                //   [
                //     { offset: 1, color: '#1cf5fcFF' },
                //     { offset: 0, color: 'rgba(11, 167, 124, 0.3)' },
                //   ]
                // ),
              },
            },
          },
          {
            name: '当前流量',
            // data: props.data.rainlist,
            data: state.yData2,
            yAxisIndex: 1,
            type: 'bar',
            barWidth: 10,
            itemStyle: {
              normal: {
                barBorderRadius: [2, 2, 0, 0],
                color: '#ad9760FF',
                // color: new proxy.echarts.graphic.LinearGradient(
                //   0,
                //   1,
                //   0,
                //   0, // 0,0,1,0表示从左向右    0,0,0,1表示从右向左
                //   [
                //     { offset: 1, color: 'rgb(44 252 100 / 98%)' },
                //     { offset: 0, color: 'rgb(44 252 100 / 21%)' },
                //   ]
                // ),
              },
            },
          },
        ],
      };

      option && chartDom.setOption(option, true);
      state.chart = chartDom;
    };
    watch(
      () => props.refresh,
      (newVal, oldVal) => {
        console.log(props, 'props');
        //先销毁实例
        // myChart.value && myChart.value.dispose();
        init();
      }
    );

    onMounted(() => {
      nextTick(() => {
        init();
      });
      window.addEventListener('resize', resizeTheChart);
    });
    return {
      ...toRefs(state),
      resizeTheChart,
      init,
    };
  },
};
</script>

<style></style>