You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
import React from 'react';
|
|
import { Badge } from "@nutui/nutui-react-taro";
|
|
import { Cart } from "@nutui/icons-react-taro";
|
|
import Taro from '@tarojs/taro';
|
|
import { useCart } from "@/hooks/useCart";
|
|
|
|
interface CartIconProps {
|
|
style?: React.CSSProperties;
|
|
className?: string;
|
|
size?: number;
|
|
showBadge?: boolean;
|
|
onClick?: () => void;
|
|
}
|
|
|
|
const CartIcon: React.FC<CartIconProps> = ({
|
|
style,
|
|
className = '',
|
|
size = 16,
|
|
showBadge = true,
|
|
onClick
|
|
}) => {
|
|
const { cartCount } = useCart();
|
|
|
|
const handleClick = () => {
|
|
if (onClick) {
|
|
onClick();
|
|
} else {
|
|
// 默认跳转到购物车页面
|
|
Taro.switchTab({ url: '/pages/cart/cart' });
|
|
}
|
|
};
|
|
|
|
if (showBadge) {
|
|
return (
|
|
<div
|
|
className={className}
|
|
style={style}
|
|
onClick={handleClick}
|
|
>
|
|
<Badge value={cartCount} top="-2" right="2">
|
|
<div style={{ display: 'flex', alignItems: 'center' }}>
|
|
<Cart size={size} />
|
|
</div>
|
|
</Badge>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={className}
|
|
style={style}
|
|
onClick={handleClick}
|
|
>
|
|
<Cart size={size} />
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default CartIcon;
|