Newer
Older
HuangJiPC / src / pages / views / WatershedOneMap / newPart / changzhanGq.vue
@zhangdeliang zhangdeliang on 21 Jun 21 KB update
<template>
  <!-- 控制路网 -->
  <!-- 厂站工情 -->
  <div class="lyInfoThree">
    <!-- 流域工情概览 -->
    <div class="scene">
      <div class="publicTitle">流域工情概览</div>
      <div class="lygqgl">
        <div class="part">
          <p class="title">污水处理量</p>
          <div class="bg">{{ sewagevalue.sewageTreatmentType1}}万m³</div>
          <p>黄孝河{{ sewagevalue.sewageTreatmentType2 }}万m³</p>
          <p>机场河{{ sewagevalue.sewageTreatmentType3 }}万m³</p>
        </div>
        <div class="part">
          <p class="title">防洪排涝抽排量</p>
          <div class="bg">{{ floodvalue.waterloggingDrainagetilType1 }}万m³</div>
          <p>黄孝河{{ floodvalue.waterloggingDrainagetilType2 }}万m³</p>
          <p>机场河{{ floodvalue.waterloggingDrainagetilType3 }}万m³</p>
        </div>
        <div class="part">
          <p class="title">生态补水量</p>
          <div class="bg">{{ ecologicalvalue.ecologicalWaterSupplemenType1 }}万m³</div>
          <p>黄孝河{{ ecologicalvalue.ecologicalWaterSupplemenType2 }}万m³</p>
          <p>机场河{{ ecologicalvalue.ecologicalWaterSupplemenType3 }}万m³</p>
        </div>
      </div>
    </div>
    <!-- 厂站运行监控 -->
    <div class="rainCount">
      <div class="publicTitle">厂站运行监控</div>
      <div class="navBtn">
        <p :class="[yxjkIndex == 1 ? 'active' : '']"
           @click="checkYxjk(1)">黄孝河</p>
        <p :class="[yxjkIndex == 2 ? 'active' : '']"
           @click="checkYxjk(2)">机场河</p>
      </div>
      <div class="czyxjk">
        <n-tabs type="line"
                v-model:value="yxjkVal"
                @update:value="handleUpdateValue"
                justify-content="flex-end"
                animated>
          <n-tab-pane name="0"
                      tab="污水系统">
            <div class="content">
              <div class="table">
                <n-data-table :columns="columns"
                              :data="tableData"
                              :loading="tableLoading"
                              :bordered="false" />
              </div>
            </div>
          </n-tab-pane>
          <n-tab-pane name="3"
                      tab="CSO管控系统">
            <div class="content">
              <div class="table">
                <n-data-table :columns="CSOcolumns"
                              :data="CSOtableData"
                              :loading="tableLoading"
                              :bordered="false" />
              </div>
            </div>
          </n-tab-pane>
          <n-tab-pane name="1"
                      tab="排涝系统">
            <div class="content">
              <n-data-table :columns="raincolumns"
                            :data="raintableData"
                            :loading="tableLoading"
                            :bordered="false" />
              <!-- <div style="margin-bottom: 15px"
                   v-for="(item, index) in tableData"
                   :key="'a' + index">
                <div class="title"
                     @click="rainsystem(1)">{{ item.stationName }}</div>
                <div class="pailiang">
                  日抽排量 <span class="num">{{ item.dayPullMount }} </span>m³
                  <div class="percent num">{{ percentage }}%</div>
                  <n-progress type="line"
                              status="success"
                              :percentage="percentage"
                              :indicator-placement="'inside'" />
                </div>
                <div class="detail">
                  <div style="display: flex">
                    <p class="ljpl">
                      累计排量 <span class="num">{{ item.dayPullMount }} </span>万m³
                    </p>
                    <p class="qcsw">
                      前池水位 <span class="num">{{ item.aheadPoolHigh }} </span>m
                    </p>
                  </div>
                  <div class="bengzhan">
                    <div class="bzCount">
                      <div class="normal fail"></div>
                      <p>1#</p>
                    </div>
                    <div class="bzCount">
                      <div class="normal fail"></div>
                      <p>2#</p>
                    </div>
                    <div class="bzCount">
                      <div class="normal fail"></div>
                      <p>3#</p>
                    </div>
                    <div class="bzCount">
                      <div class="normal fail"></div>
                      <p>4#</p>
                    </div>
                    <div class="bzCount">
                      <div class="normal fail"></div>
                      <p>5#</p>
                    </div>
                  </div>
                </div>
              </div> -->
            </div>
          </n-tab-pane>
          <n-tab-pane name="2"
                      tab="补水系统">
            <div class="content">
              <n-data-table :columns="bushuicolumns"
                            :data="BStableData"
                            :loading="tableLoading"
                            :bordered="false" />
              <!-- <div v-for="(item, index) in tableData"
                   :key="'b' + index"
                   style="margin-bottom: 15px">
                <div class="pailiang"
                     @click="bushuisystem(1)">
                  {{ item.stationName }} 日补水量: <span class="num">{{ item.dayRepleMount }}</span>m³
                </div>
              </div>
              <div class="bushuiLx"
                   v-if="yxjkIndex == 0"> -->
              <!-- 箭头流向 -->
              <!-- <div class="line"
                     style="width: 190px; left: 62px; bottom: 32px; transform: rotate(-180deg)"></div>
                <div class="line"
                     style="width: 190px; left: 62px; bottom: 170px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 76px; left: 182px; bottom: 234px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 76px; left: 180px; bottom: 110px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 25px; left: 312px; bottom: 234px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 15px; left: 328px; bottom: 244px; transform: rotate(-90deg)"></div>
                <div class="line"
                     style="width: 75px; left: 108px; bottom: 318px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 40px; left: 39px; bottom: 53px; transform: rotate(-90deg)"></div>
                <div class="line"
                     style="width: 40px; left: 39px; bottom: 153px; transform: rotate(-90deg)"></div>
                <div class="line"
                     style="width: 35px; left: 42px; bottom: 284px; transform: rotate(-90deg)"></div>
                <div class="line"
                     style="width: 255px; left: 51px; bottom: 214px; transform: rotate(90deg)"></div>
              </div>
              <div class="bushuiJch"
                   v-if="yxjkIndex == 1">
                <div class="line"
                     style="width: 170px; left: 147px; bottom: 44px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 120px; left: 147px; bottom: 86px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 170px; left: 147px; bottom: 129px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 120px; left: 147px; bottom: 177px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 120px; left: 147px; bottom: 261px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 170px; left: 147px; bottom: 221px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 30px; left: 110px; bottom: 177px; transform: rotate(0deg)"></div>
                <div class="line"
                     style="width: 126px; left: 83px; bottom: 104px; transform: rotate(90deg)"></div>
                <div class="line"
                     style="width: 80px; left: 106px; bottom: 224px; transform: rotate(-90deg)"></div>
                <div class="line"
                     style="width: 75px; left: 31px; bottom: 234px; transform: rotate(90deg)"></div>
              </div> -->
            </div>
          </n-tab-pane>
        </n-tabs>
      </div>
    </div>
  </div>
