Newer
Older
DH_Apicture / src / views / pictureOnMap / page / DrainageSystem / components / HistorySZChart.vue
@chenke chenke 11 days ago 6 KB 水质优化
<template>
<!-- 历史水质 -->
  <div class="chartBox" :id="id"></div>
</template>
<script setup name="HistorySZChart">
import { guid } from "@/utils/ruoyi";
const { proxy } = getCurrentInstance();
import { nowSize } from "@/utils/util.js";
import moment from "moment";

const emit = defineEmits(["updateKey"]);
const props = defineProps({
  //刷新标志
  refresh: {
    type: [String, Number],
    default: 1,
  },
  //数据
  echartData: {
    type: Object,
    default: {},
  },
});

const id = guid();
const myChart = shallowRef("");
watch(
  () => props.refresh,
  (value) => {
    //先销毁实例
    myChart.value && myChart.value.dispose();
    intChart();
  }
);
//自适应
function resizeTheChart() {
  if (myChart.value) {
    myChart.value.resize();
  }
}
//初始化
function intChart() {
  myChart.value = proxy.echarts.init(document.getElementById(id));
  myChart.value.clear();
  // 绘制图表
  myChart.value.setOption({
    textStyle: {
      fontFamily:'SourceHanSansCN-Bold',
    },
    tooltip: {
      trigger: "axis",
      // valueFormatter:(value) => Number(value).toFixed(2),
      axisPointer: {
        type: "shadow",
      },
      formatter: function (params) {
      var res = params[0].name + '<br/>水质等级:';
      var texts = '';
      if (params[0].value == 1) {
        texts = 'Ⅰ';
      } else if (params[0].value == 2) {
        texts = 'Ⅱ';
      } else if (params[0].value == 3) {
        texts = 'Ⅲ';
      } else if (params[0].value == 4) {
        texts = 'Ⅳ';
      } else if (params[0].value == 5) {
        texts = 'Ⅴ';
      }
      res = res + texts;
      return res;
    },

    },
    legend: {
      show: false,
      data: [
          '水质等级',
        ],
      itemWidth: nowSize(10, 1920),
      itemHeight: nowSize(10, 1920),
      itemGap: nowSize(44, 1920),
      top: nowSize(10, 1920),
      selectedMode: false,
      textStyle: {
        color: "rgba(255, 255, 255, 1)",
        fontSize: nowSize(12, 1920),
      },
    },
    grid: {
      top: nowSize(30, 1920),
      bottom: nowSize(50, 1920), //也可设置left和right设置距离来控制图表的大小
      left: nowSize(40, 1920),
      right: nowSize(10, 1920),
    },
    xAxis: {
      data: props.echartData.times,
      triggerEvent: true,
      axisLine: {
        show: false, //隐藏X轴轴线
        lineStyle: {
          color: "rgba(42, 97, 169, 1)",
        },
      },
      axisTick: {
        show: false, //隐藏X轴刻度
        lineStyle: {
          color: "rgba(42, 97, 169, 1)",
        },
      },
      axisLabel: {
        show: true,
        color: "#EBFEFF",
        fontSize: nowSize(10, 1920),
                  formatter: function (value) {
            return moment(value).format("YY年MM月");
          },
      },
    },
    yAxis: {
      type: "value",
      name:'水质等级',
      axisLine: {
        show: false, //隐藏X轴轴线
        lineStyle: {
          color: "rgba(255,255,255)",
        },
      },
      max: 5,
      min: 1,
      axisLabel: {
        show: true,
        color: "#AAC1CF",
        fontSize: nowSize(12, 1920),
        formatter: function (value) {
        var texts = [];
        if (value === 1) {
          texts.push('Ⅰ');
        } else if (value === 2) {
          texts.push('Ⅱ');
        } else if (value === 3) {
          texts.push('Ⅲ');
        } else if (value === 4) {
          texts.push('Ⅳ');
        } else if (value === 5) {
          texts.push('Ⅴ');
        }
        return texts;
      }

      },
      splitLine: {
        //网格线
        lineStyle: {
          type: "dashed",
          color: "#2161a8", //设置网格线类型 dotted:虚线   solid:实线
        },
        show: true, //隐藏或显示
      },
    },
    series: [
      {
        type: "line",
        // triggerLineEvent:true,
        z:6,
        silent: true,
        name: '水质等级',
        data: props.echartData.datas,
        symbol: "circle",
        symbolSize: nowSize(8, 1920),
        showSymbol: true,
        lineStyle: {
          width: nowSize(2, 1920),
          color: "rgba(25, 214, 255, 1)",
        },
        // areaStyle: {
        //   color: new proxy.echarts.graphic.LinearGradient(0, 0, 0, 1, [
        //     {
        //       offset: 0,
        //       color: "rgba(25, 214, 255, 0.7)",
        //     },
        //     {
        //       offset: 0.7,
        //       color: "rgba(25, 214, 255, 0)",
        //     },
        //   ]),
        // },
        itemStyle: {
          color: "rgba(25, 214, 255, 1)", //拐点颜色
        },
              markLine:{
                    symbol:"none",               //去掉警戒线最后面的箭头
                    label:{
                        position:"middle",         //将警示值放在哪个位置,三个值“start”,"middle","end"  开始  中点 结束
                                formatter: function (res) {
                                    let value=res.value
                                    return value==1?'水质目标Ⅰ':value==2?'水质目标Ⅱ':value==3?'水质目标Ⅲ':value==4?'水质目标Ⅳ':value==5?'水质目标Ⅴ':'水质目标'

      }
                    },
                    data : [{
                        silent:true,             //鼠标悬停事件  true没有,false有
                        lineStyle:{               //警戒线的样式  ,虚实  颜色
                            type:"dashed",
                            color:"rgba(238, 99, 99)"
                        },
                        name: '目标水质',
                        yAxis: props.echartData.targetLevel
                    }]
                }
      },

    ],
  });
}
onMounted(() => {
  intChart();
  window.addEventListener("resize", resizeTheChart);
});
</script>

<style lang="scss" scoped>
.chartBox {
  width: 100%;
  height: 100%;
}
:deep(.ra1){
  display: inline-block;
  width:10px;
  height:10px;
  background: rgba(8, 177, 255, 1);
  border-radius: 50%;
  margin-right: 10px;
}
:deep(.ra2){
  display: inline-block;
  width:10px;
  height:10px;
  background: rgba(42, 255, 177, 1);
  border-radius: 50%;
  margin-right: 10px;
}
:deep(.ra3){
  display: inline-block;
  width:10px;
  height:10px;
  background: rgba(255, 255, 0, 1);
  border-radius: 50%;
  margin-right: 10px;
}
</style>