|
|
@ -1,15 +1,16 @@ |
|
|
|
import {useEffect, useState} from "react"; |
|
|
|
import {Image, Tabs, Empty} from '@nutui/nutui-react-taro' |
|
|
|
import {Image, Tabs, Empty, Sticky} from '@nutui/nutui-react-taro' |
|
|
|
import {Share} from '@nutui/icons-react-taro' |
|
|
|
import {View, Text} from '@tarojs/components'; |
|
|
|
import Taro from "@tarojs/taro"; |
|
|
|
import {ShopGoods} from "@/api/shop/shopGoods/model"; |
|
|
|
import {pageShopGoods} from "@/api/shop/shopGoods"; |
|
|
|
|
|
|
|
const BestSellers = () => { |
|
|
|
const BestSellers = (props: {onStickyChange?: (isSticky: boolean) => void}) => { |
|
|
|
const [tab1value, setTab1value] = useState<string | number>('0') |
|
|
|
const [list, setList] = useState<ShopGoods[]>([]) |
|
|
|
const [goods, setGoods] = useState<ShopGoods>() |
|
|
|
const [stickyStatus, setStickyStatus] = useState<boolean>(false) |
|
|
|
|
|
|
|
const reload = () => { |
|
|
|
pageShopGoods({}).then(res => { |
|
|
@ -48,37 +49,63 @@ const BestSellers = () => { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
// 处理粘性布局状态变化
|
|
|
|
const onStickyChange = (isSticky: boolean) => { |
|
|
|
setStickyStatus(isSticky) |
|
|
|
// 通知父组件粘性状态变化
|
|
|
|
props.onStickyChange?.(isSticky) |
|
|
|
console.log('Tabs 粘性状态:', isSticky ? '已固定' : '取消固定') |
|
|
|
} |
|
|
|
|
|
|
|
// 获取小程序系统信息
|
|
|
|
const getSystemInfo = () => { |
|
|
|
const systemInfo = Taro.getSystemInfoSync() |
|
|
|
// 状态栏高度 + 导航栏高度 (一般为44px)
|
|
|
|
return (systemInfo.statusBarHeight || 0) + 44 |
|
|
|
} |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
reload() |
|
|
|
}, []) |
|
|
|
|
|
|
|
// 注意:不在这里配置分享,避免与首页分享冲突
|
|
|
|
// 商品分享应该在商品详情页处理,首页分享应该分享首页本身
|
|
|
|
|
|
|
|
return ( |
|
|
|
<> |
|
|
|
<View className={'py-3'}> |
|
|
|
{/* Tabs切换组件 */} |
|
|
|
<Tabs |
|
|
|
value={tab1value} |
|
|
|
className={'w-full mb-4'} |
|
|
|
onChange={(value) => { |
|
|
|
setTab1value(value) |
|
|
|
}} |
|
|
|
<View className={'py-3'} style={{paddingTop: '0'}}> |
|
|
|
{/* Tabs粘性布局组件 */} |
|
|
|
<Sticky |
|
|
|
threshold={getSystemInfo()} |
|
|
|
onChange={onStickyChange} |
|
|
|
style={{ |
|
|
|
backgroundColor: 'transparent', |
|
|
|
zIndex: 999, |
|
|
|
backgroundColor: stickyStatus ? '#ffffff' : 'transparent', |
|
|
|
boxShadow: stickyStatus ? '0 2px 8px rgba(0,0,0,0.1)' : 'none', |
|
|
|
transition: 'all 0.3s ease', |
|
|
|
marginTop: stickyStatus ? '0' : '-12px' |
|
|
|
}} |
|
|
|
activeType="smile" |
|
|
|
> |
|
|
|
<Tabs.TabPane title="今日主推"> |
|
|
|
</Tabs.TabPane> |
|
|
|
<Tabs.TabPane title="即将到期"> |
|
|
|
</Tabs.TabPane> |
|
|
|
<Tabs.TabPane title="活动预告"> |
|
|
|
</Tabs.TabPane> |
|
|
|
</Tabs> |
|
|
|
<Tabs |
|
|
|
value={tab1value} |
|
|
|
className={'w-full'} |
|
|
|
onChange={(value) => { |
|
|
|
setTab1value(value) |
|
|
|
}} |
|
|
|
style={{ |
|
|
|
backgroundColor: 'transparent', |
|
|
|
paddingTop: stickyStatus ? '0' : '8px', |
|
|
|
paddingBottom: stickyStatus ? '8px' : '0', |
|
|
|
}} |
|
|
|
activeType="smile" |
|
|
|
> |
|
|
|
<Tabs.TabPane title="今日主推"> |
|
|
|
</Tabs.TabPane> |
|
|
|
<Tabs.TabPane title="即将到期"> |
|
|
|
</Tabs.TabPane> |
|
|
|
<Tabs.TabPane title="活动预告"> |
|
|
|
</Tabs.TabPane> |
|
|
|
</Tabs> |
|
|
|
</Sticky> |
|
|
|
|
|
|
|
<View className={'flex flex-col justify-between items-center rounded-lg px-2'}> |
|
|
|
<View className={'flex flex-col justify-between items-center rounded-lg px-2 mt-4'}> |
|
|
|
{/* 今日主推 */} |
|
|
|
{tab1value == '0' && list?.map((item, index) => { |
|
|
|
return ( |
|
|
|