mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-16 16:07:33 +08:00
support clicking on map to set specified geographic location
This commit is contained in:
+15
-1
@@ -1,6 +1,7 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions, MapPosition } from './base.ts';
|
||||
import type { MapPosition } from '@/core/map.ts';
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions } from './base.ts';
|
||||
|
||||
import { asyncLoadAssets } from '@/lib/misc.ts';
|
||||
import services from '@/lib/services.ts';
|
||||
@@ -18,6 +19,10 @@ export class AmapMapProvider implements MapProvider {
|
||||
return 'https://www.amap.com';
|
||||
}
|
||||
|
||||
public isSupportGetGeoLocationByClick(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public asyncLoadAssets(language?: string): Promise<unknown> {
|
||||
if (AmapMapProvider.AMap) {
|
||||
@@ -86,6 +91,15 @@ export class AmapMapInstance implements MapInstance {
|
||||
});
|
||||
amapInstance.addControl(amapToolbar);
|
||||
|
||||
amapInstance.on('click', function(e) {
|
||||
if (options.onClick) {
|
||||
options.onClick({
|
||||
latitude: e.lnglat.lat,
|
||||
longitude: e.lnglat.lng
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.amapInstance = amapInstance;
|
||||
this.amapToolbar = amapToolbar;
|
||||
this.inited = true;
|
||||
|
||||
+15
-1
@@ -1,6 +1,7 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions, MapPosition } from './base.ts';
|
||||
import type { MapPosition } from '@/core/map.ts';
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions } from './base.ts';
|
||||
|
||||
import { asyncLoadAssets } from '@/lib/misc.ts';
|
||||
import services from '@/lib/services.ts';
|
||||
@@ -17,6 +18,10 @@ export class BaiduMapProvider implements MapProvider {
|
||||
return 'https://map.baidu.com';
|
||||
}
|
||||
|
||||
public isSupportGetGeoLocationByClick(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public asyncLoadAssets(language?: string): Promise<unknown> {
|
||||
if (BaiduMapProvider.BMap) {
|
||||
@@ -76,6 +81,15 @@ export class BaiduMapInstance implements MapInstance {
|
||||
baiduMapInstance.addControl(baiduMapNavigationControl);
|
||||
baiduMapInstance.centerAndZoom(new BMap.Point(options.initCenter.longitude, options.initCenter.latitude), options.zoomLevel);
|
||||
|
||||
baiduMapInstance.addEventListener('click', function(e) {
|
||||
if (options.onClick) {
|
||||
options.onClick({
|
||||
latitude: e.point.lat,
|
||||
longitude: e.point.lng
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.baiduMapInstance = baiduMapInstance;
|
||||
this.baiduMapConverter = new BMap.Convertor();
|
||||
this.baiduMapNavigationControl = baiduMapNavigationControl;
|
||||
|
||||
+5
-6
@@ -1,5 +1,8 @@
|
||||
import type { MapPosition } from '@/core/map.ts';
|
||||
|
||||
export interface MapProvider {
|
||||
getWebsite(): string;
|
||||
isSupportGetGeoLocationByClick(): boolean;
|
||||
asyncLoadAssets(language?: string): Promise<unknown>;
|
||||
createMapInstance(): MapInstance | null;
|
||||
}
|
||||
@@ -22,10 +25,6 @@ export interface MapInstanceInitOptions {
|
||||
readonly text: {
|
||||
readonly zoomIn: string;
|
||||
readonly zoomOut: string;
|
||||
}
|
||||
}
|
||||
|
||||
export interface MapPosition {
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
};
|
||||
readonly onClick?: (position: MapPosition) => void;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions, MapPosition } from './base.ts';
|
||||
import type { MapPosition } from '@/core/map.ts';
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions } from './base.ts';
|
||||
|
||||
import { asyncLoadAssets } from '@/lib/misc.ts';
|
||||
import services from '@/lib/services.ts';
|
||||
@@ -15,6 +16,10 @@ export class GoogleMapProvider implements MapProvider {
|
||||
return 'https://maps.google.com';
|
||||
}
|
||||
|
||||
public isSupportGetGeoLocationByClick(): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
public asyncLoadAssets(language?: string): Promise<unknown> {
|
||||
if (GoogleMapProvider.GoogleMap) {
|
||||
return Promise.resolve();
|
||||
@@ -76,6 +81,16 @@ export class GoogleMapInstance implements MapInstance {
|
||||
position: GoogleMapProvider.ControlPosition.LEFT_TOP
|
||||
}
|
||||
});
|
||||
|
||||
this.googleMapInstance.addListener('click', function(e) {
|
||||
if (options.onClick) {
|
||||
options.onClick({
|
||||
latitude: e.latLng.lat(),
|
||||
longitude: e.latLng.lng()
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.inited = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,10 @@ export function getMapWebsite(): string {
|
||||
return mapProvider?.getWebsite() || '';
|
||||
}
|
||||
|
||||
export function isSupportGetGeoLocationByClick(): boolean {
|
||||
return mapProvider?.isSupportGetGeoLocationByClick() || false;
|
||||
}
|
||||
|
||||
export function createMapInstance(): MapInstance | null {
|
||||
return mapProvider?.createMapInstance() || null;
|
||||
}
|
||||
|
||||
+16
-1
@@ -1,8 +1,10 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
import type { MapPosition } from '@/core/map.ts';
|
||||
|
||||
import { type LeafletTileSource, type LeafletTileSourceExtraParam, LEAFLET_TILE_SOURCES } from '@/consts/map.ts';
|
||||
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions, MapPosition } from './base.ts';
|
||||
import type { MapProvider, MapInstance, MapInstanceInitOptions } from './base.ts';
|
||||
|
||||
import {
|
||||
isMapDataFetchProxyEnabled,
|
||||
@@ -35,6 +37,10 @@ export class LeafletMapProvider implements MapProvider {
|
||||
}
|
||||
}
|
||||
|
||||
public isSupportGetGeoLocationByClick(): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public asyncLoadAssets(language?: string): Promise<unknown> {
|
||||
return Promise.all([
|
||||
@@ -158,6 +164,15 @@ export class LeafletMapInstance implements MapInstance {
|
||||
this.leafletAttribution = attribution;
|
||||
}
|
||||
|
||||
leafletInstance.addEventListener('click', function(e) {
|
||||
if (options.onClick) {
|
||||
options.onClick({
|
||||
latitude: e.latlng.lat,
|
||||
longitude: e.latlng.lng
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.leafletInstance = leafletInstance;
|
||||
this.leafletTileLayer = tileLayer;
|
||||
this.leafletZoomControl = zoomControl;
|
||||
|
||||
Reference in New Issue
Block a user