Newer
Older
DH_Apicture / src / views / pictureOnMap / page / DrainageSystem / YSIndex_right2.vue
@zhangqy zhangqy 8 days ago 8 KB 代码提交
<template>
  <div id="YSIndex_right2">
    <div class="historySZ">
      <div class="leve2Title flex flex-justcontent-spacebetween">
        <div>历史水质</div>
        <div>
          <el-select
            v-model="AllData.selectmodel"
            placeholder="请选择湖泊"
            style="width: 90px; position: relative; margin-bottom: 5px"
            filterable
            size="small"
            placement="bottom"
            @change="selectchange"
          >
            <el-option
              v-for="item in AllData.filterList"
              :key="item.lakerId"
              :label="item.lakerName"
              :value="item.lakerId"
            >
            </el-option>
          </el-select>
        </div>
      </div>
      <div id="history">
        <HistorySZChart
          :echartData="AllData.szHistoryData"
          :refresh="AllData.szHistoryrefresh"
        />
      </div>
    </div>
    <el-tabs
      v-model="AllData.activeName"
      class="demo-tabs"
      @tab-click="handleClick"
      stretch
    >
      <el-tab-pane label="港渠" name="GQ"></el-tab-pane>
      <el-tab-pane label="排口" name="PK"></el-tab-pane>
    </el-tabs>
    <div class="chartsbox" v-if="AllData.activeName == 'GQ'" ref="scrollContainer">
      <div class="eachLake" v-for="item in AllData.allSZ" :key="item.stCode">
        <div class="h100">
          <div class="leve2Title">{{ item.stName }}</div>
          <div id="Charts">
            <ShuiZhicharts
              :data="item.chartInfo"
              :refresh="item.chartInfo.refresh"
            ></ShuiZhicharts>
          </div>
        </div>
      </div>
      <div class="flex flex-justcontent-center" v-if="AllData.allSZ.length == 0">
        暂无数据
      </div>
    </div>

    <div class="chartsbox" v-if="AllData.activeName == 'PK'" ref="scrollContainer">
      <div
        class="eachLake"
        ref="PKeachLake"
        v-for="item in AllData.allPK"
        :key="item.stCode"
      >
        <div class="h100">
          <div class="leve2Title">{{ item.stName }}</div>
          <div id="Charts">
            <Paikoucharts
              :refresh="item.chartInfo.refresh"
              :XAxis="item.chartInfo.XAxis"
              :YAxis="item.chartInfo.YAxis"
              :yAxisarr="item.chartInfo.yAxisarr"
            >
            </Paikoucharts>
          </div>
        </div>
      </div>
      <div class="flex flex-justcontent-center" v-if="AllData.allPK.length == 0">
        暂无数据
      </div>
    </div>
  </div>
</template>

<script setup name="YSIndex_right2">
import { ref, reactive, toRefs, onMounted, nextTick } from "vue";
import { getWaterQualityEchart, riverQualityGetHistory } from "@/api/MonitorAssetsOnMap";
import ShuiZhicharts from "./components/ShuiZhicharts.vue";
import Paikoucharts from "./components/Paikoucharts.vue";
import HistorySZChart from "./components/HistorySZChart.vue";
import bus from "@/bus";