</template>
<script>
import { toRefs, onMounted, reactive, onBeforeUnmount, h } from 'vue';
import { czgqMonitor, sewageTreatment, floodControl, ecologicalWater, czgqrainMonitor,czgqCSOMonitor,czgqBSMonitor } from '@/services';
import { NTag } from 'naive-ui';
import bus from '@/utils/util';
import Popup from './Popup.vue';

export default {
  name: 'lyInfoThree',
  components: {
    Popup,
  },
  setup() {
    const allData = reactive({
      isPipelineflowShow: false,
      wushuisystem: null,
      yushuisystem: null,
      detailData: {},
      sewagevalue: {},
      floodvalue: {},
      ecologicalvalue: {},
      yxjkIndex: 1,
      yxjkVal: '0',
      percentage: '80',
      checkedLegend: [
        { isCheck: true, layername: 'layer1' },
        { isCheck: false, layername: 'layer3' },
        { isCheck: false, layername: 'layer4' },
        { isCheck: false, layername: 'layer5' },
        { isCheck: false, layername: 'layer6' },
        { isCheck: false, layername: 'layer8' },
        { isCheck: false, layername: 'layer9' },
        { isCheck: false, layername: 'layer11' },
        { isCheck: false, layername: 'layer12' },
      ],
      tableData: [],
      raintableData: [],
      CSOtableData:[],
      BStableData:[],
      tableLoading: false,
      columns: [
        {
          title: '工程类型',
          key: 'stationClass',
          align: 'center',
        },
        {
          title: '厂站名称',
          key: 'name',
          align: 'center',
        },
        {
          title: '日处理量m³',
          key: 'dailyProcessingCapacity',
          align: 'center',
        },
        {
          title: '累计万m³',
          key: 'sewageDisposalTotal',
          align: 'center',
        },
      ],
      raincolumns: [
        { title: "工程名称", key: "name", align: 'center', },
        { title: "日抽排水量(万吨)", key: "pumpingAndDrainageTotal", align: 'center', },
        { title: "开机台数", key: "startUpNum", align: 'center', },
        { title: "前池水位(m)", key: "foreBayLevel", align: 'center', },
      ],
      CSOcolumns: [
        { title: "工程类型", key: "stationClass", align: 'center', },
        { title: "工程名称", key: "name" , align: 'center',},
        { title: " 运行监控情况", key: "monitorSituation", align: 'center', },
      ],
      bushuicolumns: [
        { title: "工程类型", key: "stationClass" , align: 'center',},
        { title: "工程名称", key: "name", align: 'center', },
        { title: " 补水水量(万吨)", key: "rehydrationNum" , align: 'center',},
      ],
    });
    // 切换河流
    const checkYxjk = val => {
      allData.yxjkIndex = val;
      getMonitor();
      if (val == 1) {
        mapbox._map.setPitch(60).setBearing(45);
        setTimeout(() => {
          mapbox.flyto([114.292596, 30.645028], 14, 0.8);
        }, 300);
      } else {
        mapbox._map.setPitch(55).setBearing(300);
        setTimeout(() => {
          mapbox.flyto([114.225596, 30.65028], 13.8, 0.8);
        }, 300);
      }
    };
    // 切换二级tab
    async function handleUpdateValue(val) {
      allData.yxjkVal = val;
      getMonitor();
    }
    // 获取相应数据
    async function getMonitor() {
      let params = {
        type: allData.yxjkIndex,
      };
      //污水系统
      let res1 = await czgqMonitor(params);
      if (res1 && res1.code == 200) {
        allData.tableData = res1.data;
      }
      //排涝系统
      let res2 = await czgqrainMonitor(params);
      if (res2 && res2.code == 200) {
        allData.raintableData = res2.data
      }
      //CSO
      let res3=await czgqCSOMonitor(params);
      if(res3&&res3.code==200){
        allData.CSOtableData=res3.data
      }
      //补水系统
      let res4=await czgqBSMonitor(params);
      if(res4&&res4.code==200){
        allData.BStableData=res4.data
      }
    }

    const rainsystem = val => { };

    const bushuisystem = val => { };

    // 污水系统 场站名称点击
    async function checkCzName(row) { }

    // 工情概览数据  floodControl
    async function Sewageinfo() {
      let res = await sewageTreatment();
      if (res && res.code == 200) {
        allData.sewagevalue = res.data;
      }
    }
    async function Floodinfo() {
      let res = await floodControl();
      if (res && res.code == 200) {
        allData.floodvalue = res.data;
      }
    }
    async function Ecologicalinfo() {
      let res = await ecologicalWater();
      if (res && res.code == 200) {
        allData.ecologicalvalue = res.data;
      }
    }
    //添加弹窗
    const getMapJSON = async () => {
      for (let i = 0; i < 12; i++) {
        mapbox._map.on('click', 'layer' + i + '_layer', function (e) {
          e.preventDefault();
          const features = mapbox._map.queryRenderedFeatures(e.point);
          // 判断是否点击当前点位
          features.map(item => {
            if (item.layer.id == 'layer' + i + '_layer') {
              // 拼接显示详情内容
              bus.emit('pointToDetail', item);
            }
          });
        });
        mapbox.changeTypeOfmouse('layer' + i + '_layer'); //切换鼠标样式
      }
      bus.on('pointToDetail', param => {
        mapbox.markerPopup(param, mapbox.createPopup(Popup, param.properties));
      });
    };

    onMounted(() => {
      Sewageinfo();
      Floodinfo();
      Ecologicalinfo();
      getMonitor();
      getMapJSON();
      mapbox._map.setPitch(60).setBearing(0);
      setTimeout(() => {
        mapbox.flyto([114.275596, 30.610028], 13.2, 0.8);
      }, 300);
      // 设置默认选中的图例图层
      setTimeout(() => {
        bus.emit('showDefaultLegend', allData.checkedLegend);
      });
    });

    onBeforeUnmount(() => {
      //清空图例默认开启,true 代表关闭图层
      bus.emit('showDefaultLegend', [
        { isCheck: true, layername: 'layer1' },
        { isCheck: true, layername: 'layer3' },
        { isCheck: true, layername: 'layer4' },
        { isCheck: true, layername: 'layer5' },
        { isCheck: true, layername: 'layer6' },
        { isCheck: true, layername: 'layer8' },
        { isCheck: true, layername: 'layer9' },
        { isCheck: true, layername: 'layer11' },
        { isCheck: true, layername: 'layer12' },
      ]);
      //清除选中图层
      //!!window.timeranhan && clearInterval(window.timeranhan);
      //!!window.timerwater && clearInterval(window.timerwater);
      !!window.timertuokuan && clearInterval(window.timertuokuan);
      !!window.timerspread && clearInterval(window.timerspread);
      //!!window.timerflow && clearInterval(window.timerflow);
      !!window.timerbushui && clearInterval(window.timerbushui);
      //清除弹窗
      bus.off('pointToDetail');
      if (!!mapbox._popup) {
        mapbox._popup.remove();
      }
      mapbox._map.setPitch(60).setBearing(0);
      setTimeout(() => {
        mapbox.flyto([114.275596, 30.610028], 13.5, 0.8);
      }, 300);
    });
    return {
      ...toRefs(allData),
      checkYxjk,
      handleUpdateValue,
      checkCzName,
      rainsystem,
      bushuisystem,
      getMapJSON,
    };
  },
};
</script>
<style lang="less">
.lyInfoThree {
  width: 100%;
  height: 100%;
  .scene {
    margin-top: 10px;
    .lygqgl {
      margin-top: 20px;
      width: 430px;
      height: 200px;
      display: flex;
      justify-content: center;
      .part {
        width: 33%;
        font-size: 16px;
        .title {
          color: #fff;
          font-family: '';
        }
        p {
          text-align: center;
          font-family: PangMenZhengDao;
          margin-bottom: 5px;
        }
        .bg {
          width: 119px;
          height: 85px;
          line-height: 85px;
          text-align: center;
        }
      }
      .part:nth-of-type(1) {
        color: #d7494b;
        .bg {
          background: url('@/assets/Imgs/fangxunMap/lygqwsBg.png') no-repeat center;
        }
      }
      .part:nth-of-type(2) {
        color: #2abcc8;
        .bg {
          background: url('@/assets/Imgs/fangxunMap/lygqfhBg.png') no-repeat center;
        }
      }
      .part:nth-of-type(3) {
        color: #0dd77c;
        .bg {
          background: url('@/assets/Imgs/fangxunMap/lygqstBg.png') no-repeat center;
        }
      }
    }
  }
  .num {
    font-size: 20px;
    font-family: PangMenZhengDao;
  }
  .rainCount {
    margin-top: 20px;
    position: relative;
    .czyxjk {
      margin-top: 10px;
      width: 430px;
      .content {
        max-height: 440px;
        width: 100%;
        overflow: auto;
        padding: 5px 20px;
        font-size: 15px;
        .title {
          font-size: 14px;
          cursor: pointer;
        }
        .table {
          width: 100%;
          overflow: auto;
          .n-data-table-td,
          .n-data-table-th {
            padding: 6px !important;
            text-align: center;
          }
        }
        .pailiang {
          color: #0db56f;
          background: rgba(1, 27, 46, 0.7);
          padding: 10px 20px;
          border-radius: 3px;
          .percent {
            width: 100px;
            float: right;
            text-align: right;
          }
          .n-progress-graph-line-rail {
            margin-top: 10px;
            height: 5px;
            .n-progress-graph-line-indicator {
              display: none;
            }
          }
        }
        .bushuiLx {
          width: 358px;
          height: 335px;
          margin: 10px auto;
          background: url('@/assets/Imgs/fangxunMap/bsxtHxh.png') no-repeat center;
          position: relative;
          .line {
            position: absolute;
            height: 5px;
            background: url('@/assets/newImgs/lineArrow.png') no-repeat center;
          }
        }
        .bushuiJch {
          position: relative;
          width: 358px;
          height: 335px;
          margin: 10px auto;
          background: url('@/assets/Imgs/fangxunMap/bsxtJch.png') no-repeat center;
          .line {
            position: absolute;
            height: 5px;
            background: url('@/assets/newImgs/lineArrow.png') no-repeat center;
          }
        }
        .detailBushui {
          padding: 10px 20px 0;
          background: rgba(1, 27, 46, 0.3);
          display: flex;
          text-align: center;
          align-items: center;
          .bsxt {
            width: 33%;
            .dabiao {
              width: 54px;
              height: 21px;
              margin-left: 25px;
              background: url('@/assets/Imgs/fangxunMap/dabiao.png') no-repeat center;
            }
            .titleBs {
              font-size: 15px;
              margin: 10px auto;
            }
            .footer {
              width: 97px;
              height: 58px;
              margin-left: 10px;
              background: url('@/assets/Imgs/fangxunMap/bsxtBg.png') no-repeat center;
            }
          }
        }
        .detail {
          padding: 10px 20px;
          background: rgba(1, 27, 46, 0.3);
          .ljpl {
            color: #e28c20;
            width: 50%;
          }
          .qcsw {
            color: #16a2aa;
            width: 50%;
            text-align: left;
          }
          .bengzhan {
            display: flex;
            flex-wrap: wrap;
            .bzCount {
              width: 40px;
              margin: 10px;
              .normal {
                width: 40px;
                height: 40px;
              }
              p {
                text-align: center;
                margin-top: 5px;
                background: rgba(1, 27, 46, 0.7);
                border-radius: 20px;
              }
              .success {
                background: url('@/assets/Imgs/fangxunMap/bzSuccess.png') no-repeat center;
              }
              .fail {
                background: url('@/assets/Imgs/fangxunMap/bzFail.png') no-repeat center;
              }
            }
          }
        }
      }
      .n-tabs-nav-scroll-content {
        border-bottom: 1px solid rgba(0, 0, 0, 0) !important;
      }
      .n-tabs-tab-wrapper {
        padding-right: 20px;
      }
    }
    .navBtn {
      position: absolute;
      right: 0px;
      top: 5px;
      width: 160px;
      height: 30px;
      display: flex;
      p {
        width: 75px;
        height: 25px;
        line-height: 27px;
        text-align: center;
        color: #d4f7ff;
        cursor: pointer;
        margin-right: 10px;
      }
      .active {
        background: #16a2aa;
        border-radius: 10px;
        color: #000;
      }
    }
  }
}
</style>