|
@ -1,6 +1,6 @@ |
|
|
import {Button} from '@nutui/nutui-react-taro' |
|
|
import {Button} from '@nutui/nutui-react-taro' |
|
|
import {Avatar, Tag} from '@nutui/nutui-react-taro' |
|
|
import {Avatar, Tag} from '@nutui/nutui-react-taro' |
|
|
import {View, Text} from '@tarojs/components' |
|
|
|
|
|
|
|
|
import {View, Text, Image} from '@tarojs/components' |
|
|
import {Scan} from '@nutui/icons-react-taro'; |
|
|
import {Scan} from '@nutui/icons-react-taro'; |
|
|
import {getUserInfo, getWxOpenId} from '@/api/layout'; |
|
|
import {getUserInfo, getWxOpenId} from '@/api/layout'; |
|
|
import Taro from '@tarojs/taro'; |
|
|
import Taro from '@tarojs/taro'; |
|
@ -16,7 +16,7 @@ const UserCard = forwardRef<any, any>((_, ref) => { |
|
|
const { |
|
|
const { |
|
|
isAdmin |
|
|
isAdmin |
|
|
} = useUser(); |
|
|
} = useUser(); |
|
|
const { data, refresh } = useUserData() |
|
|
|
|
|
|
|
|
const {data, refresh} = useUserData() |
|
|
const {getDisplayName, getRoleName} = useUser(); |
|
|
const {getDisplayName, getRoleName} = useUser(); |
|
|
const [IsLogin, setIsLogin] = useState<boolean>(false) |
|
|
const [IsLogin, setIsLogin] = useState<boolean>(false) |
|
|
const [userInfo, setUserInfo] = useState<User>() |
|
|
const [userInfo, setUserInfo] = useState<User>() |
|
@ -119,7 +119,7 @@ const UserCard = forwardRef<any, any>((_, ref) => { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
/* 获取用户手机号 */ |
|
|
/* 获取用户手机号 */ |
|
|
const handleGetPhoneNumber = ({detail}: {detail: {code?: string, encryptedData?: string, iv?: string}}) => { |
|
|
|
|
|
|
|
|
const handleGetPhoneNumber = ({detail}: { detail: { code?: string, encryptedData?: string, iv?: string } }) => { |
|
|
const {code, encryptedData, iv} = detail |
|
|
const {code, encryptedData, iv} = detail |
|
|
|
|
|
|
|
|
// 获取存储的邀请参数
|
|
|
// 获取存储的邀请参数
|
|
@ -171,71 +171,85 @@ const UserCard = forwardRef<any, any>((_, ref) => { |
|
|
return ( |
|
|
return ( |
|
|
<View className={'header-bg pt-20'}> |
|
|
<View className={'header-bg pt-20'}> |
|
|
<View className={'p-4'}> |
|
|
<View className={'p-4'}> |
|
|
<View |
|
|
|
|
|
className={'user-card w-full flex flex-col justify-around rounded-xl shadow-sm'} |
|
|
|
|
|
style={{ |
|
|
|
|
|
background: 'linear-gradient(to bottom, #ffffff, #ffffff)', // 这种情况建议使用类名来控制样式(引入外联样式)
|
|
|
|
|
|
// width: '720rpx',
|
|
|
|
|
|
// margin: '10px auto 0px auto',
|
|
|
|
|
|
height: '170px', |
|
|
|
|
|
// borderRadius: '22px 22px 0 0',
|
|
|
|
|
|
}} |
|
|
|
|
|
> |
|
|
|
|
|
<View className={'user-card-header flex w-full justify-between items-center pt-4'}> |
|
|
|
|
|
<View className={'flex items-center mx-4'}> |
|
|
|
|
|
{ |
|
|
|
|
|
IsLogin ? ( |
|
|
|
|
|
<Avatar size="large" src={userInfo?.avatar} shape="round"/> |
|
|
|
|
|
) : ( |
|
|
|
|
|
<Button className={'text-black'} open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}> |
|
|
|
|
|
|
|
|
{/* 使用相对定位容器,让个人资料图片可以绝对定位在右上角 */} |
|
|
|
|
|
<View className="relative"> |
|
|
|
|
|
<View |
|
|
|
|
|
className={'user-card w-full flex flex-col justify-around rounded-xl'} |
|
|
|
|
|
style={{ |
|
|
|
|
|
background: 'linear-gradient(to bottom, #ffffff, #ffffff)', |
|
|
|
|
|
height: '170px', |
|
|
|
|
|
}} |
|
|
|
|
|
> |
|
|
|
|
|
<View className={'user-card-header flex w-full justify-between items-center pt-4'}> |
|
|
|
|
|
<View className={'flex items-center mx-4'}> |
|
|
|
|
|
{ |
|
|
|
|
|
IsLogin ? ( |
|
|
<Avatar size="large" src={userInfo?.avatar} shape="round"/> |
|
|
<Avatar size="large" src={userInfo?.avatar} shape="round"/> |
|
|
</Button> |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
<View className={'user-info flex flex-col px-2'}> |
|
|
|
|
|
<View className={'py-1 text-black font-bold'}>{getDisplayName()}</View> |
|
|
|
|
|
{IsLogin ? ( |
|
|
|
|
|
<View className={'grade text-xs py-1'}> |
|
|
|
|
|
<Tag type="success" round> |
|
|
|
|
|
<Text className={'p-1'}> |
|
|
|
|
|
{getRoleName()} |
|
|
|
|
|
</Text> |
|
|
|
|
|
</Tag> |
|
|
|
|
|
</View> |
|
|
|
|
|
) : ''} |
|
|
|
|
|
|
|
|
) : ( |
|
|
|
|
|
<Button className={'text-black'} open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}> |
|
|
|
|
|
<Avatar size="large" src={userInfo?.avatar} shape="round"/> |
|
|
|
|
|
</Button> |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
<View className={'user-info flex flex-col px-2'}> |
|
|
|
|
|
<View className={'py-1 text-black font-bold'}>{getDisplayName()}</View> |
|
|
|
|
|
{IsLogin ? ( |
|
|
|
|
|
<View className={'grade text-xs py-1'}> |
|
|
|
|
|
<Tag type="success" round> |
|
|
|
|
|
<Text className={'p-1'}> |
|
|
|
|
|
{getRoleName()} |
|
|
|
|
|
</Text> |
|
|
|
|
|
</Tag> |
|
|
|
|
|
</View> |
|
|
|
|
|
) : ''} |
|
|
|
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
|
|
|
{isAdmin() && |
|
|
|
|
|
<Scan className={'text-gray-900'} size={24} onClick={() => navTo('/user/store/verification', true)}/>} |
|
|
</View> |
|
|
</View> |
|
|
{isAdmin() && <Scan className={'text-gray-900'} size={24} onClick={() => navTo('/user/store/verification', true)} />} |
|
|
|
|
|
<View className={'mr-4 text-sm px-3 py-1 text-black border-gray-400 border-solid border-2 rounded-3xl'} |
|
|
|
|
|
onClick={() => navTo('/user/profile/profile', true)}> |
|
|
|
|
|
{'个人资料'} |
|
|
|
|
|
|
|
|
<View className={'flex justify-around mt-1'}> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/wallet/wallet', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>余额</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.balance || '0.00'}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>积分</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.points || 0}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/coupon/index', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>优惠券</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.coupons || 0}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/gift/index', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>礼品卡</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.giftCards || 0}</Text> |
|
|
|
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
<View className={'flex justify-around mt-1'}> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/wallet/wallet', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>余额</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.balance || '0.00'}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>积分</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.points || 0}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/coupon/index', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>优惠券</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.coupons || 0}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
<View className={'item flex justify-center flex-col items-center'} |
|
|
|
|
|
onClick={() => navTo('/user/gift/index', true)}> |
|
|
|
|
|
<Text className={'text-sm text-gray-500'}>礼品卡</Text> |
|
|
|
|
|
<Text className={'text-xl'}>{data?.giftCards || 0}</Text> |
|
|
|
|
|
</View> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* 个人资料图片,定位在右上角 */} |
|
|
|
|
|
<View |
|
|
|
|
|
className="absolute top-0 right-0 overflow-hidden" |
|
|
|
|
|
style={{ |
|
|
|
|
|
borderRadius:"0 0.75rem 0 0" |
|
|
|
|
|
}} |
|
|
|
|
|
onClick={() => navTo('/user/profile/profile', true)} |
|
|
|
|
|
> |
|
|
|
|
|
<Image |
|
|
|
|
|
src="https://oss.wsdns.cn/20250913/7c3de38b377344b89131aba40214f63f.png" |
|
|
|
|
|
alt="个人资料" |
|
|
|
|
|
style={{ |
|
|
|
|
|
width:"200rpx" |
|
|
|
|
|
}} |
|
|
|
|
|
mode="widthFix" |
|
|
|
|
|
/> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
</View> |
|
|
|
|
|
|
|
|
) |
|
|
) |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|