| src/pages/robotaxi/home/index.tsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/utils/Robotaxi-public-method.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/pages/robotaxi/home/index.tsx
@@ -40,6 +40,7 @@ import { checkOtp, toH5 } from '../../../utils/tools'; import { getCityLocation } from '../../../utils/Robotaxi-public-method'; import { HOME_MAP_ID, HOME_ORDER_STATUS, MARKER_TAP_SETTLE_DELAY, OVERLAY_ANCHOR_INIT_DELAY, @@ -354,6 +355,22 @@ }; /** * 统一标准化站点坐标,避免字符串坐标导致地图中心未正确同步。 */ const normalizeSiteMarker = (site: any) => { const latitude = Number(site?.latitude); const longitude = Number(site?.longitude); if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) { return null; } return { ...site, latitude, longitude }; }; /** * 点击站点 marker 后同步地图中心与吸附站点。 */ const handleMarkerTap = (event: any) => { @@ -370,19 +387,28 @@ return; } const normalizedTargetMarker = normalizeSiteMarker(targetMarker); if (!normalizedTargetMarker) { return; } shouldIgnoreRegionChange.current = true; setShowToolTip(false); setBounce(true); setLatitude(targetMarker.latitude); setLongitude(targetMarker.longitude); setLatitude(normalizedTargetMarker.latitude); setLongitude(normalizedTargetMarker.longitude); Taro.createMapContext(HOME_MAP_ID).moveToLocation({ latitude: normalizedTargetMarker.latitude, longitude: normalizedTargetMarker.longitude }); setTimeout(() => { setBounce(false); setIsAdsorbed(true); setCurrentSite(targetMarker); setPreferredStartSite(targetMarker); Taro.setStorageSync('startSite', targetMarker); writeHomeStartSiteDisplayState(targetMarker, HOME_START_SITE_SOURCE_MANUAL_SELECTED); setCurrentSite(normalizedTargetMarker); setPreferredStartSite(normalizedTargetMarker); Taro.setStorageSync('startSite', normalizedTargetMarker); writeHomeStartSiteDisplayState(normalizedTargetMarker, HOME_START_SITE_SOURCE_MANUAL_SELECTED); setShowToolTip(true); }, MARKER_TAP_SETTLE_DELAY); }; src/utils/Robotaxi-public-method.ts
@@ -1123,6 +1123,36 @@ return Object.prototype.toString.call(value) === '[object Object]'; }; /** nearby_pickup_stations 埋点允许保留的字段。 */ const NEARBY_PICKUP_STATION_REPORT_KEYS = ['id', 'name', 'latitude', 'longitude', 'electronicAreaId'] as const; /** nearby_pickup_stations 埋点最多保留的站点数量。 */ const MAX_NEARBY_PICKUP_STATIONS_REPORT_COUNT = 5; /** 过滤 nearby_pickup_stations,仅保留约定字段。 */ const filterNearbyPickupStationsForReport = (value: any) => { if (!Array.isArray(value)) { return value; } return value.slice(0, MAX_NEARBY_PICKUP_STATIONS_REPORT_COUNT).map((item) => { if (Object.prototype.toString.call(item) !== '[object Object]') { return item; } return NEARBY_PICKUP_STATION_REPORT_KEYS.reduce((result: Record<string, any>, key) => { result[key] = item?.[key]; return result; }, {}); }); }; /** 预处理埋点字段:按字段规则裁剪后再进入序列化流程。 */ const preprocessReportValue = (key: string, value: any) => { if (key === 'nearby_pickup_stations') { return filterNearbyPickupStationsForReport(value); } return value; }; /** 序列化单个埋点字段,避免对象被底层隐式转成 [object Object]。 */ const serializeReportValue = (value: any) => { if (!isStructuredReportValue(value)) { @@ -1141,7 +1171,7 @@ return {}; } return Object.keys(para).reduce((result: Record<string, any>, key: string) => { result[key] = serializeReportValue(para[key]); result[key] = serializeReportValue(preprocessReportValue(key, para[key])); return result; }, {}); };