diff --git a/src/api/api.ts b/src/api/api.ts index 7ad30b8..911d39a 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -4,11 +4,13 @@ import { getBasePoins as getHiddenDangerBasePoints, getPointDetailById as getHid import { getBasePoins as getRiskBasePoints, getPointDetailById as getRiskPointDetailById} from './risk-spots' import { getBasePoins as getHospitalsBasePoints, getPointDetailById as getHospitalsPointDetailById} from './hospitals' import { getBasePoints as getDangerousSourceBasePoints, getPointDetailById as getDangerousSourcePointDetailById} from './dangerous-source' +import { getBasePoints as getEmergencyShelterBasePoints, getPointDetailById as getEmergencyShelterPointDetailById} from './emergency-shelter' import type { ApiResponse } from '@/types/ApiResponse' import type { XianHiddenDangerSpots } from '@/types/base/XianHiddenDangerSpots' import type { XianRiskSpots } from '@/types/base/XianRiskSpots' import type { XianHospitals } from '@/types/base/XianHospitals' import type { XianDangerousSource } from '@/types/base/XianDangerousSource' +import type { XianEmergencyShelter } from '@/types/base/XianEmergencyShelter' /** * API接口统一导出对象 @@ -88,4 +90,20 @@ export const $api = { */ getPointDetailById: (id: number): Promise> => getDangerousSourcePointDetailById(id), }, + + // 避难所信息 + emergencyShelter: { + /** + * 获取所有基础避难所 + * @returns 避难所数据数组 + */ + getBasePoints: (): Promise> => getEmergencyShelterBasePoints(), + + /** + * 根据id获取避难所详情 + * @param id - 避难所id + * @returns 避难所详情 + */ + getPointDetailById: (id: number): Promise> => getEmergencyShelterPointDetailById(id), + }, } diff --git a/src/api/emergency-shelter.ts b/src/api/emergency-shelter.ts new file mode 100644 index 0000000..65190ba --- /dev/null +++ b/src/api/emergency-shelter.ts @@ -0,0 +1,20 @@ +import type { ApiResponse } from "@/types/ApiResponse" +import type { XianEmergencyShelter } from "@/types/base/XianEmergencyShelter" +import httpInstance from "@/utils/request/http" + +/** + * 获取避难所基础数据 + * @returns 避难所数据数组 + */ +export const getBasePoints = (): Promise> => { + return httpInstance.get('/emergency-shelter/base-points') +} + +/** + * 根据id获取避难所详情 + * @param id - 避难所id + * @returns 避难所详情 + */ +export const getPointDetailById = (id: number): Promise> => { + return httpInstance.get(`/emergency-shelter/point-detail/${id}`) +} diff --git a/src/assets/images/icon/emergency-shelter.png b/src/assets/images/icon/emergency-shelter.png new file mode 100644 index 0000000..a50876a Binary files /dev/null and b/src/assets/images/icon/emergency-shelter.png differ diff --git a/src/assets/index.ts b/src/assets/index.ts index a65d6df..aca4399 100644 --- a/src/assets/index.ts +++ b/src/assets/index.ts @@ -8,6 +8,7 @@ export { default as flashFloodIcon } from '@/assets/images/icon/flash-flood.png' export { default as riskAreaIcon } from '@/assets/images/icon/risk-area.png'; export { default as hospitalIcon } from '@/assets/images/icon/hospital.png'; export { default as dangerousSourceIcon } from '@/assets/images/icon/dangerous-source.png'; +export { default as emergencyShelterIcon } from '@/assets/images/icon/emergency-shelter.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 86a7980..53425ad 100644 --- a/src/component/rain-earthquake/ControlShowDetailComponent.vue +++ b/src/component/rain-earthquake/ControlShowDetailComponent.vue @@ -14,12 +14,21 @@ useStatusStore().poiLayers.showDangerSource.loading " /> + + + diff --git a/src/component/rain-earthquake/EmergencyShelterComponent.vue b/src/component/rain-earthquake/EmergencyShelterComponent.vue new file mode 100644 index 0000000..e1e182d --- /dev/null +++ b/src/component/rain-earthquake/EmergencyShelterComponent.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/src/config/config.json b/src/config/config.json index 165865f..8c0e550 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -37,6 +37,7 @@ "hiddenDangerPointId": "hidden-danger-point-", "riskPointId": "risk-point-", "hospitalPointId": "hospital-point-", - "dangerousSourcePointId": "dangerous-source-point-" + "dangerousSourcePointId": "dangerous-source-point-", + "emergencyShelterPointId": "emergency-shelter-point-" } } \ No newline at end of file diff --git a/src/hooks/map/useMap.ts b/src/hooks/map/useMap.ts index cf680f5..0f57250 100644 --- a/src/hooks/map/useMap.ts +++ b/src/hooks/map/useMap.ts @@ -57,6 +57,13 @@ export const useMap = () => { useLoadingInformationStore().dangerousSource.id = id; } + // 避难所 + else if ( + pickedObject.id.startsWith(config.prefix.emergencyShelterPointId) + ) { + useLoadingInformationStore().emergencyShelter.id = id; + } + // 其他 else { // 重置状态 diff --git a/src/hooks/rain-earthquake/useEmergencyShelterPoint.ts b/src/hooks/rain-earthquake/useEmergencyShelterPoint.ts new file mode 100644 index 0000000..7b56a2d --- /dev/null +++ b/src/hooks/rain-earthquake/useEmergencyShelterPoint.ts @@ -0,0 +1,30 @@ +import { emergencyShelterIcon } from '@/assets'; + +/** + * 危险源相关钩子函数 + * @returns + */ +export const useEmergencyShelterPoint = () => { + /** + * 字段映射配置 + */ + const field = { + name: '避难所名称', + type: '避难所类型', + address: '地理位置', + enterpriseType: '危险源类型', + lon: '经度', + lat: '纬度', + effectiveNumberOfRefugees: '避难所最大容纳人数', + }; + + /** + * 获取避难所图标 + * @returns 图标路径 + */ + function getDisasterIcon(): string { + return emergencyShelterIcon; + } + + return { field, getDisasterIcon }; +}; diff --git a/src/hooks/rainstorm/useRainDisasterChain.ts b/src/hooks/rainstorm/useRainDisasterChain.ts index b90bbe5..fbdcccc 100644 --- a/src/hooks/rainstorm/useRainDisasterChain.ts +++ b/src/hooks/rainstorm/useRainDisasterChain.ts @@ -229,9 +229,7 @@ export const useRainDisasterChain = () => { name: '显示避难所', statusStore: statusStore.poiLayers, statusKey: 'showRefugeeShelter' as const, - callback: (status: unknown) => { - console.log('显示避难所', status); - }, + callback: layerControl.clickEmergencyShelter, }, { name: '显示消防站', diff --git a/src/hooks/useLayerControl.ts b/src/hooks/useLayerControl.ts index 8e88a9f..6b9787f 100644 --- a/src/hooks/useLayerControl.ts +++ b/src/hooks/useLayerControl.ts @@ -29,5 +29,18 @@ export const useLayerControl = () => { useStatusStore().poiLayers.showDangerSource.loading = true; }; - return { clickHiddenDangerPoint, clickHospital, clickDangerousSource }; + /** + * 点击显示避难所 + */ + const clickEmergencyShelter = () => { + // 加载状态为true + useStatusStore().poiLayers.showRefugeeShelter.loading = true; + }; + + return { + clickHiddenDangerPoint, + clickHospital, + clickDangerousSource, + clickEmergencyShelter, + }; }; diff --git a/src/stores/useLoadingInformation.ts b/src/stores/useLoadingInformation.ts index defc85c..2981022 100644 --- a/src/stores/useLoadingInformation.ts +++ b/src/stores/useLoadingInformation.ts @@ -60,6 +60,14 @@ export const useLoadingInformationStore = defineStore( id: -1, }); + // ============================== 避难所状态 ================================ + const emergencyShelter = reactive({ + /** 加载状态 */ + loading: false, + /** 避难所ID */ + id: -1, + }); + /** * 重置所有状态 */ @@ -83,6 +91,10 @@ export const useLoadingInformationStore = defineStore( // 危险源状态重置 dangerousSource.loading = false; dangerousSource.id = -1; + + // 避难所状态重置 + emergencyShelter.loading = false; + emergencyShelter.id = -1; }; return { @@ -91,6 +103,7 @@ export const useLoadingInformationStore = defineStore( riskPoint, hospital, dangerousSource, + emergencyShelter, resetStatue, }; } diff --git a/src/types/base/XianEmergencyShelter.ts b/src/types/base/XianEmergencyShelter.ts new file mode 100644 index 0000000..de0f699 --- /dev/null +++ b/src/types/base/XianEmergencyShelter.ts @@ -0,0 +1,31 @@ +import type { Point } from './Point'; + +/** + * 西安市应急避难所数据接口 + */ +export interface XianEmergencyShelter extends Point { + /** 避难所时间 */ + year?: string; + /** 避难所区县 */ + district?: string; + /** 避难所名字 */ + name?: string; + /** 避难所地址 */ + address?: string; + /** 避难所类型 */ + type?: string; + /** 避难所性质 */ + constructionCategory?: string; + /** 占地面积 */ + coverArea?: string; + /** 有效占地面积 */ + effectiveRefugeArea?: string; + /** 有效容纳人数 */ + effectiveNumberOfRefugees?: string; + /** 经度 */ + lon?: number; + /** 纬度 */ + lat?: number; + /** 逻辑删除标识,0未删除,1已删除 */ + isDelete?: number; +} diff --git a/src/types/common/LoadingResourceType.ts b/src/types/common/LoadingResourceType.ts index 5ff5db3..2ebf3b3 100644 --- a/src/types/common/LoadingResourceType.ts +++ b/src/types/common/LoadingResourceType.ts @@ -19,4 +19,7 @@ export enum LoadingResource { /** 危险源 */ DANGEROUS_SOURCE = 'DANGEROUS_SOURCE', + + /** 避难所 */ + EMERGENCY_SHELTER = 'EMERGENCY_SHELTER', }