mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 17:54:30 +08:00
code refactor
This commit is contained in:
+8
-3
@@ -147,7 +147,7 @@ func startWebServer(c *cli.Context) error {
|
|||||||
{
|
{
|
||||||
if config.EnableMapDataFetchProxy {
|
if config.EnableMapDataFetchProxy {
|
||||||
if config.MapProvider == settings.OpenStreetMapProvider {
|
if config.MapProvider == settings.OpenStreetMapProvider {
|
||||||
proxyRoute.GET("/openstreetmap/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.OpenStreetMapTileImageProxyHandler))
|
proxyRoute.GET("/map/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.MapTileImageProxyHandler))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -332,7 +332,12 @@ func bindCsv(fn core.DataHandlerFunc) gin.HandlerFunc {
|
|||||||
func bindProxy(fn core.ProxyHandlerFunc) gin.HandlerFunc {
|
func bindProxy(fn core.ProxyHandlerFunc) gin.HandlerFunc {
|
||||||
return func(ginCtx *gin.Context) {
|
return func(ginCtx *gin.Context) {
|
||||||
c := core.WrapContext(ginCtx)
|
c := core.WrapContext(ginCtx)
|
||||||
proxy := fn(c)
|
proxy, err := fn(c)
|
||||||
proxy.ServeHTTP(c.Writer, c.Request)
|
|
||||||
|
if err != nil {
|
||||||
|
utils.PrintDataErrorResult(c, "text/text", err)
|
||||||
|
} else {
|
||||||
|
proxy.ServeHTTP(c.Writer, c.Request)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// AmapApiProxyHandler returns amap api response
|
// AmapApiProxyHandler returns amap api response
|
||||||
func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) *httputil.ReverseProxy {
|
func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) (*httputil.ReverseProxy, *errs.Error) {
|
||||||
var targetUrl string
|
var targetUrl string
|
||||||
|
|
||||||
if strings.HasPrefix(c.Request.RequestURI, "/_AMapService/v4/map/styles") {
|
if strings.HasPrefix(c.Request.RequestURI, "/_AMapService/v4/map/styles") {
|
||||||
@@ -56,5 +57,5 @@ func (p *AmapApiProxy) AmapApiProxyHandler(c *core.Context) *httputil.ReversePro
|
|||||||
req.Host = targetUrl.Host
|
req.Host = targetUrl.Host
|
||||||
}
|
}
|
||||||
|
|
||||||
return &httputil.ReverseProxy{Director: director}
|
return &httputil.ReverseProxy{Director: director}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
|
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/%s/%s/%s" // https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/%s/%s/%s" // https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
||||||
@@ -20,14 +22,23 @@ var (
|
|||||||
MapImages = &MapImageProxy{}
|
MapImages = &MapImageProxy{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// OpenStreetMapTileImageProxyHandler returns open street map tile image
|
// MapTileImageProxyHandler returns map tile image
|
||||||
func (p *MapImageProxy) OpenStreetMapTileImageProxyHandler(c *core.Context) *httputil.ReverseProxy {
|
func (p *MapImageProxy) MapTileImageProxyHandler(c *core.Context) (*httputil.ReverseProxy, *errs.Error) {
|
||||||
|
mapProvider := c.Query("provider")
|
||||||
|
targetUrl := ""
|
||||||
|
|
||||||
|
if mapProvider == settings.OpenStreetMapProvider {
|
||||||
|
targetUrl = openStreetMapTileImageUrlFormat
|
||||||
|
} else {
|
||||||
|
return nil, errs.ErrParameterInvalid
|
||||||
|
}
|
||||||
|
|
||||||
director := func(req *http.Request) {
|
director := func(req *http.Request) {
|
||||||
zoomLevel := c.Param("zoomLevel")
|
zoomLevel := c.Param("zoomLevel")
|
||||||
coordinateX := c.Param("coordinateX")
|
coordinateX := c.Param("coordinateX")
|
||||||
fileName := c.Param("fileName")
|
fileName := c.Param("fileName")
|
||||||
|
|
||||||
imageRawUrl := fmt.Sprintf(openStreetMapTileImageUrlFormat, zoomLevel, coordinateX, fileName)
|
imageRawUrl := fmt.Sprintf(targetUrl, zoomLevel, coordinateX, fileName)
|
||||||
imageUrl, _ := url.Parse(imageRawUrl)
|
imageUrl, _ := url.Parse(imageRawUrl)
|
||||||
|
|
||||||
req.URL = imageUrl
|
req.URL = imageUrl
|
||||||
@@ -35,5 +46,5 @@ func (p *MapImageProxy) OpenStreetMapTileImageProxyHandler(c *core.Context) *htt
|
|||||||
req.Host = imageUrl.Host
|
req.Host = imageUrl.Host
|
||||||
}
|
}
|
||||||
|
|
||||||
return &httputil.ReverseProxy{Director: director}
|
return &httputil.ReverseProxy{Director: director}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -16,4 +16,4 @@ type ApiHandlerFunc func(*Context) (interface{}, *errs.Error)
|
|||||||
type DataHandlerFunc func(*Context) ([]byte, string, *errs.Error)
|
type DataHandlerFunc func(*Context) ([]byte, string, *errs.Error)
|
||||||
|
|
||||||
// ProxyHandlerFunc represents the reverse proxy handler function
|
// ProxyHandlerFunc represents the reverse proxy handler function
|
||||||
type ProxyHandlerFunc func(*Context) *httputil.ReverseProxy
|
type ProxyHandlerFunc func(*Context) (*httputil.ReverseProxy, *errs.Error)
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
const leafletTileSources = {
|
||||||
|
'openstreetmap': {
|
||||||
|
tileUrlFormat: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||||
|
tileUrlSubDomains: 'abc',
|
||||||
|
attribution : '© <a href="http://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
leafletTileSources: leafletTileSources
|
||||||
|
}
|
||||||
+13
-12
@@ -1,4 +1,5 @@
|
|||||||
import settings from "@/lib/settings.js";
|
import mapConstants from '@/consts/map.js';
|
||||||
|
import settings from '@/lib/settings.js';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
loadLeafletMapAssets,
|
loadLeafletMapAssets,
|
||||||
@@ -7,7 +8,7 @@ import {
|
|||||||
setLeafletMapCenterTo,
|
setLeafletMapCenterTo,
|
||||||
setLeafletMapCenterMaker,
|
setLeafletMapCenterMaker,
|
||||||
removeLeafletMapCenterMaker
|
removeLeafletMapCenterMaker
|
||||||
} from './openstreetmap.js';
|
} from './leaflet.js';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
loadGoogleMapAssets,
|
loadGoogleMapAssets,
|
||||||
@@ -37,7 +38,7 @@ import {
|
|||||||
} from './amap.js';
|
} from './amap.js';
|
||||||
|
|
||||||
export function loadMapAssets(language) {
|
export function loadMapAssets(language) {
|
||||||
if (settings.getMapProvider() === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
return loadLeafletMapAssets(language);
|
return loadLeafletMapAssets(language);
|
||||||
} else if (settings.getMapProvider() === 'googlemap') {
|
} else if (settings.getMapProvider() === 'googlemap') {
|
||||||
return loadGoogleMapAssets(language);
|
return loadGoogleMapAssets(language);
|
||||||
@@ -49,14 +50,14 @@ export function loadMapAssets(language) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function createMapHolder() {
|
export function createMapHolder() {
|
||||||
if (settings.getMapProvider() === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
return createLeafletMapHolder();
|
return createLeafletMapHolder(settings.getMapProvider());
|
||||||
} else if (settings.getMapProvider() === 'googlemap') {
|
} else if (settings.getMapProvider() === 'googlemap') {
|
||||||
return createGoogleMapHolder();
|
return createGoogleMapHolder(settings.getMapProvider());
|
||||||
} else if (settings.getMapProvider() === 'baidumap') {
|
} else if (settings.getMapProvider() === 'baidumap') {
|
||||||
return createBaiduMapHolder();
|
return createBaiduMapHolder(settings.getMapProvider());
|
||||||
} else if (settings.getMapProvider() === 'amap') {
|
} else if (settings.getMapProvider() === 'amap') {
|
||||||
return createAmapHolder();
|
return createAmapHolder(settings.getMapProvider());
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -67,7 +68,7 @@ export function initMapInstance(mapHolder, mapContainer, options) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapHolder.mapProvider === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
createLeafletMapInstance(mapHolder, mapContainer, options);
|
createLeafletMapInstance(mapHolder, mapContainer, options);
|
||||||
} else if (mapHolder.mapProvider === 'googlemap') {
|
} else if (mapHolder.mapProvider === 'googlemap') {
|
||||||
createGoogleMapInstance(mapHolder, mapContainer, options);
|
createGoogleMapInstance(mapHolder, mapContainer, options);
|
||||||
@@ -83,7 +84,7 @@ export function setMapCenterTo(mapHolder, center, zoomLevel) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapHolder.mapProvider === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
setLeafletMapCenterTo(mapHolder, center, zoomLevel);
|
setLeafletMapCenterTo(mapHolder, center, zoomLevel);
|
||||||
} else if (mapHolder.mapProvider === 'googlemap') {
|
} else if (mapHolder.mapProvider === 'googlemap') {
|
||||||
setGoogleMapCenterTo(mapHolder, center, zoomLevel);
|
setGoogleMapCenterTo(mapHolder, center, zoomLevel);
|
||||||
@@ -99,7 +100,7 @@ export function setMapCenterMarker(mapHolder, position) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapHolder.mapProvider === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
setLeafletMapCenterMaker(mapHolder, position);
|
setLeafletMapCenterMaker(mapHolder, position);
|
||||||
} else if (mapHolder.mapProvider === 'googlemap') {
|
} else if (mapHolder.mapProvider === 'googlemap') {
|
||||||
setGoogleMapCenterMaker(mapHolder, position);
|
setGoogleMapCenterMaker(mapHolder, position);
|
||||||
@@ -115,7 +116,7 @@ export function removeMapCenterMarker(mapHolder) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapHolder.mapProvider === 'openstreetmap') {
|
if (mapConstants.leafletTileSources[settings.getMapProvider()]) {
|
||||||
removeLeafletMapCenterMaker(mapHolder);
|
removeLeafletMapCenterMaker(mapHolder);
|
||||||
} else if (mapHolder.mapProvider === 'googlemap') {
|
} else if (mapHolder.mapProvider === 'googlemap') {
|
||||||
removeGoogleMapCenterMaker(mapHolder);
|
removeGoogleMapCenterMaker(mapHolder);
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import services from "@/lib/services.js";
|
import mapConstants from '@/consts/map.js';
|
||||||
|
import settings from '@/lib/settings.js';
|
||||||
|
import services from '@/lib/services.js';
|
||||||
|
|
||||||
const leafletHolder = {
|
const leafletHolder = {
|
||||||
leaflet: null
|
leaflet: null
|
||||||
@@ -11,9 +13,9 @@ export function loadLeafletMapAssets() {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createLeafletMapHolder() {
|
export function createLeafletMapHolder(mapProvider) {
|
||||||
return {
|
return {
|
||||||
mapProvider: 'openstreetmap',
|
mapProvider: mapProvider,
|
||||||
dependencyLoaded: !!leafletHolder.leaflet,
|
dependencyLoaded: !!leafletHolder.leaflet,
|
||||||
inited: false,
|
inited: false,
|
||||||
defaultZoomLevel: 14,
|
defaultZoomLevel: 14,
|
||||||
@@ -38,11 +40,18 @@ export function createLeafletMapInstance(mapHolder, mapContainer, options) {
|
|||||||
attributionControl: false,
|
attributionControl: false,
|
||||||
zoomControl: false
|
zoomControl: false
|
||||||
});
|
});
|
||||||
|
let mapTileSource = mapConstants.leafletTileSources[mapHolder.mapProvider];
|
||||||
|
|
||||||
const mapTileImageUrl = services.generateOpenStreetMapTileImageUrl();
|
if (settings.isMapDataFetchProxyEnabled()) {
|
||||||
|
const mapProxyTileImageUrl = services.generateMapProxyTileImageUrl(mapHolder.mapProvider);
|
||||||
|
mapTileSource = Object.assign({}, mapTileSource, {
|
||||||
|
tileUrlFormat: mapProxyTileImageUrl,
|
||||||
|
tileUrlSubDomains: ''
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const tileLayer = leaflet.tileLayer(mapTileImageUrl.url, {
|
const tileLayer = leaflet.tileLayer(mapTileSource.tileUrlFormat, {
|
||||||
subdomains: mapTileImageUrl.subDomains,
|
subdomains: mapTileSource.tileUrlSubDomains,
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
});
|
});
|
||||||
tileLayer.addTo(leafletInstance);
|
tileLayer.addTo(leafletInstance);
|
||||||
@@ -53,16 +62,18 @@ export function createLeafletMapInstance(mapHolder, mapContainer, options) {
|
|||||||
});
|
});
|
||||||
zoomControl.addTo(leafletInstance);
|
zoomControl.addTo(leafletInstance);
|
||||||
|
|
||||||
const attribution = leaflet.control.attribution({
|
if (mapTileSource.attribution) {
|
||||||
prefix: false
|
const attribution = leaflet.control.attribution({
|
||||||
});
|
prefix: false
|
||||||
attribution.addAttribution('© <a href="http://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a>');
|
});
|
||||||
attribution.addTo(leafletInstance);
|
attribution.addAttribution(mapTileSource.attribution);
|
||||||
|
attribution.addTo(leafletInstance);
|
||||||
|
mapHolder.leafletAttribution = attribution;
|
||||||
|
}
|
||||||
|
|
||||||
mapHolder.leafletInstance = leafletInstance;
|
mapHolder.leafletInstance = leafletInstance;
|
||||||
mapHolder.leafletTileLayer = tileLayer;
|
mapHolder.leafletTileLayer = tileLayer;
|
||||||
mapHolder.leafletZoomControl = zoomControl;
|
mapHolder.leafletZoomControl = zoomControl;
|
||||||
mapHolder.leafletAttribution = attribution;
|
|
||||||
mapHolder.inited = true;
|
mapHolder.inited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
+3
-14
@@ -396,20 +396,9 @@ export default {
|
|||||||
ignoreError: !!ignoreError
|
ignoreError: !!ignoreError
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
generateOpenStreetMapTileImageUrl: () => {
|
generateMapProxyTileImageUrl: (mapProvider) => {
|
||||||
if (settings.isMapDataFetchProxyEnabled()) {
|
const token = userState.getToken();
|
||||||
const token = userState.getToken();
|
return `${api.baseProxyUrlPath}/map/tile/{z}/{x}/{y}.png?provider=${mapProvider}&token=${token}`;
|
||||||
|
|
||||||
return {
|
|
||||||
url: api.baseProxyUrlPath + '/openstreetmap/tile/{z}/{x}/{y}.png?token=' + token,
|
|
||||||
subDomains: ''
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
|
||||||
subDomains: 'abc'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
generateGoogleMapJavascriptUrl: (language, callbackFnName) => {
|
generateGoogleMapJavascriptUrl: (language, callbackFnName) => {
|
||||||
if (language) {
|
if (language) {
|
||||||
|
|||||||
Reference in New Issue
Block a user