paySuccessRedirect.js 1.35 KB
import Taro from '@tarojs/taro'
import { getTabbarConfigAPI } from '@/api/tabbar'
import { buildWebviewPreviewUrl } from '@/utils/webview'

/**
 * @description 支付成功后跳转到“我的”菜单对应的 WebView;没有 user 菜单则回首页
 * @returns {Promise<{ target: 'user-webview' | 'home', reason: 'success' | 'missing-user-menu' | 'empty-user-link' | 'request-failed' }>}
 */
export const redirectAfterPaySuccess = async () => {
  try {
    const response = await getTabbarConfigAPI()
    const user_menu = response?.data?.user

    if (!user_menu) {
      await Taro.reLaunch({
        url: '/pages/index/index',
      })
      return { target: 'home', reason: 'missing-user-menu' }
    }

    const user_link = String(user_menu?.link || '').trim()
    if (!user_link) {
      await Taro.reLaunch({
        url: '/pages/index/index',
      })
      return { target: 'home', reason: 'empty-user-link' }
    }

    const user_title = String(user_menu?.title || '我的').trim() || '我的'

    await Taro.redirectTo({
      url: buildWebviewPreviewUrl(user_link, user_title),
    })

    return { target: 'user-webview', reason: 'success' }
  } catch (error) {
    console.error('支付成功后跳转目标获取失败:', error)

    await Taro.reLaunch({
      url: '/pages/index/index',
    })

    return { target: 'home', reason: 'request-failed' }
  }
}