From b6193c2d63418ced7a4ff0c63fac2ac650650d9f Mon Sep 17 00:00:00 2001 From: Leo <98382335+gaoziman@users.noreply.github.com> Date: Thu, 9 Oct 2025 23:50:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=B6=E8=97=8F=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建收藏按钮组件(FavoriteButton) - 支持收藏/取消收藏功能 - 实现动画效果 --- src/components/FavoriteButton/index.tsx | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/components/FavoriteButton/index.tsx diff --git a/src/components/FavoriteButton/index.tsx b/src/components/FavoriteButton/index.tsx new file mode 100644 index 0000000..1cbf94a --- /dev/null +++ b/src/components/FavoriteButton/index.tsx @@ -0,0 +1,47 @@ +/** + * 收藏按钮组件 + */ + +import React from 'react' +import { Button, message } from 'antd' +import { HeartOutlined, HeartFilled } from '@ant-design/icons' +import { useUserStore } from '@store/useUserStore' + +interface FavoriteButtonProps { + heritageId: string + size?: 'small' | 'middle' | 'large' +} + +const FavoriteButton: React.FC = ({ heritageId, size = 'middle' }) => { + const { user, isAuthenticated, addFavorite, removeFavorite } = useUserStore() + + const isFavorited = user?.favorites.includes(heritageId) || false + + const handleToggle = () => { + if (!isAuthenticated) { + message.warning('请先登录后再收藏') + return + } + + if (isFavorited) { + removeFavorite(heritageId) + message.success('已取消收藏') + } else { + addFavorite(heritageId) + message.success('收藏成功') + } + } + + return ( + + ) +} + +export default FavoriteButton