fix(CompanyOverview): 修复 useBasicInfo 重复调用问题

- BusinessInfoPanel: 改为内部调用 useBasicInfo,自行获取数据
- BasicInfoTab: 移除 basicInfo prop 传递
- CompanyOverview: 移除顶层 useBasicInfo 调用
- types.ts: 补充 BasicInfo 工商信息字段类型定义

修复前:CompanyOverview 和各子组件重复请求 /api/stock/{code}/basic-info
修复后:仅 BusinessInfoPanel 在需要时请求一次

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-17 12:02:31 +08:00
parent c83d239219
commit bdc823e122
4 changed files with 27 additions and 13 deletions

View File

@@ -12,15 +12,27 @@ import {
Divider, Divider,
Center, Center,
Code, Code,
Spinner,
} from "@chakra-ui/react"; } from "@chakra-ui/react";
import { THEME } from "../config"; import { THEME } from "../config";
import { useBasicInfo } from "../../hooks/useBasicInfo";
interface BusinessInfoPanelProps { interface BusinessInfoPanelProps {
basicInfo: any; stockCode: string;
}
const BusinessInfoPanel: React.FC<BusinessInfoPanelProps> = ({ stockCode }) => {
const { basicInfo, loading } = useBasicInfo(stockCode);
if (loading) {
return (
<Center h="200px">
<Spinner size="lg" color={THEME.gold} />
</Center>
);
} }
const BusinessInfoPanel: React.FC<BusinessInfoPanelProps> = ({ basicInfo }) => {
if (!basicInfo) { if (!basicInfo) {
return ( return (
<Center h="200px"> <Center h="200px">

View File

@@ -17,7 +17,6 @@ import {
// Props 类型定义 // Props 类型定义
export interface BasicInfoTabProps { export interface BasicInfoTabProps {
stockCode: string; stockCode: string;
basicInfo?: any;
// 可配置项 // 可配置项
enabledTabs?: string[]; // 指定显示哪些 Tab通过 key enabledTabs?: string[]; // 指定显示哪些 Tab通过 key
@@ -59,7 +58,6 @@ const buildTabsConfig = (enabledKeys?: string[]): SubTabConfig[] => {
*/ */
const BasicInfoTab: React.FC<BasicInfoTabProps> = ({ const BasicInfoTab: React.FC<BasicInfoTabProps> = ({
stockCode, stockCode,
basicInfo,
enabledTabs, enabledTabs,
defaultTabIndex = 0, defaultTabIndex = 0,
onTabChange, onTabChange,
@@ -72,7 +70,7 @@ const BasicInfoTab: React.FC<BasicInfoTabProps> = ({
<CardBody p={0}> <CardBody p={0}>
<SubTabContainer <SubTabContainer
tabs={tabs} tabs={tabs}
componentProps={{ stockCode, basicInfo }} componentProps={{ stockCode }}
defaultIndex={defaultTabIndex} defaultIndex={defaultTabIndex}
onTabChange={onTabChange} onTabChange={onTabChange}
themePreset="blackGold" themePreset="blackGold"

View File

@@ -4,10 +4,9 @@
import React from "react"; import React from "react";
import { VStack } from "@chakra-ui/react"; import { VStack } from "@chakra-ui/react";
import { useBasicInfo } from "./hooks/useBasicInfo";
import type { CompanyOverviewProps } from "./types"; import type { CompanyOverviewProps } from "./types";
// 子组件(暂保持 JS // 子组件
import BasicInfoTab from "./BasicInfoTab"; import BasicInfoTab from "./BasicInfoTab";
/** /**
@@ -18,17 +17,13 @@ import BasicInfoTab from "./BasicInfoTab";
* *
* 懒加载策略: * 懒加载策略:
* - BasicInfoTab 内部根据 Tab 切换懒加载数据 * - BasicInfoTab 内部根据 Tab 切换懒加载数据
* - 各 Panel 组件自行获取所需数据(如 BusinessInfoPanel 调用 useBasicInfo
*/ */
const CompanyOverview: React.FC<CompanyOverviewProps> = ({ stockCode }) => { const CompanyOverview: React.FC<CompanyOverviewProps> = ({ stockCode }) => {
const { basicInfo } = useBasicInfo(stockCode);
return ( return (
<VStack spacing={6} align="stretch"> <VStack spacing={6} align="stretch">
{/* 基本信息内容 - 传入 stockCode内部懒加载各 Tab 数据 */} {/* 基本信息内容 - 传入 stockCode内部懒加载各 Tab 数据 */}
<BasicInfoTab <BasicInfoTab stockCode={stockCode} />
stockCode={stockCode}
basicInfo={basicInfo}
/>
</VStack> </VStack>
); );
}; };

View File

@@ -22,6 +22,15 @@ export interface BasicInfo {
email?: string; email?: string;
tel?: string; tel?: string;
company_intro?: string; company_intro?: string;
// 工商信息字段
credit_code?: string;
company_size?: string;
reg_address?: string;
office_address?: string;
accounting_firm?: string;
law_firm?: string;
main_business?: string;
business_scope?: string;
} }
/** /**