Newer
Older
DH_Apicture / src / views / pictureOnMap / page / DrainageSystem / components / ShuiZhicharts.vue
<template>
  <!-- 实时水质 -->
  <div :id="id" style="width: 100%; height: 100%"></div>
</template>
<script setup>
import { guid } from '@/utils/ruoyi';
import { nextTick } from 'vue';
import moment from 'moment';

const id = guid();
const myChart = shallowRef('');
import * as echarts from 'echarts';
import { nowSize } from '@/utils/util.js';

const { proxy } = getCurrentInstance();

const props = defineProps({
  data: {
    type: Object,
    default: () => [],
  },
  //刷新
  refresh: {
    type: Number,
  },
});

watch(
  () => props.refresh,
  value => {
    console.log('???????');
    //先销毁实例
    myChart.value && myChart.value.dispose();
    init();
  },
  {
    deep: true,
  }
);

function init() {
  let position = ['insideStartTop', 'insideMiddleTop', 'insideEndBottom'];
  myChart.value = echarts.init(document.getElementById(id));

  let maxnh4n=Number((Math.max(...[Number(props.data.marklineObj.nh4n),...props.data.nh4n]) * 1.2))
  console.log('123',maxnh4n);
//   console.log('2222332',(Math.max(...[Number(props.data.marklineObj.nh4n),...props.data.nh4n]) * 1.1).toFixed(2));
  let option = {
    tooltip: {
      trigger: 'axis',
      backgroundColor: '#004284',
      borderColor: '#0B9BFF',
      borderRadius: 6, // 设置圆角大小
      // 自定义提示框文本样
       formatter: function (params) {
            let res = params[0].name + '<br/>';
            params.forEach(function (item) {
                // 对每个数据项的数值进行格式化,保留两位小数
                 let text=   `<div class="flex flex-justcontent-spacebetween">
                <span>${item.marker}${item.seriesName}</span>
                <span>${(item.value == null ? '-' : Number(item.value).toFixed(2))}</span>
              </div>`
                res +=text ;
            });
            return res;
        },
      textStyle: {
        // 字体颜色
        color: 'white',
        // 字体大小
        fontSize: nowSize(14, 1920),

      },
    },
    legend: {
      data: ['氨氮(mg/L)', '溶解氧(mg/L)', 'COD(mg/L)', '电导率(μS/cm)', 'PH值'],
      orient: "horizontal", //horizontal横向 vertical 纵向
      type: "scroll",
      x: "center", //居右显示
      align: "left", //图例控制在左边
      textStyle: {
        color: '#FFFFFF',
        fontSize: nowSize(12, 1920),
      },
    },
    grid: {
      top: 52,
      left: 20,
      right: 25,
      bottom: 10,
      containLabel: true,
    },

    xAxis: {
      type: 'category',
      boundaryGap: true,
    //   show: false,
      data: props.data.XAxis,
      axisLabel: {
        color: 'rgba(255,255,255,1)',
        fontSize: nowSize(12, 1920),
        fontFamily: 'AlibabaPuHuiTi',
        formatter: function (value) {
          return moment(value).format('HH:MM');
        },
      },
    },
    dataZoom: [
      {
        // show: true,
        show: false,
        height: 4,
        bottom: 10,
        start: 0,
        end: 60,
        handleSize: '100%',
        fillerColor: '#94FA41',
        borderColor: 'transparent',
        backgroundColor: 'rgba(148, 250, 65, 0.2)',
        handleStyle: {
          color: '#94FA41',
        },
        moveHandleSize: 0,
        textStyle: {
          color: '#fff',
        },
      },
      {
        type: 'inside',
        show: true,
        height: 15,
        start: 0,
        end: 60,
      },
    ],
    yAxis: [
        
      {
        name: '氨氮',
        type: 'value',
        // minInterval: 1,
        
        min: 0,
        max:Number((Math.max(...[Number(props.data.marklineObj.nh4n),...props.data.nh4n]) * 1.3)).toFixed(2),

        axisLabel: {
          color: '#259543',
          show: true,
          formatter: function (value) {
            return value.toFixed(1); // 保留两位小数
          },
        },
        
        nameTextStyle: {
          color: '#259543',
          padding: [0, 0, 0, -5],
        },
        splitLine: {
          show: false,
          lineStyle: {
            type: 'dashed',
            color: '#2161a8',
          },
        },
        
        alignTicks: true,
        position: 'left',
        inverse: true,
        nameLocation: 'start',
        offset: 28,
      },
      {
        name: '溶解氧',
        type: 'value',
        // minInterval: 1,
        min: 0,
        max:(Math.max(...[Number(props.data.marklineObj.DO),...props.data.DO]) * 1.3).toFixed(2),

        axisLabel: {
          color: '#b14de5',
          show: true,
          formatter: function (value) {
            return value.toFixed(0); // 保留两位小数
          },
        },
        nameTextStyle: {
          color: '#b14de5',
          padding: [0, 0, 0, -5],
        },
        splitLine: {
            show: false,
          lineStyle: {
            type: 'dashed',
            color: '#2161a8',
          },
        },
        // alignTicks: true,
        position: 'left',
        offset: -5,
      },
      {
        name: 'COD',
        type: 'value',
        // minInterval: 1,
        min: 0,
        max:(Math.max(...[Number(props.data.marklineObj.codcr),...props.data.codcr]) * 1.3).toFixed(2),
        axisLabel: {
          color: '#99FF55',
          show: true,
          // formatter: function (value) {
          //   return value.toFixed(2); // 保留两位小数
          // },
        },
        nameTextStyle: {
          color: '#99FF55',
          padding: [0, 0, 0, 10],
        },
        splitLine: {
            show: false,
          lineStyle: {
            type: 'dashed',
            color: '#2161a8',
          },
        },
        // alignTicks: true,
        position: 'right',
        offset: -5,
      },

      {
        name: '电导率',
        type: 'value',
        // minInterval: 1,
        min: 0,
        axisLabel: {
          color: '#FFC155',
          show: true,
          // formatter: function (value) {
          //   return value.toFixed(2); // 保留两位小数
          // },
        },
        nameTextStyle: {
          color: '#FFC155',
          padding: [0, 0, 0, 15],
        },
        splitLine: {
            show: false,
          lineStyle: {
            type: 'dashed',
            color: '#2161a8',
          },
        },
        // alignTicks: true,
        position: 'right',
        offset: 28,
      },
      {
        name: 'PH值',
        type: 'value',
        // minInterval: 1,
        min: 0,
        axisLabel: {
          color: '#009BE9',
          show: true,
          // formatter: function (value) {
          //   return value.toFixed(2); // 保留两位小数
          // },
        },
        nameTextStyle: {
          color: '#009BE9',
          padding: [0, 0, 0, 15],
        },
        splitLine: {
            show: false,
          lineStyle: {
            type: 'dashed',
            color: '#2161a8',
          },
        },
        // alignTicks: true,
        position: 'right',
        offset: 62,
      },
    ],
    series: [
      {
        name: '氨氮(mg/L)',
        type: 'line',
        data: props.data.nh4n,
        yAxisIndex: 0,
        symbolSize: 7,
        // 修改折线颜色
        lineStyle: {
          color: '#259543', // 折线颜色
          width: 2, // 折线宽度
        },
        // 修改数据点颜色
        itemStyle: {
          color: '#259543', // 数据点颜色
          width: 4,
        },
        markLine: {
          data: [
            {
              yAxis: props.data.marklineObj.nh4n, // 这是水平线的 Y 轴值
              lineStyle: {
                type: 'dashed',
                color: '#259543', // 线的颜色
              },
              label: {
                show: true,
                formatter: '氨氮警戒线:' + props.data.marklineObj.nh4n,
                color: '#259543',
                fontSize: nowSize(12, 1920),
                position: 'middle',
              },
            },
          ],
          symbol: ['none', 'none'], // 这里设置标记线两端的标记为'none',即不显示箭头
        },
      },
      {
        name: '溶解氧(mg/L)',
        type: 'line',
        data: props.data.DO,
        yAxisIndex: 1,
        symbolSize: 7,
        // 修改折线颜色
        lineStyle: {
          color: '#b14de5', // 折线颜色
          width: 2, // 折线宽度
        },
        // 修改数据点颜色
        itemStyle: {
          color: '#b14de5', // 数据点颜色
          width: 4,
        },
        markLine: {
          data: [
            {
              yAxis: props.data.marklineObj.DO, // 这是水平线的 Y 轴值
              lineStyle: {
                type: 'dashed',
                color: '#b14de5', // 线的颜色
              },
              label: {
                show: true,
                formatter: '溶解氧警戒线:' + props.data.marklineObj.DO,
                color: '#b14de5',
                fontSize: nowSize(12, 1920),
                position: 'middle',
              },
            },
          ],
          symbol: ['none', 'none'], // 这里设置标记线两端的标记为'none',即不显示箭头
        },
      },
      {
        name: 'COD(mg/L)',
        type: 'line',
        data: props.data.codcr,
        yAxisIndex: 2,
        // 修改折线颜色
        lineStyle: {
          color: '#99FF55', // 折线颜色
          width: 2, // 折线宽度
        },
        // 修改数据点颜色
        itemStyle: {
          color: '#99FF55', // 数据点颜色
        },
         markLine: {
          data: [
            {
              yAxis: props.data.marklineObj.codcr, // 这是水平线的 Y 轴值
              lineStyle: {
                type: 'dashed',
                color: '#99FF55', // 线的颜色
              },
              label: {
                show: true,
                formatter: 'COD警戒线:' + props.data.marklineObj.codcr,
                color: '#99FF55',
                fontSize: nowSize(12, 1920),
                position: 'middle',
              },
            },
          ],
          symbol: ['none', 'none'], // 这里设置标记线两端的标记为'none',即不显示箭头
        },
      },
      {
        name: '电导率(μS/cm)',
        type: 'line',
        data: props.data.cond,
        yAxisIndex: 3,
        // 修改折线颜色
        lineStyle: {
          color: '#FFC155', // 折线颜色
          width: 2, // 折线宽度
        },
        // 修改数据点颜色
        itemStyle: {
          color: '#FFC155', // 数据点颜色
        },
      },
      {
        name: 'PH值',
        type: 'line',
        data: props.data.ph,
        yAxisIndex: 4,
        // 修改折线颜色
        lineStyle: {
          color: '#009BE9', // 折线颜色
          width: 2, // 折线宽度
        },
        // 修改数据点颜色
        itemStyle: {
          color: '#009BE9', // 数据点颜色
        },
      },
    ],
  };

  option && myChart.value.setOption(option);
}

function resizeTheChart() {
  if (myChart.value) {
    myChart.value.resize();
  }
}
onMounted(() => {
  nextTick(() => {
    init();
    window.addEventListener('resize', resizeTheChart);
  });
});
</script>