This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
15
src/components/navigation/arrivalNavigationPolicy.ts
Normal file
15
src/components/navigation/arrivalNavigationPolicy.ts
Normal 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' ? '打开地图导航' : '第三方导航'
|
||||
}
|
||||
22
tests/unit/arrivalNavigationPolicy.spec.ts
Normal file
22
tests/unit/arrivalNavigationPolicy.spec.ts
Normal 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('正在打开...')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user