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);
423 +
424 + // 只有在明确的错误情况下才进行家庭状态检查
425 + if (!isRedirecting && (data?.msg?.includes('家庭') || data?.code === 404)) {
419 // 检查用户是否已加入家庭 426 // 检查用户是否已加入家庭
420 const hasFamily = await checkUserHasFamily() 427 const hasFamily = await checkUserHasFamily()
421 428
422 // 如果用户没有加入家庭,跳转到欢迎页面 429 // 如果用户没有加入家庭,跳转到欢迎页面
423 if (!hasFamily) { 430 if (!hasFamily) {
424 console.warn('用户未加入家庭,跳转到欢迎页面'); 431 console.warn('用户未加入家庭,跳转到欢迎页面');
432 + isRedirecting = true;
425 await Taro.redirectTo({ 433 await Taro.redirectTo({
426 url: '/pages/Welcome/index' 434 url: '/pages/Welcome/index'
427 }) 435 })
428 return 436 return
429 } 437 }
430 } 438 }
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 + // 避免重复跳转到Welcome页面
111 + if (currentRoute !== 'pages/Welcome/index') {
110 await Taro.redirectTo({ 112 await Taro.redirectTo({
111 url: '/pages/Welcome/index' 113 url: '/pages/Welcome/index'
112 }) 114 })
115 + }
113 return 116 return
114 } 117 }
115 118
...@@ -137,15 +140,25 @@ export const returnToOriginalPage = async (defaultPath = '/pages/Dashboard/index ...@@ -137,15 +140,25 @@ 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) {
148 + // 避免重复跳转到Dashboard页面
149 + if (currentRoute !== 'pages/Dashboard/index') {
141 await Taro.redirectTo({ 150 await Taro.redirectTo({
142 url: '/pages/Dashboard/index' 151 url: '/pages/Dashboard/index'
143 }) 152 })
153 + }
144 } else { 154 } else {
155 + // 避免重复跳转到Welcome页面
156 + if (currentRoute !== 'pages/Welcome/index') {
145 await Taro.redirectTo({ 157 await Taro.redirectTo({
146 url: '/pages/Welcome/index' 158 url: '/pages/Welcome/index'
147 }) 159 })
148 } 160 }
161 + }
149 } catch (finalError) { 162 } catch (finalError) {
150 console.error('最终降级方案也失败了:', finalError) 163 console.error('最终降级方案也失败了:', finalError)
151 } 164 }
......