Newer
Older
KaiFengH5 / src / views / lsxmsb / TemporaryProject.vue
@zhangdeliang zhangdeliang on 2 Sep 5 KB update
<template>
  <!-- 地图 -->
  <div class="position-r" id="map">
    <newFiberMapBox :initJson="`/static/libs/mapbox/style/TemporaryProject.json`"></newFiberMapBox>
  </div>

  <!-- 项目详情弹窗 -->
  <van-popup v-model:show="showBottom" position="center" round>
    <van-cell-group inset>
      <van-cell title="项目名称:" :label="ProjectData.projectName" />
      <van-cell title="项目类型:" :label="ProjectData.projectTypeName" />
      <van-cell title="项目建设情况:" :label="formatter2(ProjectData.buildStatus)" />
      <van-cell title="项目简介:" :label="ProjectData.projectOverview" />
    </van-cell-group>

    <div class="Btn Btn1" @click="patrolFilling(false, ProjectData)">上报问题</div>
  </van-popup>

  <!-- 上报弹窗 -->
  <van-popup v-model:show="showForm" position="top" :style="{ width: '100%' }">
    <div class="TaskTItle" v-if="showForm">问题填报</div>

    <TaskForm
      class="DakaPropID"
      v-if="showForm"
      @closeFormTransition="closeFormTransition"
      :projectName="AllData.projectName"
      :projectCode="AllData.projectCode"
    />
  </van-popup>
</template>

<script setup name="TemporaryProject">
import { getProjects } from '@/api/publicApi.js';
import newFiberMapBox from '@/views/xuncha/gisCommonPage/newFiberMapBox.vue';
import * as turf from '@turf/turf';
import TaskForm from './TaskForm.vue'; // 表单组件
import bus from '@/utils/utils';
import { useStore } from '@/pinia/store.js';

const pinias = useStore();
const timer = ref(null);
const showBottom = ref(false);
const ProjectData = ref({});
const showForm = ref(false); //表单弹窗显隐状态
const AllData = reactive({ projectName: '', projectCode: '', numberNum: '' });
const legendList = ref([
  {
    name: '海绵型建设与社区',
    layername: 'HMJZYSQ',
    data: [],
    isCheck: true,
  },
  {
    name: '海绵型道路广场',
    layername: 'HMXDLGC',
    data: [],
    isCheck: true,
  },
  {
    name: '海绵型公园与绿地',
    layername: 'HMXGYLD',
    data: [],
    isCheck: true,
  },
  {
    name: '海绵型水系',
    layername: 'HMXSX',
    data: [],
    isCheck: true,
  },
  {
    name: '管网排查与修复',
    layername: 'GWPCYXF',
    data: [],
    isCheck: true,
  },
  {
    name: '雨水管网及泵站',
    layername: 'GWJBZ',
    data: [],
    isCheck: true,
  },
  {
    name: 'GIS平台建设与监测设施',
    layername: 'GIS',
    data: [],
    isCheck: true,
  },
]);
const jiansheleixing = ref([
  { name: 'not_approved', font: '尚未立项' },
  { name: 'XMQQSWWCSJJD', font: '在建' },
  { name: 'XMQQSWWCZB', font: '在建' },
  { name: 'not_yet_under_construction', font: '在建' },
  { name: 'opened', font: '在建' },
  { name: 'completed', font: '已竣工' },
  { name: 'Suspended', font: '已停工' },
]);
const getProjectss = async () => {
  pinias.showLoading();
  let { data } = await getProjects();
  let features = data;
  // console.log(features, 'features');
  let projectionFeatures = [];
  features.forEach((element) => {
    if (!element.projectLocation) return;
    let feature = turf.point(element.projectLocation.split(','), element);
    projectionFeatures.push(feature);
    legendList.value.forEach((i) => {
      if (i.layername == element.projectTypeCode) {
        i.data.push(feature);
      }
    });
  });
  legendList.value.forEach((i) => {
    i.data = turf.featureCollection(i.data);
  });
  // console.log('legendList---', legendList.value);
  bus.emit('setLegendData', legendList.value);
  pinias.hideLoading();
  timer.value = setInterval(() => {
    if (!!!newfiberMap.map.getLayer('point')) {
      return;
    } else {
      legendList.value.forEach((i) => {
        bus.emit('setLayerVisible', i);
      });
      clearInterval(timer.value);
    }
  }, 1000);
};

const formatter2 = (item) => {
  let str = '';
  jiansheleixing.value.forEach((element) => {
    if (element.name == item) {
      str = element.font;
    }
  });
  return str;
};

/**
 * 问题填报
 */
const patrolFilling = (val, item) => {
  showForm.value = !showForm.value;
  console.log(item, '1');
  AllData.projectName = item.projectName;
  AllData.projectCode = item.projectNo;
};

// 关闭
const closeFormTransition = (msg) => {
  showForm.value = false;
};

onMounted(() => {
  let initeTimer = setInterval(() => {
    if (!newfiberMap) return;
    getProjectss();
    clearInterval(initeTimer);
  }, 1000);
  setTimeout(() => {
    newfiberMap.map.on('click', 'point', (e) => {
      const feature = (
        newfiberMap.map.queryRenderedFeatures([
          [e.point.x - 10 / 2, e.point.y - 10 / 2],
          [e.point.x + 10 / 2, e.point.y + 10 / 2],
        ]) || []
      ).filter((i) => i.layer.id)[0];
      showBottom.value = true;
      console.log('feature---', feature.properties);
      ProjectData.value = feature.properties;
    });
  }, 2000);
});
onBeforeUnmount(() => {
  if (timer.value) clearInterval(timer.value);
});
</script>

<style lang="less" scoped>
.position-r {
  position: relative;
  width: 100%;
  height: 100%;
  background: #c6c6c6;
}

.Btn {
  width: 190px;
  height: 60px;
  line-height: 60px;
  text-align: center;
  border-radius: 9px 9px 9px 9px;
  opacity: 1;
  margin: 20px auto;
}

.Btn1 {
  background: #409eff;
  font-size: 28px;
  font-family: Source Han Sans CN-Regular, Source Han Sans CN;
  font-weight: 400;
  color: #ffffff;
}
.TaskTItle {
  width: 100%;
  height: 80px;
  text-align: center;
  line-height: 80px;
  background: #fdfdfd;
  position: relative;
  font-size: 32px;
  font-family: Source Han Sans CN-Regular, Source Han Sans CN;
  font-weight: 400;

  .ClearClass {
    position: absolute;
    right: 10px;
    top: 0;
  }
}
</style>