|
|
@@ -22,7 +22,8 @@
|
|
|
:prefix-icon="Search" @keyup.enter="applyFilters"/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="设施类型">
|
|
|
- <el-select v-model="selectedFacilityType" class="status-select" clearable placeholder="全部设施类型">
|
|
|
+ <el-select v-model="selectedFacilityType" class="status-select" clearable placeholder="全部设施类型"
|
|
|
+ @change="applyFacilityTypeToLayers">
|
|
|
<el-option v-for="item in facilityTypes" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
@@ -49,7 +50,8 @@
|
|
|
:prefix-icon="Search"
|
|
|
@keyup.enter="handleSearch"
|
|
|
/>
|
|
|
- <el-select v-model="selectedFacilityType" class="type-select" placeholder="全部设施类型" clearable>
|
|
|
+ <el-select v-model="selectedFacilityType" class="type-select" placeholder="全部设施类型" clearable
|
|
|
+ @change="applyFacilityTypeToLayers">
|
|
|
<el-option v-for="item in facilityTypes" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
<el-button type="primary" :icon="Refresh" @click="refreshScene">刷新</el-button>
|
|
|
@@ -405,6 +407,26 @@ async function loadFacilityDetail() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 设施类型筛选即图层控制:选中某类型时只保留该图层,清空时恢复全部图层。
|
|
|
+ * 地图点位/管线来自 visibleMapModel,因此图层状态会直接决定地图渲染内容。
|
|
|
+ */
|
|
|
+function applyFacilityTypeToLayers(type) {
|
|
|
+ facilityTypes.forEach(item => {
|
|
|
+ layerState[item.value] = type ? item.value === type : true
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/** 手动勾选图层时反向同步筛选:仅剩一个图层时回填类型,其余情况视为“全部”。 */
|
|
|
+function syncFacilityTypeFromLayers() {
|
|
|
+ const enabled = facilityTypes.filter(item => layerState[item.value]).map(item => item.value)
|
|
|
+ selectedFacilityType.value = enabled.length === 1 ? enabled[0] : ''
|
|
|
+}
|
|
|
+
|
|
|
+watch(layerState, () => {
|
|
|
+ syncFacilityTypeFromLayers()
|
|
|
+}, { deep: true })
|
|
|
+
|
|
|
function applyFilters() {
|
|
|
if (searchKeyword.value.trim()) {
|
|
|
handleSearch()
|
|
|
@@ -416,6 +438,7 @@ function applyFilters() {
|
|
|
function resetFilters() {
|
|
|
searchKeyword.value = ''
|
|
|
selectedFacilityType.value = ''
|
|
|
+ applyFacilityTypeToLayers('')
|
|
|
detailOpen.value = false
|
|
|
loadGisData()
|
|
|
}
|