From 4b3588e8de4aed05cf020ed01dc745260e9b9c63 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Thu, 18 Dec 2025 17:25:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86=20StockQuoteCard=20=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E5=88=B0=20Tab=20=E5=AE=B9=E5=99=A8=E4=B8=8A=E6=96=B9?= =?UTF-8?q?=20+=20=E4=BF=AE=E5=A4=8D=20TS=20=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 功能变更: - 将 StockQuoteCard 从 CompanyOverview 移至 Company/index.tsx - 股票行情卡片现在在切换 Tab 时始终可见 TypeScript 警告修复: - SubTabContainer: WebkitBackdropFilter 改用 sx 属性 - DetailTable: 重新定义 TableRowData 类型,支持 boolean 索引 - SubscriptionContentNew: 添加类型安全的 AGREEMENT_URLS 索引访问 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/SubTabContainer/index.tsx | 2 +- .../Subscription/SubscriptionContentNew.tsx | 7 +++-- .../components/CompanyOverview/index.tsx | 16 +++++------- .../ForecastReport/components/DetailTable.tsx | 7 +++-- src/views/Company/index.tsx | 26 ++++++++++++++++++- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/components/SubTabContainer/index.tsx b/src/components/SubTabContainer/index.tsx index 84d65d1d..889f83c0 100644 --- a/src/components/SubTabContainer/index.tsx +++ b/src/components/SubTabContainer/index.tsx @@ -198,7 +198,7 @@ const SubTabContainer: React.FC = memo(({ 我已阅读并同意 { + const planName = (selectedPlan as { name?: string } | null)?.name?.toLowerCase(); + return planName === 'pro' || planName === 'max' ? AGREEMENT_URLS[planName] : AGREEMENT_URLS.pro; + })()} isExternal color="#3182CE" textDecoration="underline" mx={1} onClick={(e) => e.stopPropagation()} > - 《{(selectedPlan as any)?.name?.toLowerCase() === 'max' ? 'MAX' : 'PRO'}会员服务协议》 + 《{(selectedPlan as { name?: string } | null)?.name?.toLowerCase() === 'max' ? 'MAX' : 'PRO'}会员服务协议》 diff --git a/src/views/Company/components/CompanyOverview/index.tsx b/src/views/Company/components/CompanyOverview/index.tsx index 11ea698d..19dd714f 100644 --- a/src/views/Company/components/CompanyOverview/index.tsx +++ b/src/views/Company/components/CompanyOverview/index.tsx @@ -1,35 +1,31 @@ // src/views/Company/components/CompanyOverview/index.tsx // 公司档案 - 主组件(组合层) +// 注:StockQuoteCard 已移至 Company/index.tsx,放在 Tab 容器上方,切换 Tab 时始终可见 import React from "react"; -import { VStack } from "@chakra-ui/react"; import type { CompanyOverviewProps } from "./types"; // 子组件 -import StockQuoteCard from "../StockQuoteCard"; import BasicInfoTab from "./BasicInfoTab"; /** * 公司档案组件 * * 功能: - * - 显示股票行情卡片(个股详情) * - 显示基本信息 Tab(内部懒加载各子 Tab 数据) * + * 注意: + * - StockQuoteCard 已提升到 Company/index.tsx 中渲染 + * - 确保切换 Tab 时股票行情卡片始终可见 + * * 懒加载策略: * - BasicInfoTab 内部根据 Tab 切换懒加载数据 * - 各 Panel 组件自行获取所需数据(如 BusinessInfoPanel 调用 useBasicInfo) */ const CompanyOverview: React.FC = ({ stockCode }) => { return ( - - {/* 股票行情卡片 - 个股详情 */} - - - {/* 基本信息内容 - 传入 stockCode,内部懒加载各 Tab 数据 */} - - + ); }; diff --git a/src/views/Company/components/ForecastReport/components/DetailTable.tsx b/src/views/Company/components/ForecastReport/components/DetailTable.tsx index 5dbab05d..2ed1ada2 100644 --- a/src/views/Company/components/ForecastReport/components/DetailTable.tsx +++ b/src/views/Company/components/ForecastReport/components/DetailTable.tsx @@ -114,10 +114,13 @@ const tableStyles = ` } `; -interface TableRowData extends DetailTableRow { +// 表格行数据类型 - 扩展索引签名以支持 boolean +type TableRowData = { key: string; isImportant?: boolean; -} + 指标: string; + [year: string]: string | number | boolean | null | undefined; +}; const DetailTable: React.FC = ({ data }) => { const { years, rows } = data; diff --git a/src/views/Company/index.tsx b/src/views/Company/index.tsx index 0d293099..353a888b 100644 --- a/src/views/Company/index.tsx +++ b/src/views/Company/index.tsx @@ -19,6 +19,7 @@ import SubTabContainer from '@components/SubTabContainer'; import { useCompanyEvents } from './hooks/useCompanyEvents'; import { useCompanyData } from './hooks/useCompanyData'; import CompanyHeader from './components/CompanyHeader'; +import StockQuoteCard from './components/StockQuoteCard'; import { THEME, TAB_CONFIG } from './config'; // ============================================ @@ -39,11 +40,31 @@ TabLoadingFallback.displayName = 'TabLoadingFallback'; interface CompanyContentProps { stockCode: string; + isInWatchlist: boolean; + watchlistLoading: boolean; + onWatchlistToggle: () => void; onTabChange: (index: number, tabKey: string) => void; } -const CompanyContent = memo(({ stockCode, onTabChange }) => ( +const CompanyContent = memo(({ + stockCode, + isInWatchlist, + watchlistLoading, + onWatchlistToggle, + onTabChange, +}) => ( + {/* 股票行情卡片 - 放在 Tab 切换器上方,始终可见 */} + + + + + {/* Tab 内容区 */} {