diff --git a/src/api/api.ts b/src/api/api.ts index 3e16d7f..32821e8 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -9,6 +9,7 @@ import { getBasePoints as getFirefighterBasePoints, getPointDetailById as getFir import { getBasePoints as getStorePointsBasePoints, getPointDetailById as getStorePointsPointDetailById} from './store-points' import { getBasePoints as getSchoolsBasePoints, getPointDetailById as getSchoolsPointDetailById} from './schools' import { getBasePoints as getBridgesBasePoints, getPointDetailById as getBridgesPointDetailById} from './bridges' +import { getBasePoints as getReservoirsBasePoints, getPointDetailById as getReservoirsPointDetailById} from './reservoirs' import type { ApiResponse } from '@/types/ApiResponse' import type { XianHiddenDangerSpots } from '@/types/base/XianHiddenDangerSpots' import type { XianRiskSpots } from '@/types/base/XianRiskSpots' @@ -19,6 +20,7 @@ import type { XianFirefighter } from '@/types/base/XianFirefighter' import type { XianStorePoints } from '@/types/base/XianStorePoints' import type { XianSchool } from '@/types/base/XianSchool' import type { XianBridge } from '@/types/base/XianBridge.ts'; +import type { XianReservoirList } from '@/types/base/XianReservoirList'; /** * API接口统一导出对象 @@ -178,4 +180,20 @@ export const $api = { */ getPointDetailById: (id: number): Promise> => getBridgesPointDetailById(id), }, + + // 水库信息 + reservoirs: { + /** + * 获取所有基础水库 + * @returns 水库数据数组 + */ + getBasePoints: (): Promise> => getReservoirsBasePoints(), + + /** + * 根据id获取水库详情 + * @param id - 水库id + * @returns 水库详情 + */ + getPointDetailById: (id: number): Promise> => getReservoirsPointDetailById(id), + }, } diff --git a/src/api/reservoirs.ts b/src/api/reservoirs.ts new file mode 100644 index 0000000..9dd05cd --- /dev/null +++ b/src/api/reservoirs.ts @@ -0,0 +1,20 @@ +import type { ApiResponse } from "@/types/ApiResponse" +import type { XianReservoirList } from "@/types/base/XianReservoirList" +import httpInstance from "@/utils/request/http" + +/** + * 获取水库基础数据 + * @returns 水库数据数组 + */ +export const getBasePoints = (): Promise> => { + return httpInstance.get('/reservoir/base-points') +} + +/** + * 根据id获取水库详情 + * @param id - 水库id + * @returns 水库详情 + */ +export const getPointDetailById = (id: number): Promise> => { + return httpInstance.get(`/reservoir/point-detail/${id}`) +} diff --git a/src/assets/images/icon/reservoir.png b/src/assets/images/icon/reservoir.png new file mode 100644 index 0000000..b04c9f6 Binary files /dev/null and b/src/assets/images/icon/reservoir.png differ diff --git a/src/assets/images/icon/subway.png b/src/assets/images/icon/subway.png new file mode 100644 index 0000000..859ed6b Binary files /dev/null and b/src/assets/images/icon/subway.png differ diff --git a/src/assets/index.ts b/src/assets/index.ts index 0f78aef..f6f58e6 100644 --- a/src/assets/index.ts +++ b/src/assets/index.ts @@ -13,6 +13,8 @@ export { default as firefighterIcon } from '@/assets/images/icon/firefighter.png export { default as storePointsIcon } from '@/assets/images/icon/store-points.jpg'; export { default as schoolIcon } from '@/assets/images/icon/school.png'; export { default as bridgeIcon } from '@/assets/images/icon/bridge.png'; +export { default as reservoirIcon } from '@/assets/images/icon/reservoir.png'; +export { default as subwayIcon } from '@/assets/images/icon/subway.png'; // 图片 export { default as backgroundImage } from '@/assets/images/background-image.png'; diff --git a/src/component/rain-earthquake/ControlShowDetailComponent.vue b/src/component/rain-earthquake/ControlShowDetailComponent.vue index 1aeb96f..b367771 100644 --- a/src/component/rain-earthquake/ControlShowDetailComponent.vue +++ b/src/component/rain-earthquake/ControlShowDetailComponent.vue @@ -91,6 +91,14 @@ useStatusStore().infrastructureLayers.showBridge.loading " /> + + + diff --git a/src/component/rain-earthquake/detail-panels/ReservoirComponent.vue b/src/component/rain-earthquake/detail-panels/ReservoirComponent.vue new file mode 100644 index 0000000..dae4aef --- /dev/null +++ b/src/component/rain-earthquake/detail-panels/ReservoirComponent.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/config/config.json b/src/config/config.json index efce1dd..15b9ebb 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -42,6 +42,7 @@ "fireStationPointId": "fire-station-point-", "storePointsPointId": "store-points-point-", "schoolPointId": "school-point-", - "bridgePointId": "bridge-point-" + "bridgePointId": "bridge-point-", + "reservoirPointId": "reservoir-point-" } } \ No newline at end of file diff --git a/src/hooks/earthquake/useEarthquakeDisasterChain.ts b/src/hooks/earthquake/useEarthquakeDisasterChain.ts index 57eae3e..91c7743 100644 --- a/src/hooks/earthquake/useEarthquakeDisasterChain.ts +++ b/src/hooks/earthquake/useEarthquakeDisasterChain.ts @@ -259,9 +259,7 @@ export const useEarthquakeDisasterChain = () => { name: '显示水库', statusStore: statusStore.infrastructureLayers, statusKey: 'showReservoir' as const, - callback: (status: unknown) => { - console.log('显示水库', status); - }, + callback: layerControl.clickReservoir, }, { name: '显示地铁站', diff --git a/src/hooks/map/useMap.ts b/src/hooks/map/useMap.ts index fa3e8aa..3ee884e 100644 --- a/src/hooks/map/useMap.ts +++ b/src/hooks/map/useMap.ts @@ -84,6 +84,11 @@ export const useMap = () => { useLoadingInformationStore().bridge.id = id; } + // 水库 + else if (pickedObject.id.startsWith(config.prefix.reservoirPointId)) { + useLoadingInformationStore().reservoir.id = id; + } + // 其他 else { // 重置状态 diff --git a/src/hooks/rain-earthquake/useLayerControl.ts b/src/hooks/rain-earthquake/useLayerControl.ts index 761e7ac..bab1c21 100644 --- a/src/hooks/rain-earthquake/useLayerControl.ts +++ b/src/hooks/rain-earthquake/useLayerControl.ts @@ -102,6 +102,13 @@ export const useLayerControl = () => { useStatusStore().infrastructureLayers.showBridge.loading = true; }; + /** + * 显示水库 + */ + const clickReservoir = () => { + useStatusStore().infrastructureLayers.showReservoir.loading = true; + }; + return { clickHiddenDangerPoint, clickHospital, @@ -116,5 +123,6 @@ export const useLayerControl = () => { clickHighway, clickNationRoad, clickBridge, + clickReservoir, }; }; diff --git a/src/hooks/rain-earthquake/useReservoirPoint.ts b/src/hooks/rain-earthquake/useReservoirPoint.ts new file mode 100644 index 0000000..75e79ba --- /dev/null +++ b/src/hooks/rain-earthquake/useReservoirPoint.ts @@ -0,0 +1,28 @@ +import { reservoirIcon } from '@/assets'; + +/** + * 水库相关钩子函数 + * @returns 字段映射和获取图标方法 + */ +export const useReservoirPoint = () => { + /** + * 字段映射配置 + */ + const field = { + reservoirName: '水库名称', + location: '地理位置', + safetyAssessResult: '安全等级', + lon: '经度', + lat: '纬度', + }; + + /** + * 获取水库图标 + * @returns 图标路径 + */ + function getDisasterIcon(): string { + return reservoirIcon; + } + + return { field, getDisasterIcon }; +}; diff --git a/src/hooks/rainstorm/useRainDisasterChain.ts b/src/hooks/rainstorm/useRainDisasterChain.ts index 32a0143..0c408c1 100644 --- a/src/hooks/rainstorm/useRainDisasterChain.ts +++ b/src/hooks/rainstorm/useRainDisasterChain.ts @@ -282,9 +282,7 @@ export const useRainDisasterChain = () => { name: '显示水库', statusStore: statusStore.infrastructureLayers, statusKey: 'showReservoir' as const, - callback: (status: unknown) => { - console.log('显示水库', status); - }, + callback: layerControl.clickReservoir, }, { name: '显示地铁站', diff --git a/src/stores/useLoadingInformation.ts b/src/stores/useLoadingInformation.ts index bd0d3bd..676e738 100644 --- a/src/stores/useLoadingInformation.ts +++ b/src/stores/useLoadingInformation.ts @@ -100,6 +100,14 @@ export const useLoadingInformationStore = defineStore( id: -1, }); + // ============================== 水库状态 ================================ + const reservoir = reactive({ + /** 加载状态 */ + loading: false, + /** 水库ID */ + id: -1, + }); + /** * 重置所有状态 */ @@ -143,6 +151,10 @@ export const useLoadingInformationStore = defineStore( // 桥梁状态重置 bridge.loading = false; bridge.id = -1; + + // 水库状态重置 + reservoir.loading = false; + reservoir.id = -1; }; return { @@ -156,6 +168,7 @@ export const useLoadingInformationStore = defineStore( storePoints, school, bridge, + reservoir, resetStatue, }; diff --git a/src/types/base/XianReservoirList.ts b/src/types/base/XianReservoirList.ts new file mode 100644 index 0000000..9279e99 --- /dev/null +++ b/src/types/base/XianReservoirList.ts @@ -0,0 +1,17 @@ +import type { Point } from './Point'; + +/** + * 西安市水库数据接口 + */ +export interface XianReservoirList extends Point { + /** 水库名称 */ + reservoirName?: string; + /** 水库位置 */ + location?: string; + /** 安全评定结果 */ + safetyAssessResult?: string; + /** 经度 */ + lon?: number; + /** 纬度 */ + lat?: number; +} diff --git a/src/types/common/LoadingResourceType.ts b/src/types/common/LoadingResourceType.ts index 734c338..26b62bd 100644 --- a/src/types/common/LoadingResourceType.ts +++ b/src/types/common/LoadingResourceType.ts @@ -37,5 +37,10 @@ export enum LoadingResource { */ BRIDGE = 'BRIDGE', + /** + * 水库 + */ + RESERVOIR = 'RESERVOIR', + }