From 0017302e5c113b04af2373e0680a4978636039ba Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Fri, 26 Dec 2025 13:32:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(StockQuoteCard):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=88=86=E4=BA=AB=E5=8A=9F=E8=83=BD=E5=92=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - index.tsx: 实现 handleShare,点击复制链接并显示 Toast 提示 - StockHeader: 移除 updateTime prop,改为显示页面打开时间 - StockHeader: 时间格式改为「年-月-日 时:分」完整格式 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../StockQuoteCard/components/StockHeader.tsx | 18 +++++++--- .../components/StockQuoteCard/index.tsx | 34 +++++++++++++++++-- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/views/Company/components/StockQuoteCard/components/StockHeader.tsx b/src/views/Company/components/StockQuoteCard/components/StockHeader.tsx index 268ba91d..94708264 100644 --- a/src/views/Company/components/StockQuoteCard/components/StockHeader.tsx +++ b/src/views/Company/components/StockQuoteCard/components/StockHeader.tsx @@ -7,7 +7,7 @@ * - 操作按钮悬停态有玻璃效果 */ -import React, { memo } from 'react'; +import React, { memo, useState } from 'react'; import { Flex, HStack, Text, Badge, IconButton, Tooltip } from '@chakra-ui/react'; import { Share2 } from 'lucide-react'; import FavoriteButton from '@components/FavoriteButton'; @@ -25,8 +25,6 @@ export interface StockHeaderProps { industry?: string; /** 指数标签(沪深300、中证500等) */ indexTags?: string[]; - /** 更新时间 */ - updateTime?: string; // 关注相关 isInWatchlist?: boolean; isWatchlistLoading?: boolean; @@ -51,7 +49,6 @@ export const StockHeader: React.FC = memo(({ industryL1, industry, indexTags, - updateTime, isInWatchlist = false, isWatchlistLoading = false, onWatchlistToggle, @@ -59,6 +56,17 @@ export const StockHeader: React.FC = memo(({ isCompareLoading = false, onCompare, }) => { + // 页面打开时间(组件首次渲染时记录,格式:年月日时分) + const [openTime] = useState(() => { + const now = new Date(); + const year = now.getFullYear(); + const month = (now.getMonth() + 1).toString().padStart(2, '0'); + const day = now.getDate().toString().padStart(2, '0'); + const hour = now.getHours().toString().padStart(2, '0'); + const minute = now.getMinutes().toString().padStart(2, '0'); + return `${year}-${month}-${day} ${hour}:${minute}`; + }); + return ( {/* 左侧:股票名称 + 行业标签 + 指数标签 */} @@ -131,7 +139,7 @@ export const StockHeader: React.FC = memo(({ /> - {updateTime?.split(' ')[1] || '--:--'} + {openTime} diff --git a/src/views/Company/components/StockQuoteCard/index.tsx b/src/views/Company/components/StockQuoteCard/index.tsx index 85a66b84..bc5dd8fe 100644 --- a/src/views/Company/components/StockQuoteCard/index.tsx +++ b/src/views/Company/components/StockQuoteCard/index.tsx @@ -14,8 +14,8 @@ * - MainForceInfo:主力动态 */ -import React, { memo } from 'react'; -import { Box, Flex, VStack, useDisclosure } from '@chakra-ui/react'; +import React, { memo, useCallback } from 'react'; +import { Box, Flex, VStack, useDisclosure, useToast } from '@chakra-ui/react'; import { CardGlow } from '@components/FUI'; // 子组件导入 @@ -64,6 +64,34 @@ const StockQuoteCard: React.FC = ({ clearCompare(); }; + // Toast 提示 + const toast = useToast(); + + // 分享功能:复制链接到剪贴板 + const handleShare = useCallback(async () => { + const shareUrl = `https://valuefrontier.cn/company?scode=${stockCode}`; + + try { + await navigator.clipboard.writeText(shareUrl); + toast({ + title: '链接已复制', + description: '快去分享给好友吧~', + status: 'success', + duration: 2000, + isClosable: true, + position: 'top', + }); + } catch (err) { + toast({ + title: '复制失败', + description: '请手动复制链接', + status: 'error', + duration: 2000, + position: 'top', + }); + } + }, [stockCode, toast]); + // 加载中 if (isLoading || !quoteData) { return ; @@ -83,10 +111,10 @@ const StockQuoteCard: React.FC = ({ industryL1={quoteData.industryL1} industry={quoteData.industry} indexTags={quoteData.indexTags} - updateTime={quoteData.updateTime} isInWatchlist={isInWatchlist} isWatchlistLoading={isWatchlistLoading} onWatchlistToggle={onWatchlistToggle} + onShare={handleShare} isCompareLoading={isCompareLoading} onCompare={handleCompare} />