const props = defineProps({
  //分区编号
  waterRegionCode: {
    type: [String],
    default: "",
  },
});
const AllData = reactive({
  selectmodel: "",
  filterList: [],
  activeName: "",
  GQdata: [],
  PKdata: [],
  allSZ: [],
  allPK: [],
  szHistoryData: [],
  szHistoryrefresh: [],
});
const scrollContainer = ref(null);
const PKeachLake = ref(null);
watch(
  () => props.waterRegionCode,
  (val) => {
    console.log("YSIndex_right2:分区编号变了2", val);
    // debugger
    if (val) {
      getHistoryData();
      getData();
    }
  },
  { immediate: true, deep: true }
);
function selectchange(value) {
  console.log("value", value);
  AllData.filterList.map((e) => {
    if (e.lakerId == value) {
      AllData.szHistoryData = e;

      AllData.szHistoryrefresh = Math.random();
    }
  });
}
function handleClick(e) {
  console.log("e", e.props.name);
  console.log("AllData.activeName", AllData.activeName);
  if (e.props.name == "GQ") {
    chuliDataFunGQ();
  } else {
    chuliDataFunPK();
  }
}
function getHistoryData() {
  let params = {
    waterRegionCode: props.waterRegionCode,
    // lakerId:5,
  };
  riverQualityGetHistory(params).then((res) => {
    console.log("水质历史数据", res);
    if (res.code == 200) {
      AllData.filterList = res.data;
      if (res.data?.length > 0) {
        AllData.selectmodel = res.data[0].lakerId;

        AllData.szHistoryData = res.data[0];
        AllData.szHistoryrefresh = Math.random();
      }
    }
  });
}
function getData() {
  getWaterQualityEchart(props.waterRegionCode).then((res) => {
    console.log("水质", res);
    if (res.code == 200) {
      AllData.GQdata = res.data.portChannelDataList;
      AllData.PKdata = res.data.outletDataList;
      if (AllData.GQdata.length > 0) {
        AllData.activeName = "GQ";
        chuliDataFunGQ();
        return;
      } else if (AllData.PKdata.length > 0) {
        AllData.activeName = "PK";
        chuliDataFunPK();
        return;
      } else {
        AllData.activeName = "GQ";
        chuliDataFunGQ();
      }
    }
  });
}
function chuliDataFunGQ() {
  let arr = [];
  let data = AllData.GQdata;
  data.forEach((e) => {
    let obj = {
      stName: e.stName,
      stCode: e.stCode,
      targetQuality: e.targetQuality,
      chartInfo: {
        name: "",
        XAxis: [],
        nh4n: [],
        DO: [],
        codcr: [],
        cond: [],
        ph: [],
        marklineObj: {
          nh4n: "",
          DO: "",
          codcr: "",
          cond: "",
          ph: "",
        },
        refresh: 1,
      },
    };
    let at = obj.chartInfo;
    at.XAxis = e.siteEchartDto.times;
    if (e.targetQuality == 1) {
      at.marklineObj.nh4n = 0.15;
      at.marklineObj.DO = 7.5;
      at.marklineObj.codcr = 15;
      at.marklineObj.cond = "";
      at.marklineObj.ph = "";
    } else if (e.targetQuality == 2) {
      at.marklineObj.nh4n = 0.5;
      at.marklineObj.DO = 6;
      at.marklineObj.codcr = 15;
      at.marklineObj.cond = "";
      at.marklineObj.ph = "";
    } else if (e.targetQuality == 3) {
      at.marklineObj.nh4n = 1;
      at.marklineObj.DO = 5;
      at.marklineObj.codcr = 20;
      at.marklineObj.cond = "";
      at.marklineObj.ph = "";
    } else if (e.targetQuality == 4) {
      at.marklineObj.nh4n = 1.5;
      at.marklineObj.DO = 3;
      at.marklineObj.codcr = 30;
      at.marklineObj.cond = "";
      at.marklineObj.ph = "";
    } else if (e.targetQuality == 5) {
      at.marklineObj.nh4n = 2;
      at.marklineObj.DO = 2;
      at.marklineObj.codcr = 40;
      at.marklineObj.cond = "";
      at.marklineObj.ph = "";
    }
    e.siteEchartDto.datas.forEach((j) => {
      switch (j.dataKey) {
        case "nh4n":
          at.nh4n = j.datas;
          break;
        case "DO":
          at.DO = j.datas;
          break;
        case "codcr":
          at.codcr = j.datas;
          break;
        case "cond":
          at.cond = j.datas;
          break;
        case "ph":
          at.ph = j.datas;
          break;
      }
    });
    if (e.siteEchartDto?.times?.length > 0) {
      arr.push(obj);
    }

    obj.chartInfo.refresh = Math.random();
  });
  AllData.allSZ = arr;
  console.log("AllData.allSZ", AllData.allSZ);
}
function chuliDataFunPK() {
  let arr = [];
  let data = AllData.PKdata;
  console.log("dataPK", data);
  data.forEach((e) => {
    let obj = {
      stName: e.stName,
      stCode: e.stCode,
      targetQuality: e.targetQuality,
      chartInfo: {
        refresh: 1,
        DataName: "",
        XAxis: [],
        typeName: "",
        YAxis: [0, 1, 6, 3, 4],
        loading: false,
        yAxisarr: [],
        marklinearr: [],
      },
    };
    let at = obj.chartInfo;
    e.siteEchartDto.datas.map((item) => {
      at.marklinearr.push(...item.cordonLineList);
    });
    at.XAxis = e.siteEchartDto.times;
    at.yAxisarr = e.siteEchartDto.datas;
    if (e.siteEchartDto?.times?.length > 0) {
      arr.push(obj);
    }
    at.refresh = Math.random();
  });
  console.log("arrPK", arr);
  AllData.allPK = arr;
}
// 通过name去定位到某一个echarts
const SZEchartsScrollTop = (item) => {
  AllData.activeName = "PK";
  chuliDataFunPK();
  nextTick(() => {
    //  获取一个单位的echart元素高度
    let EchartsHeight = PKeachLake.value[0].offsetHeight;
    // 获取当前站点名称在所有数据中的索引
    var index = AllData.allPK.findIndex(function (element) {
      return element.stName == item.name;
    });
    scrollContainer.value.scrollTop = index * EchartsHeight;
  });
};
onMounted(() => {
  bus.on("SZEchartsScrollTop", SZEchartsScrollTop);
});

onBeforeUnmount(() => {
  bus.off("SZEchartsScrollTop");
});
</script>

<style lang="scss" scoped>
#YSIndex_right2 {
  width: 100%;
  height: 100%;

  .historySZ {
    height: calc((100% - 30px) / 3);
  }
  #Charts,
  #history {
    width: calc(100% - 10px);

    height: calc(100% - 32px);
  }
  .chartsbox {
    height: calc((100% - 68px) / 3 * 2);
    overflow-y: auto;
  }
  .eachLake {
    height: calc((100% - 30px) / 2);
  }
  :deep(.el-select .el-input__inner) {
    color: #fff;
  }
}
</style>