import Header from './Header'; import BestSellers from './BestSellers'; import Taro from '@tarojs/taro'; import {useShareAppMessage} from "@tarojs/taro" import {useEffect, useState} from "react"; import {getShopInfo} from "@/api/layout"; import {Sticky} from '@nutui/nutui-react-taro' import Menu from "./Menu"; import Banner from "./Banner"; import {checkAndHandleInviteRelation, hasPendingInvite} from "@/utils/invite"; import './index.scss' // import GoodsList from "./GoodsList"; function Home() { // 吸顶状态 const [stickyStatus, setStickyStatus] = useState(false) useShareAppMessage(() => { // 获取当前用户ID,用于生成邀请链接 const userId = Taro.getStorageSync('UserId'); return { title: '网宿小店 - 网宿软件', path: userId ? `/pages/index/index?inviter=${userId}&source=share&t=${Date.now()}` : `/pages/index/index`, success: function () { console.log('首页分享成功'); Taro.showToast({ title: '分享成功', icon: 'success', duration: 2000 }); }, fail: function () { console.log('首页分享失败'); Taro.showToast({ title: '分享失败', icon: 'none', duration: 2000 }); } }; }); // const reloadMore = async () => { // setPage(page + 1) // } const showAuthModal = () => { Taro.showModal({ title: '授权提示', content: '需要获取您的用户信息', confirmText: '去授权', cancelText: '取消', success: (res) => { if (res.confirm) { // 用户点击确认,打开授权设置页面 openSetting(); } } }); }; const openSetting = () => { // Taro.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。 Taro.openSetting({ success: (res) => { if (res.authSetting['scope.userInfo']) { // 用户授权成功,可以获取用户信息 reload(); } else { // 用户拒绝授权,提示授权失败 Taro.showToast({ title: '授权失败', icon: 'none' }); } } }); }; const onSticky = (item: IArguments) => { if(item){ setStickyStatus(!stickyStatus) } } const reload = () => { }; useEffect(() => { // 获取站点信息 getShopInfo().then(() => { }) // 检查是否有待处理的邀请关系 - 异步处理,不阻塞页面加载 if (hasPendingInvite()) { console.log('检测到待处理的邀请关系') // 延迟处理,确保用户信息已加载,并设置超时保护 setTimeout(async () => { try { // 设置超时保护,避免长时间等待 const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('邀请关系处理超时')), 8000) ); const invitePromise = checkAndHandleInviteRelation(); const success = await Promise.race([invitePromise, timeoutPromise]); if (success) { console.log('首页邀请关系处理成功') } } catch (error) { console.error('首页邀请关系处理失败:', error) // 邀请关系处理失败不应该影响页面正常显示 // 可以选择清除邀请参数,避免重复尝试 const errorMessage = error instanceof Error ? error.message : String(error) if (errorMessage?.includes('超时')) { console.log('邀请关系处理超时,清除邀请参数') // 可以选择清除邀请参数或稍后重试 } } }, 2000) } // Taro.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。 Taro.getSetting({ success: (res) => { if (res.authSetting['scope.userInfo']) { // 用户已经授权过,可以直接获取用户信息 console.log('用户已经授权过,可以直接获取用户信息') reload(); } else { // 用户未授权,需要弹出授权窗口 console.log('用户未授权,需要弹出授权窗口') showAuthModal(); } } }); // 获取用户信息 Taro.getUserInfo({ success: (res) => { const avatar = res.userInfo.avatarUrl; console.log(avatar, 'avatarUrl') } }); }, []); return ( <> onSticky(arguments)}>
{/**/}
) } export default Home