@@ -134,8 +134,11 @@ const handleExplainGuideStopClick = (stop: ExplainGuideStopCatalogItem) => {
|
|||||||
? { targetType: stop.playTargetType, targetId: stop.playTargetId }
|
? { targetType: stop.playTargetType, targetId: stop.playTargetId }
|
||||||
: normalizeExplainDetailTargetFromGuideStop({ id: stop.id })
|
: normalizeExplainDetailTargetFromGuideStop({ id: stop.id })
|
||||||
const params = new URLSearchParams({ id: stop.id, tab: 'explain', targetType: target.targetType, targetId: target.targetId })
|
const params = new URLSearchParams({ id: stop.id, tab: 'explain', targetType: target.targetType, targetId: target.targetId })
|
||||||
if (stop.hallId) params.set('hallId', stop.hallId)
|
// 分页对象可能未回填展厅字段,详情返回必须保留当前列表的展厅上下文。
|
||||||
if (stop.hallName) params.set('hallName', stop.hallName)
|
const hallId = stop.hallId || selectedExplainHallId.value
|
||||||
|
const hallName = stop.hallName || selectedExplainHallName.value
|
||||||
|
if (hallId) params.set('hallId', hallId)
|
||||||
|
if (hallName) params.set('hallName', hallName)
|
||||||
if (stop.floorId) params.set('floorId', stop.floorId)
|
if (stop.floorId) params.set('floorId', stop.floorId)
|
||||||
if (stop.poiId) params.set('poiId', stop.poiId)
|
if (stop.poiId) params.set('poiId', stop.poiId)
|
||||||
uni.navigateTo({ url: `/pages/exhibit/detail?${params.toString()}` })
|
uni.navigateTo({ url: `/pages/exhibit/detail?${params.toString()}` })
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ const ExplainGuideStopCatalogStub = defineComponent({
|
|||||||
name: 'ExplainGuideStopCatalog',
|
name: 'ExplainGuideStopCatalog',
|
||||||
props: ['guideStops', 'selectedHallName', 'loading', 'loadingMore', 'hasMore', 'error', 'loadMoreError'],
|
props: ['guideStops', 'selectedHallName', 'loading', 'loadingMore', 'hasMore', 'error', 'loadMoreError'],
|
||||||
emits: ['back', 'retry', 'retryMore', 'guideStopClick'],
|
emits: ['back', 'retry', 'retryMore', 'guideStopClick'],
|
||||||
template: '<button data-testid="list-back" @click="$emit(\'back\')">返回</button><button data-testid="retry-more" @click="$emit(\'retryMore\')">重试更多</button>'
|
setup(_, { emit }) {
|
||||||
|
return {
|
||||||
|
emitDetail: () => emit('guideStopClick', { id: 'stop-1', name: '对象', playTargetType: 'STOP', playTargetId: 'target-1' })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: '<button data-testid="list-back" @click="$emit(\'back\')">返回</button><button data-testid="retry-more" @click="$emit(\'retryMore\')">重试更多</button><button data-testid="detail-click" @click="emitDetail">详情</button>'
|
||||||
})
|
})
|
||||||
|
|
||||||
const mountGuideStopList = () => mount(ExplainGuideStopListPage, {
|
const mountGuideStopList = () => mount(ExplainGuideStopListPage, {
|
||||||
@@ -93,6 +98,23 @@ describe('讲解对象列表返回', () => {
|
|||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('keeps the selected hall context when an object payload omits hall fields', async () => {
|
||||||
|
const wrapper = mountGuideStopList()
|
||||||
|
testState.onLoadHandler?.({ hallId: 'hall-1', hallName: '恐龙厅' })
|
||||||
|
await flushPromises()
|
||||||
|
|
||||||
|
await wrapper.get('[data-testid="detail-click"]').trigger('click')
|
||||||
|
|
||||||
|
const url = vi.mocked(uni.navigateTo).mock.calls[0]?.[0]?.url || ''
|
||||||
|
const params = new URLSearchParams(url.split('?')[1])
|
||||||
|
expect(url.split('?')[0]).toBe('/pages/exhibit/detail')
|
||||||
|
expect(params.get('hallId')).toBe('hall-1')
|
||||||
|
expect(params.get('hallName')).toBe('恐龙厅')
|
||||||
|
expect(params.get('targetType')).toBe('STOP')
|
||||||
|
expect(params.get('targetId')).toBe('target-1')
|
||||||
|
wrapper.unmount()
|
||||||
|
})
|
||||||
|
|
||||||
it('上一页是独立展厅列表时回到该列表', async () => {
|
it('上一页是独立展厅列表时回到该列表', async () => {
|
||||||
vi.stubGlobal('getCurrentPages', vi.fn(() => [
|
vi.stubGlobal('getCurrentPages', vi.fn(() => [
|
||||||
{ route: 'pages/explain/list', options: {} },
|
{ route: 'pages/explain/list', options: {} },
|
||||||
|
|||||||
Reference in New Issue
Block a user