fix(路由跳转): 防止重复跳转到欢迎页和仪表盘页
添加路由跳转防抖逻辑,避免在相同页面间重复跳转 在Dashboard页面添加跳转状态标志,优化家庭状态检查逻辑
Showing
2 changed files
with
47 additions
and
21 deletions
| ... | @@ -377,6 +377,9 @@ const handleAdClick = (targetPage) => { | ... | @@ -377,6 +377,9 @@ const handleAdClick = (targetPage) => { |
| 377 | const family_id = ref(''); | 377 | const family_id = ref(''); |
| 378 | const totalFamilySteps = ref(0); | 378 | const totalFamilySteps = ref(0); |
| 379 | 379 | ||
| 380 | +// 防抖标志,防止重复跳转 | ||
| 381 | +let isRedirecting = false; | ||
| 382 | + | ||
| 380 | /** | 383 | /** |
| 381 | * 刷新Dashboard页面数据 | 384 | * 刷新Dashboard页面数据 |
| 382 | */ | 385 | */ |
| ... | @@ -406,9 +409,10 @@ const refreshDashboardData = async () => { | ... | @@ -406,9 +409,10 @@ const refreshDashboardData = async () => { |
| 406 | totalPoints: finalTotalPoints.value | 409 | totalPoints: finalTotalPoints.value |
| 407 | }); | 410 | }); |
| 408 | 411 | ||
| 409 | - // 判断用户是否记录家庭, family_id为空, 跳转到Welcome页面 | 412 | + // 更严格的家庭状态检查:只有在明确没有家庭数据且不在跳转过程中时才跳转 |
| 410 | - if (!family_id.value) { | 413 | + if (!family_id.value && !isRedirecting && (!data.family || !data.family.name)) { |
| 411 | console.warn('用户未加入家庭,跳转到欢迎页面'); | 414 | console.warn('用户未加入家庭,跳转到欢迎页面'); |
| 415 | + isRedirecting = true; | ||
| 412 | await Taro.redirectTo({ | 416 | await Taro.redirectTo({ |
| 413 | url: '/pages/Welcome/index' | 417 | url: '/pages/Welcome/index' |
| 414 | }) | 418 | }) |
| ... | @@ -416,20 +420,26 @@ const refreshDashboardData = async () => { | ... | @@ -416,20 +420,26 @@ const refreshDashboardData = async () => { |
| 416 | } | 420 | } |
| 417 | } else { | 421 | } else { |
| 418 | console.error('获取Dashboard数据失败:', data); | 422 | console.error('获取Dashboard数据失败:', data); |
| 419 | - // 检查用户是否已加入家庭 | 423 | + |
| 420 | - const hasFamily = await checkUserHasFamily() | 424 | + // 只有在明确的错误情况下才进行家庭状态检查 |
| 421 | - | 425 | + if (!isRedirecting && (data?.msg?.includes('家庭') || data?.code === 404)) { |
| 422 | - // 如果用户没有加入家庭,跳转到欢迎页面 | 426 | + // 检查用户是否已加入家庭 |
| 423 | - if (!hasFamily) { | 427 | + const hasFamily = await checkUserHasFamily() |
| 424 | - console.warn('用户未加入家庭,跳转到欢迎页面'); | 428 | + |
| 425 | - await Taro.redirectTo({ | 429 | + // 如果用户没有加入家庭,跳转到欢迎页面 |
| 426 | - url: '/pages/Welcome/index' | 430 | + if (!hasFamily) { |
| 427 | - }) | 431 | + console.warn('用户未加入家庭,跳转到欢迎页面'); |
| 428 | - return | 432 | + isRedirecting = true; |
| 433 | + await Taro.redirectTo({ | ||
| 434 | + url: '/pages/Welcome/index' | ||
| 435 | + }) | ||
| 436 | + return | ||
| 437 | + } | ||
| 429 | } | 438 | } |
| 430 | } | 439 | } |
| 431 | } catch (error) { | 440 | } catch (error) { |
| 432 | console.error('刷新Dashboard数据异常:', error); | 441 | console.error('刷新Dashboard数据异常:', error); |
| 442 | + // 网络错误等异常情况不应该触发页面跳转 | ||
| 433 | } | 443 | } |
| 434 | }; | 444 | }; |
| 435 | 445 | ||
| ... | @@ -458,6 +468,9 @@ useLoad(async () => { | ... | @@ -458,6 +468,9 @@ useLoad(async () => { |
| 458 | }); | 468 | }); |
| 459 | 469 | ||
| 460 | useDidShow(async () => { | 470 | useDidShow(async () => { |
| 471 | + // 重置跳转标志 | ||
| 472 | + isRedirecting = false; | ||
| 473 | + | ||
| 461 | // 获取系统信息 | 474 | // 获取系统信息 |
| 462 | getSystemInfo(); | 475 | getSystemInfo(); |
| 463 | 476 | ... | ... |
| ... | @@ -107,9 +107,12 @@ export const returnToOriginalPage = async (defaultPath = '/pages/Dashboard/index | ... | @@ -107,9 +107,12 @@ export const returnToOriginalPage = async (defaultPath = '/pages/Dashboard/index |
| 107 | 107 | ||
| 108 | // 如果用户没有加入家庭,跳转到欢迎页面 | 108 | // 如果用户没有加入家庭,跳转到欢迎页面 |
| 109 | if (!hasFamily) { | 109 | if (!hasFamily) { |
| 110 | - await Taro.redirectTo({ | 110 | + // 避免重复跳转到Welcome页面 |
| 111 | - url: '/pages/Welcome/index' | 111 | + if (currentRoute !== 'pages/Welcome/index') { |
| 112 | - }) | 112 | + await Taro.redirectTo({ |
| 113 | + url: '/pages/Welcome/index' | ||
| 114 | + }) | ||
| 115 | + } | ||
| 113 | return | 116 | return |
| 114 | } | 117 | } |
| 115 | 118 | ||
| ... | @@ -137,14 +140,24 @@ export const returnToOriginalPage = async (defaultPath = '/pages/Dashboard/index | ... | @@ -137,14 +140,24 @@ export const returnToOriginalPage = async (defaultPath = '/pages/Dashboard/index |
| 137 | // 错误处理:检查是否有家庭,决定跳转到哪里 | 140 | // 错误处理:检查是否有家庭,决定跳转到哪里 |
| 138 | try { | 141 | try { |
| 139 | const hasFamily = await checkUserHasFamily() | 142 | const hasFamily = await checkUserHasFamily() |
| 143 | + const pages = Taro.getCurrentPages() | ||
| 144 | + const currentPage = pages[pages.length - 1] | ||
| 145 | + const currentRoute = currentPage?.route | ||
| 146 | + | ||
| 140 | if (hasFamily) { | 147 | if (hasFamily) { |
| 141 | - await Taro.redirectTo({ | 148 | + // 避免重复跳转到Dashboard页面 |
| 142 | - url: '/pages/Dashboard/index' | 149 | + if (currentRoute !== 'pages/Dashboard/index') { |
| 143 | - }) | 150 | + await Taro.redirectTo({ |
| 151 | + url: '/pages/Dashboard/index' | ||
| 152 | + }) | ||
| 153 | + } | ||
| 144 | } else { | 154 | } else { |
| 145 | - await Taro.redirectTo({ | 155 | + // 避免重复跳转到Welcome页面 |
| 146 | - url: '/pages/Welcome/index' | 156 | + if (currentRoute !== 'pages/Welcome/index') { |
| 147 | - }) | 157 | + await Taro.redirectTo({ |
| 158 | + url: '/pages/Welcome/index' | ||
| 159 | + }) | ||
| 160 | + } | ||
| 148 | } | 161 | } |
| 149 | } catch (finalError) { | 162 | } catch (finalError) { |
| 150 | console.error('最终降级方案也失败了:', finalError) | 163 | console.error('最终降级方案也失败了:', finalError) | ... | ... |
-
Please register or login to post a comment