Browse Source

fix: 补充查询内容

feature-v1.0.0
Befend 1 month ago
parent
commit
40c59cc7cb
  1. 22
      src/api/map/index.ts
  2. 4
      src/views/Main/DailyPatrolCard/index.vue
  3. 69
      src/views/Main/MapSearch/index.vue

22
src/api/map/index.ts

@ -38,12 +38,26 @@ export const getLayerData = async (url: string, params: any) => {
};
//从水库-水库点图层中,根据水库名称/水平编码,从geojson中查询水库列表
export const getReservoirList = async (layerData: any, searchName: string) => {
const filter = searchName
? `RES_NAME LIKE '%${searchName}%' OR RES_CODE LIKE '%${searchName}%'`
: "1=1";
//
const { serviceToken, text } = layerData;
if (!text) return;
let filter = "1=1";
switch (layerData.nameCn) {
case "水库点":
filter = searchName
? `RES_NAME LIKE '%${searchName}%' OR RES_CODE LIKE '%${searchName}%'`
: "1=1";
break;
case "水闸":
filter = searchName
? `WAGA_NAME LIKE '%${searchName}%' OR WAGA_CODE LIKE '%${searchName}%'`
: "1=1";
break;
case "堤防":
filter = searchName
? `DIKE_NAME LIKE '%${searchName}%' OR DIKE_CODE LIKE '%${searchName}%'`
: "1=1";
break;
}
const queryArr = text.split(";");
let dataUrl = queryArr[0];
const datasourceName = queryArr[1];

4
src/views/Main/DailyPatrolCard/index.vue

@ -1,6 +1,6 @@
<template>
<div class="daily-patrol-card">
<div class="sy-water-cart-second-title">日常巡查</div>
<div class="sy-water-cart-second-title">巡查养护</div>
<div class="echart-wrapper" ref="chartRef"></div>
<div class="appraise-progress">
<div class="tips">
@ -148,7 +148,7 @@ const initChart = () => {
trigger: "item",
// formatter: '{a} <br/>{b}: {c} ({d}%)'
},
color: ["#FFDD77", "#FF9A23", "#F26161", "#28CE8E"],
color: ["#28CE8E", "#FFDD77", "#FF9A23", "#F26161"],
legend: [
{
top: "15%",

69
src/views/Main/MapSearch/index.vue

@ -4,12 +4,7 @@
<iconpark-icon name="search" size="16" fill="#fff"></iconpark-icon>
</span>
<el-popover
placement="bottom"
:width="280"
:visible="popoverVisible"
popper-class="map-search-popper"
>
<el-popover placement="bottom" :width="280" :visible="popoverVisible" popper-class="map-search-popper">
<template #reference>
<el-input
class="map-search-input"
@ -24,10 +19,7 @@
共搜索到<span>{{ searchResultList.length }}</span
>条结果
</div>
<div
v-if="searchResultList.length > 0"
class="map-search-result-list"
>
<div v-if="searchResultList.length > 0" class="map-search-result-list">
<div
class="map-search-result-list-item"
v-for="(item, index) in searchResultList"
@ -35,18 +27,32 @@
@click.stop="flyTo(item)"
>
<div class="title">
<span class="name">{{ item?.properties?.RES_NAME }}</span>
<span class="tag">{{ item?.properties?.ENG_SCAL }}</span>
<span class="name">{{
item?.properties?.RES_NAME ?? item?.properties?.DIKE_NAME ?? item?.properties?.WAGA_NAME
}}</span>
<span class="tag"
>{{
item?.properties?.ENG_SCAL ?? item?.properties?.DIKE_GRAD ?? item?.properties?.WAGA_SCALE
}}</span
>
</div>
<div class="item">
<i></i>工程代码{{ item?.properties?.RES_CODE }}
<i></i>工程代码{{
item?.properties?.RES_CODE ?? item?.properties?.DIKE_CODE ?? item?.properties?.WAGA_CODE
}}
</div>
<div class="item">
<i></i>工程类型{{ item?.properties?.RES_TYPE }}
</div>
<div class="item">
<i></i>工程地址{{ item?.properties?.RES_LOC }}
<i></i>工程类型{{
item?.properties?.RES_TYPE ?? item?.properties?.DIKE_GRAD ?? item?.properties?.WAGA_TYPE
}}
</div>
<template v-if="!item?.properties?.START_LOC && !item?.properties?.END_LOC">
<div class="item"><i></i>工程地址{{ item?.properties?.RES_LOC ?? item?.properties?.WAGA_LOC }}</div>
</template>
<template v-else>
<div class="item"><i></i>堤防起点{{ item?.properties?.START_LOC }}</div>
<div class="item"><i></i>堤防终点{{ item?.properties?.END_LOC }}</div>
</template>
</div>
</div>
<div v-else class="map-search-result-list no-data">
@ -90,34 +96,35 @@ const showPopover = () => {
const searchValue = ref("");
const searchResultList = ref<any[]>([]);
const layerData = computed(() =>
projectStore.selectedLayers.find((f: any) => f.isSupportFastQuery === "1")
);
const layerDatas = computed(() => projectStore.selectedLayers.filter((f: any) => f.isSupportFastQuery === "1"));
const changeInputValue = async (value: string) => {
const searchStr = (value ?? "").trim();
if (!layerData.value) return;
if (!layerDatas.value?.length) return;
if (!searchStr) {
searchResultList.value = [];
return;
}
showPopover();
const data = await getReservoirList(layerData.value, searchStr);
searchResultList.value = data?.features ?? [];
const promiseList: any[] = [];
layerDatas.value.forEach((layerData: any) => {
promiseList.push(getReservoirList(layerData, searchStr));
});
Promise.all(promiseList).then((res: any) => {
let features: any = [];
res.forEach((item: any) => {
features = features.concat(item?.features ?? []);
});
searchResultList.value = features ?? [];
});
};
const flyTo = (item: any) => {
const coordinates = item?.geometry?.coordinates;
if (!coordinates) return;
popoverVisible.value = false;
const center = SyCim.Parse.parsePosition(
`${coordinates[0]},${coordinates[1]},10`
).toCartesian3();
const center = SyCim.Parse.parsePosition(`${coordinates[0]},${coordinates[1]},10`).toCartesian3();
const boundingSphere = new Cesium.BoundingSphere(center, 100);
viewer.camera.flyToBoundingSphere(boundingSphere, {
offset: new Cesium.HeadingPitchRange(
viewer.camera.heading,
viewer.camera.pitch,
500
),
offset: new Cesium.HeadingPitchRange(viewer.camera.heading, viewer.camera.pitch, 500),
duration: 2,
});
};

Loading…
Cancel
Save