From 8d3e9c9480ebc4ae95bdb5854de80d068c467343 Mon Sep 17 00:00:00 2001
From: wangrong <wangrong@shsening.com>
Date: 星期二, 29 九月 2026 22:45:32 +0800
Subject: [PATCH] Merge branch 'fix-home-logo'

---
 src/modules/maps/hooks/use-map.ts |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/modules/maps/hooks/use-map.ts b/src/modules/maps/hooks/use-map.ts
index 5f91ca5..645d2d6 100644
--- a/src/modules/maps/hooks/use-map.ts
+++ b/src/modules/maps/hooks/use-map.ts
@@ -4,6 +4,52 @@
 export const MAP_TK = '51915011aa0997aa2ddd7e38504fa8bc';
 export const MAP_LOAD = { v: '4.0', tk: MAP_TK };
 export const DEFAULT_CENTER: LngLat = [121.280637, 32.125178];
+export const DEFAULT_ZOOM = 16;
+export const MAP_ZOOM_KEY = 'map.zoomlevel';
+export const MAP_COORD_KEY = 'map.coordinates';
+
+function paramText(raw: unknown): string {
+	if (raw == null) return '';
+	if (typeof raw === 'string' || typeof raw === 'number') return String(raw).trim();
+	if (Array.isArray(raw)) return raw.map(e => String(e).trim()).join(',');
+	return '';
+}
+
+export function parseMapZoom(raw: unknown, fallback = DEFAULT_ZOOM) {
+	const n = Number(paramText(raw));
+	return Number.isFinite(n) && n > 0 ? n : fallback;
+}
+
+export function parseMapCenter(raw: unknown, fallback: LngLat = DEFAULT_CENTER): LngLat {
+	const text = paramText(raw);
+	const parts = text.split(/[,锛宂/).map(s => Number(s.trim()));
+	if (parts.length >= 2 && Number.isFinite(parts[0]) && Number.isFinite(parts[1])) {
+		return [parts[0], parts[1]];
+	}
+	return fallback;
+}
+
+/** 浠� base_sys_param 璇诲彇瀛︽牎鍦板浘榛樿瑙嗚锛歮ap.zoomlevel銆乵ap.coordinates锛坙on,lat锛� */
+export async function loadMapView(service: any): Promise<{ center: LngLat; zoom: number }> {
+	const read = async (key: string) => {
+		try {
+			if (service?.base?.sys?.param?.stringbykey) {
+				return await service.base.sys.param.stringbykey({ key });
+			}
+			return await service.request({
+				url: 'admin/base/sys/param/stringbykey',
+				params: { key }
+			});
+		} catch {
+			return '';
+		}
+	};
+	const [zoomRaw, coordRaw] = await Promise.all([read(MAP_ZOOM_KEY), read(MAP_COORD_KEY)]);
+	return {
+		center: parseMapCenter(coordRaw),
+		zoom: parseMapZoom(zoomRaw)
+	};
+}
 
 export function pinIcon(color: string) {
 	const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="28" height="40" viewBox="0 0 28 40"><path fill="${color}" stroke="#fff" stroke-width="1.5" d="M14 1C7.4 1 2 6.4 2 13c0 8.8 12 25 12 25s12-16.2 12-25C26 6.4 20.6 1 14 1z"/><circle cx="14" cy="13" r="5" fill="#fff"/></svg>`;

--
Gitblit v1.9.1