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} from "@/utils/invite"; import { useConfig } from "@/hooks/useConfig"; // 引入新的自定义Hook function App(props: { children: any; }) { const { refetch: handleTheme } = useConfig(); // 使用新的Hook 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(() => { // 设置主题 (现在由useConfig Hook处理) handleTheme() // 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(() => { console.log(`检测到邀请信息 ID:${inviteParams.inviter}`) }, 1000) } else { console.log('❌ 未检测到邀请参数') } console.log('=== 小程序启动参数处理结束 ===') } catch (error) { console.error('处理启动参数失败:', error) } } // 对应 onHide useDidHide(() => { }) return props.children } export default App