import Taro from '@tarojs/taro'; 
 | 
import { object2query } from '@12333/utils'; 
 | 
import { goBack } from '@/utils'; 
 | 
import { useSwitchTab } from './router'; 
 | 
import { TabBarPageRouter } from '@/constants'; 
 | 
import { useQueryClient } from '@tanstack/vue-query'; 
 | 
  
 | 
function getOtherQuery(query: Partial<Record<string, string>>) { 
 | 
  if (query) { 
 | 
    return Object.keys(query).reduce((acc, cur) => { 
 | 
      if (cur !== 'redirect' && cur !== '$taroTimestamp') { 
 | 
        acc[cur] = query[cur]; 
 | 
      } 
 | 
      return acc; 
 | 
    }, {}); 
 | 
  } 
 | 
} 
 | 
  
 | 
export function useLoginedJump() { 
 | 
  const router = Taro.useRouter(); 
 | 
  const { redirect } = router.params; 
 | 
  
 | 
  const otherQuery = getOtherQuery(router.params); 
 | 
  
 | 
  const otherQueryString = computed(() => { 
 | 
    const str = object2query(otherQuery); 
 | 
    return str.length > 0 ? `${str}` : ''; 
 | 
  }); 
 | 
  
 | 
  const redirectPath = computed(() => { 
 | 
    return redirect 
 | 
      ? otherQueryString.value 
 | 
        ? `${redirect}?${otherQueryString.value}` 
 | 
        : redirect 
 | 
      : ''; 
 | 
  }); 
 | 
  
 | 
  const redirectParams = computed(() => { 
 | 
    return redirect ? `${redirect}&${otherQueryString.value}` : ''; 
 | 
  }); 
 | 
  
 | 
  const switchTab = useSwitchTab(); 
 | 
  
 | 
  const queryClient = useQueryClient(); 
 | 
  
 | 
  const pages = Taro.getCurrentPages(); 
 | 
  
 | 
  function goBackFromAuthorization() { 
 | 
    const authorizationIndex = pages.findIndex((x) => 
 | 
      `/${x.route}`.includes(RouterPath.authorization) 
 | 
    ); 
 | 
    let delta = authorizationIndex >= 0 ? pages.length - authorizationIndex : 1; 
 | 
    goBack(delta); 
 | 
  } 
 | 
  
 | 
  function jump() { 
 | 
    if (redirect) { 
 | 
      const isTabBarPage = Object.values(TabBarPageRouter).includes(redirect as any); 
 | 
      if (isTabBarPage) { 
 | 
        switchTab({ 
 | 
          url: redirectPath.value, 
 | 
        }); 
 | 
      } else { 
 | 
        // Taro.redirectTo({ 
 | 
        //   url: redirectPath.value, 
 | 
        // }); 
 | 
        goBackFromAuthorization(); 
 | 
      } 
 | 
    } else { 
 | 
      goBackFromAuthorization(); 
 | 
    } 
 | 
    queryClient.refetchQueries(); 
 | 
  } 
 | 
  
 | 
  return { jump, redirectPath, redirectParams }; 
 | 
} 
 |