hookehuyr

fix(路由跳转): 防止重复跳转到欢迎页和仪表盘页

添加路由跳转防抖逻辑,避免在相同页面间重复跳转
在Dashboard页面添加跳转状态标志,优化家庭状态检查逻辑
...@@ -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)
......