Files
glt-taro/src/app.ts
赵忠林 24c6e6c0fd feat(invite): 优化邀请参数解析和处理逻辑
- 重构 invite 工具函数,增强参数解析能力
- 添加参数调试工具,便于排查问题
- 优化用户登录后的邀请关系处理流程- 调整 API调用,统一使用 dealerId替代 refereeId
- 移除未使用的导入和冗余代码
2025-08-26 18:53:14 +08:00

105 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {useEffect} from 'react'
import Taro, {useDidShow, useDidHide} from '@tarojs/taro'
// 全局样式
import './app.scss'
import {loginByOpenId} from "@/api/layout";
import {TenantId} from "@/config/app";
import {saveStorageByLoginUser} from "@/utils/server";
import {parseInviteParams, saveInviteParams, trackInviteSource, handleInviteRelation, debugInviteInfo} from "@/utils/invite";
function App(props: { children: any; }) {
const reload = () => {
Taro.login({
success: (res) => {
loginByOpenId({
code: res.code,
tenantId: TenantId
}).then(async data => {
if (data) {
saveStorageByLoginUser(data.access_token, data.user)
// 处理邀请关系
if (data.user?.userId) {
try {
const inviteSuccess = await handleInviteRelation(data.user.userId)
if (inviteSuccess) {
console.log('自动登录时邀请关系建立成功')
}
} catch (error) {
console.error('自动登录时处理邀请关系失败:', error)
}
}
}
})
}
})
};
// 可以使用所有的 React Hooks
useEffect(() => {
// Taro.getSetting获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
Taro.getSetting({
success: (res) => {
if (res.authSetting['scope.userInfo']) {
reload();
}
}
});
}, []);
// 对应 onShow
useDidShow(() => {
// 处理小程序启动参数中的邀请信息
const options = Taro.getLaunchOptionsSync()
handleLaunchOptions(options)
})
// 处理启动参数
const handleLaunchOptions = (options: any) => {
try {
console.log('=== 小程序启动参数处理开始 ===')
console.log('完整启动参数:', JSON.stringify(options, null, 2))
// 解析邀请参数
const inviteParams = parseInviteParams(options)
if (inviteParams) {
console.log('✅ 成功检测到邀请参数:', inviteParams)
// 保存邀请参数到本地存储
saveInviteParams(inviteParams)
// 统计邀请来源
trackInviteSource(inviteParams.source || 'unknown', parseInt(inviteParams.inviter || '0'))
// 显示邀请提示
setTimeout(() => {
Taro.showToast({
title: `检测到邀请信息 ID:${inviteParams.inviter}`,
icon: 'success',
duration: 3000
})
}, 1000)
// 打印调试信息
setTimeout(() => {
debugInviteInfo()
}, 2000)
} else {
console.log('❌ 未检测到邀请参数')
}
console.log('=== 小程序启动参数处理结束 ===')
} catch (error) {
console.error('处理启动参数失败:', error)
}
}
// 对应 onHide
useDidHide(() => {
})
return props.children
}
export default App