From 381d063295714df9aceadfd711b89038d2ae372d Mon Sep 17 00:00:00 2001 From: MaysWind Date: Fri, 2 May 2025 00:32:22 +0800 Subject: [PATCH] support clicking on map to set specified geographic location --- src/components/common/MapView.vue | 23 +++++++++++-- src/components/mobile/MapSheet.vue | 24 +++++++++++-- src/core/map.ts | 4 +++ src/lib/map/amap.ts | 16 ++++++++- src/lib/map/baidumap.ts | 16 ++++++++- src/lib/map/base.ts | 11 +++--- src/lib/map/googlemap.ts | 17 +++++++++- src/lib/map/index.ts | 4 +++ src/lib/map/leaflet.ts | 17 +++++++++- src/locales/de.json | 3 ++ src/locales/en.json | 3 ++ src/locales/es.json | 3 ++ src/locales/it.json | 3 ++ src/locales/ja.json | 3 ++ src/locales/ru.json | 3 ++ src/locales/uk.json | 3 ++ src/locales/vi.json | 3 ++ src/locales/zh_Hans.json | 3 ++ src/locales/zh_Hant.json | 3 ++ src/models/transaction.ts | 15 ++++---- .../transactions/TransactionEditPageBase.ts | 2 ++ .../transactions/list/dialogs/EditDialog.vue | 34 +++++++++++++++++-- src/views/mobile/transactions/EditPage.vue | 2 ++ 23 files changed, 191 insertions(+), 24 deletions(-) create mode 100644 src/core/map.ts diff --git a/src/components/common/MapView.vue b/src/components/common/MapView.vue index ec094548..94586ddc 100644 --- a/src/components/common/MapView.vue +++ b/src/components/common/MapView.vue @@ -13,7 +13,8 @@ import { ref, computed, useTemplateRef } from 'vue'; import { useI18n } from '@/locales/helpers.ts'; -import type { MapInstance, MapPosition } from '@/lib/map/base.ts'; +import type { MapPosition } from '@/core/map.ts'; +import type { MapInstance } from '@/lib/map/base.ts'; import { createMapInstance } from '@/lib/map/index.ts'; const props = defineProps<{ @@ -23,6 +24,10 @@ const props = defineProps<{ geoLocation?: MapPosition; }>(); +const emit = defineEmits<{ + (e: 'click', geoLocation: MapPosition): void; +}>(); + const { tt, getCurrentLanguageInfo } = useI18n(); const mapContainer = useTemplateRef('mapContainer'); @@ -86,6 +91,9 @@ function initMapView(): void { text: { zoomIn: tt('Zoom in'), zoomOut: tt('Zoom out'), + }, + onClick: (geoLocation: MapPosition) => { + emit('click', geoLocation); } }); @@ -105,7 +113,18 @@ function initMapView(): void { } } +function setMarkerPosition(geoLocation?: MapPosition): void { + if (!mapInstance.value) { + return; + } + + if (geoLocation) { + mapInstance.value.setMapCenterMarker(geoLocation); + } +} + defineExpose({ - initMapView + initMapView, + setMarkerPosition }); diff --git a/src/components/mobile/MapSheet.vue b/src/components/mobile/MapSheet.vue index b9dc6f3c..4f270576 100644 --- a/src/components/mobile/MapSheet.vue +++ b/src/components/mobile/MapSheet.vue @@ -3,13 +3,16 @@ :opened="show" @sheet:open="onSheetOpen" @sheet:closed="onSheetClosed">
-
+
+ + +
- +