Newer
Older
DH_Apicture / src / views / pictureOnMap / inputSearch.vue
@chenke chenke 13 days ago 6 KB add
<template>
  <div class="inputSearch" v-show="Show && number == 4">
    <el-select
      v-model="selectmodel"
      placeholder="请输入关键字"
      style="width: 140px; position: relative"
      filterable
      popper-class="inputSearchselectclass"
      :filter-method="filterMethod"
      placement="bottom"
      clearable
      @change="selectchange"
    >
      <el-tabs v-model="activeName" class="selectTabs demo-tabs" stretch @tab-click="tabsClick">
        <el-tab-pane label="资产" name="zhandian"></el-tab-pane>
        <el-tab-pane label="道路" name="daolu"></el-tab-pane>
      </el-tabs>
      <el-option v-for="(item, index) in filterList" :key="item.pointTypeId" :label="item.name" :value="item.pointTypeId">
        <el-tooltip
          effect="dark"
          :content="item.name"
          :hide-after="0"
          placement="top"
          :show-arrow="false"
          popper-class="inputSearchpopperclass"
        >
          <span v-show="item.name.length >= 15">{{ item.name.slice(0, 15) + '...' }}</span>
        </el-tooltip>
        <span v-show="item.name.length < 15">{{ item.name }}</span>
        <span style="float: right; color: #8fbffe; font-size: 12px; font-family: Source Han Sans CN">
          {{ item.pointTypeName }}
        </span>
      </el-option>
    </el-select>
  </div>
</template>
<script setup>
import bus from '@/bus/';
import useUserStore from '@/store/modules/user';
const appStore = useUserStore();
const { proxy } = getCurrentInstance();
const Show = ref(true);
import iconSearch from '@/views/pictureOnMap/iconSearch.vue';
import { ref } from 'vue';
const props = defineProps({
  diabox: {
    type: Object,
  },
});

const activeName = ref('zhandian');
const number = ref(1);
const SelectList = ref(1);
const filterList = ref([]);
const selectmodel = ref('');
const getItem = ref({});
// 道路数据
const roadData = ref([
  // {
  //   data: [
  //     {
  //       id: 1,
  //       name: '软件园中路',
  //       geometry: '',
  //       pointTypeName: '什么什么路',
  //     },
  //     {
  //       id: 2,
  //       name: '光谷大道',
  //       geometry: '',
  //       pointTypeName: '什么路',
  //     },
  //     {
  //       id: 3,
  //       name: '光谷大道1',
  //       geometry: '',
  //       pointTypeName: '什么路',
  //     },
  //     {
  //       id: 4,
  //       name: '光谷大道3',
  //       geometry: '',
  //       pointTypeName: '什么路',
  //     },
  //     {
  //       id: 5,
  //       name: '关山大道',
  //       geometry: '',
  //       pointTypeName: '1什么路',
  //     },
  //   ],
  // },
]);
watch(
  () => appStore.MapData,
  (newValue, oldValue) => {
    if (appStore.MapData && appStore.MapData.length) {
      if (number.value === 1) {
        console.log('aaaa', appStore.MapData);
        GetSearchList(appStore.MapData);
        number.value = 4;
      }
    }
    // 示例调用
  },
  { deep: true, once: true }
);

function GetSearchList(data) {
  // let data=data1.slice(0, 10);
  SelectList.value = [];
  data.map(item => {
    SelectList.value = SelectList.value.concat(item.data);
  });
  // console.log('MapData', appStore.MapData, SelectList.value);
  filterList.value = JSON.parse(JSON.stringify(SelectList.value));
  // debugger;
}

// 值改变后的操作
function selectchange(value) {
  console.log('valuevalue', value);
  if (value) {
    let arr = SelectList.value.filter(item => {
      return item.pointTypeId == value;
    });
    console.log('arr', arr);

    if (arr && arr[0]) {
      getItem.value = arr[0];
    }
    selectmodel.value = getItem.value.name;
    let feature = turf.feature(Terraformer.WKT.parse(getItem.value.geometry), _.cloneDeep(getItem.value));
    console.log('feature', feature);
    bus.emit('setHighlight', feature);
    newfiberMap.map.easeTo({ center: turf.getCoords(turf.center(feature)), zoom: 15 });
    bus.emit('setGeoJSON', { json: turf.featureCollection([feature]), key: 'temporary' });
  }
}
const filterMethod = _.debounce(value => {
  if (value) {
    filterList.value = SelectList.value.filter(item => item.name.includes(value));
    bus.emit('geoRegeo', {
      name: value,
      callback: results => {
        if (!results.geocodes) return;
        roadData.value = [
          {
            data: results.geocodes.map((i, idx) => ({
              id: idx,
              name: i.formatted_address,
              geometry: `POINT(${gcoord.transform(i.location.split(','), gcoord.AMap, gcoord.WGS84).join(' ')})`,
              pointTypeName: '地理位置',
            })),
          },
        ];
        console.log('roadData.value', roadData.value);
      },
    });
  } else {
    filterList.value = SelectList.value;
  }
  // bus.emit('removeMapDatas',['temporary']);
}, 500);

const tabsClick = e => {
  let type = e.paneName;
  getItem.value = '';
  selectmodel.value = '';
  if (type == 'zhandian') {
    GetSearchList(appStore.MapData);
  } else if (type == 'daolu') {
    GetSearchList(roadData.value);
  }
};
onMounted(() => {
  bus.on('YQ_head', val => {
    console.log('appStore.MapData', appStore.MapData, val);
    if (val == false) {
      Show.value = false;
    } else {
      Show.value = true;
    }
  });
});

onBeforeUnmount(() => {
  bus.off('YQ_head');
});
</script>
<style lang="scss" scoped>
.inputSearch {
  position: fixed;
  right: 190px;
  top: 19px;
  z-index: 999;
  border-radius: 6px;
}
.selectTabs {
  position: absolute;

  width: 100%;
  left: 0;
  top: 0;
}

:deep(.el-input__wrapper) {
  height: 30px !important;
  background: #0d2359 !important;
  border-radius: 6px;
  box-shadow: 0 0 0 0.00521rem var(--el-select-input-focus-border-color) inset !important;
}

:deep(.el-input__wrapper:hover) {
  background: #0d2359 !important;
  border-radius: 6px;
}

:deep(.el-input__inner) {
  color: #8fbffe;
}
:deep(.el-input__inner::placeholder) {
  color: #8fbffe;
}

:deep(.el-select .el-input .el-select__caret.el-icon) {
  color: #8fbffe;
}
</style>
<style lang="scss">
.inputSearchselectclass {
  background: #0d2359 !important;
  border-radius: 6px !important;
  border: 1px solid #0b9bff !important;
  .el-scrollbar {
    padding-top: 40px;
    display: block!important;
  }
  .el-select-dropdown__item {
    font-family: Source Han Sans CN;
    font-weight: bold;
    font-size: 14px;
    color: #ccdfff;
  }

  .el-select-dropdown__item.hover,
  .el-select-dropdown__item:hover {
    background: #243f7f !important;
  }
}

.inputSearchpopperclass {
  z-index: 10000 !important;
  background: #243f7f !important;
  color: #ccdfff !important;
  cursor: pointer;

  .el-popper.is-dark .el-popper__arrow::before {
    background: #243f7f !important;
  }
}
</style>