@@ -164,6 +164,7 @@ import {
|
||||
} from '@/utils/placeholders'
|
||||
import { isEmbeddedInWechatMiniProgram } from '@/utils/hostEnvironment'
|
||||
import { normalizeGuideAudioLanguage } from '@/data/adapters/guideStopInfoAdapter'
|
||||
import { explainGuideStopListUrl } from '@/utils/explainNavigation'
|
||||
|
||||
const defaultDetail: ExplainDetailPageViewModel = {
|
||||
id: '',
|
||||
@@ -871,23 +872,53 @@ const handleNavigate = async () => {
|
||||
})
|
||||
}
|
||||
|
||||
const fallbackToExplainHome = () => {
|
||||
type ExplainDetailPageStackEntry = {
|
||||
route?: string
|
||||
}
|
||||
|
||||
const decodeRouteParam = (value: string) => {
|
||||
let decoded = value
|
||||
// Hash route parameters can accumulate extra encoding layers across H5 transitions.
|
||||
for (let index = 0; index < 8; index += 1) {
|
||||
try {
|
||||
const next = decodeURIComponent(decoded)
|
||||
if (next === decoded) break
|
||||
decoded = next
|
||||
} catch {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return decoded
|
||||
}
|
||||
|
||||
const fallbackToExplainObjectList = () => {
|
||||
const hallId = detailEntryRequest.value?.hallId || exhibit.value.hallId
|
||||
const hallName = decodeRouteParam(detailEntryRequest.value?.hallName || exhibit.value.hallName || '讲解')
|
||||
const url = hallId
|
||||
? explainGuideStopListUrl(hallId, hallName)
|
||||
: '/pages/explain/list'
|
||||
|
||||
uni.redirectTo({
|
||||
url: '/pages/index/index?tab=explain',
|
||||
url,
|
||||
fail: () => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/index/index?tab=explain'
|
||||
})
|
||||
uni.reLaunch({ url })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleBack = () => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
fail: fallbackToExplainHome
|
||||
})
|
||||
const returnToExplainObjectList = () => {
|
||||
const pages = getCurrentPages()
|
||||
const previousPage = pages[pages.length - 2] as ExplainDetailPageStackEntry | undefined
|
||||
if (previousPage?.route === 'pages/explain/guide-stop-list') {
|
||||
uni.navigateBack({ delta: 1, fail: fallbackToExplainObjectList })
|
||||
return
|
||||
}
|
||||
|
||||
fallbackToExplainObjectList()
|
||||
}
|
||||
|
||||
const handleBack = returnToExplainObjectList
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
Reference in New Issue
Block a user