恢复小程序内第三方地图选择流程
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-11 20:22:00 +08:00
parent ee0691174e
commit e99d713dd0
3 changed files with 51 additions and 5 deletions

View File

@@ -124,6 +124,11 @@ import {
THIRD_PARTY_MAP_PROVIDERS,
type ThirdPartyMapProviderOption
} from '@/services/ThirdPartyMapSearchService'
import { isNativeWechatMiniProgram } from '@/utils/hostEnvironment'
import {
getArrivalNavigationActionText,
resolveArrivalNavigationMode
} from '@/components/navigation/arrivalNavigationPolicy'
const props = withDefaults(defineProps<{
visible?: boolean
@@ -147,8 +152,9 @@ const emit = defineEmits<{
const typeOptions = computed(() => ARRIVAL_TARGET_TYPES)
const mapProviders = computed(() => THIRD_PARTY_MAP_PROVIDERS)
const navigationMode = resolveArrivalNavigationMode(isNativeWechatMiniProgram())
const primaryActionText = computed(() => (
isOpeningNavigation.value ? '正在打开...' : '打开地图导航'
getArrivalNavigationActionText(navigationMode, isOpeningNavigation.value)
))
const arrivalPanelRef = ref<unknown>(null)
const isCollapsed = ref(false)
@@ -248,6 +254,12 @@ const handleNavigateTap = async () => {
return
}
// H5含小程序 web-view统一由用户选择第三方地图。
if (navigationMode === 'third-party-providers') {
providerSheetVisible.value = true
return
}
const target = {
latitude: props.selectedTarget.latitude,
longitude: props.selectedTarget.longitude,
@@ -256,10 +268,7 @@ const handleNavigateTap = async () => {
}
isOpeningNavigation.value = true
try {
const result = await openWechatMiniProgramLocation(target)
if (result.status === 'not-embedded') {
providerSheetVisible.value = true
}
await openWechatMiniProgramLocation(target)
} finally {
isOpeningNavigation.value = false
}

View File

@@ -0,0 +1,15 @@
export type ArrivalNavigationMode = 'third-party-providers' | 'native-location'
export const resolveArrivalNavigationMode = (
isNativeWechatMiniProgram: boolean
): ArrivalNavigationMode => (
isNativeWechatMiniProgram ? 'native-location' : 'third-party-providers'
)
export const getArrivalNavigationActionText = (
mode: ArrivalNavigationMode,
isOpening: boolean
) => {
if (isOpening) return '正在打开...'
return mode === 'native-location' ? '打开地图导航' : '第三方导航'
}

View File

@@ -0,0 +1,22 @@
import { describe, expect, it } from 'vitest'
import {
getArrivalNavigationActionText,
resolveArrivalNavigationMode
} from '@/components/navigation/arrivalNavigationPolicy'
describe('来馆导航入口策略', () => {
it('普通 H5 与小程序 web-view 都使用第三方地图选择层', () => {
const mode = resolveArrivalNavigationMode(false)
expect(mode).toBe('third-party-providers')
expect(getArrivalNavigationActionText(mode, false)).toBe('第三方导航')
})
it('只有原生微信小程序使用微信位置能力', () => {
const mode = resolveArrivalNavigationMode(true)
expect(mode).toBe('native-location')
expect(getArrivalNavigationActionText(mode, false)).toBe('打开地图导航')
expect(getArrivalNavigationActionText(mode, true)).toBe('正在打开...')
})
})