From c83d239219c01195bd2b1fe2ce77b3e08b70d4e5 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 17 Dec 2025 11:54:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor(Company):=20fetch=20=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=87=B3=20axios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DeepAnalysis: 4 个 fetch → axios - DynamicTracking: 3 个 fetch → axios (NewsPanel, ForecastPanel) - MarketDataView/services: 4 个 fetch → axios - CompanyOverview/hooks: 9 个 fetch → axios (6 个文件) - StockQuoteCard/hooks: 1 个 fetch → axios - ValueChainNodeCard: 1 个 fetch → axios 清理: - 删除未使用的 useCompanyOverviewData.ts - 移除所有 getApiBase/API_BASE_URL 引用 总计: 22 个 fetch 调用迁移, 复用项目已有的 axios 拦截器配置 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../organisms/ValueChainNodeCard/index.tsx | 9 +- .../hooks/useAnnouncementsData.ts | 9 +- .../CompanyOverview/hooks/useBasicInfo.ts | 9 +- .../CompanyOverview/hooks/useBranchesData.ts | 9 +- .../hooks/useCompanyOverviewData.ts | 140 ------------------ .../hooks/useDisclosureData.ts | 9 +- .../hooks/useManagementData.ts | 9 +- .../hooks/useShareholderData.ts | 27 ++-- .../Company/components/DeepAnalysis/index.js | 28 ++-- .../components/ForecastPanel.js | 9 +- .../DynamicTracking/components/NewsPanel.js | 14 +- .../MarketDataView/services/marketService.ts | 40 +---- .../StockQuoteCard/hooks/useStockQuoteData.ts | 7 +- 13 files changed, 62 insertions(+), 257 deletions(-) delete mode 100644 src/views/Company/components/CompanyOverview/hooks/useCompanyOverviewData.ts diff --git a/src/views/Company/components/CompanyOverview/DeepAnalysisTab/organisms/ValueChainNodeCard/index.tsx b/src/views/Company/components/CompanyOverview/DeepAnalysisTab/organisms/ValueChainNodeCard/index.tsx index 3f6245e4..dd8386ec 100644 --- a/src/views/Company/components/CompanyOverview/DeepAnalysisTab/organisms/ValueChainNodeCard/index.tsx +++ b/src/views/Company/components/CompanyOverview/DeepAnalysisTab/organisms/ValueChainNodeCard/index.tsx @@ -32,12 +32,10 @@ import { FaStar, } from 'react-icons/fa'; import { logger } from '@utils/logger'; -import { getApiBase } from '@utils/apiConfig'; +import axios from '@utils/axiosConfig'; import RelatedCompaniesModal from './RelatedCompaniesModal'; import type { ValueChainNodeCardProps, RelatedCompany } from '../../types'; -const API_BASE_URL = getApiBase(); - // 黑金主题配置 const THEME = { cardBg: 'gray.700', @@ -120,12 +118,11 @@ const ValueChainNodeCard: React.FC = memo(({ const fetchRelatedCompanies = async () => { setLoadingRelated(true); try { - const response = await fetch( - `${API_BASE_URL}/api/company/value-chain/related-companies?node_name=${encodeURIComponent( + const { data } = await axios.get( + `/api/company/value-chain/related-companies?node_name=${encodeURIComponent( node.node_name )}` ); - const data = await response.json(); if (data.success) { setRelatedCompanies(data.data || []); } else { diff --git a/src/views/Company/components/CompanyOverview/hooks/useAnnouncementsData.ts b/src/views/Company/components/CompanyOverview/hooks/useAnnouncementsData.ts index 4c0fb953..bde0c708 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useAnnouncementsData.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useAnnouncementsData.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { Announcement } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -35,10 +33,9 @@ export const useAnnouncementsData = (stockCode?: string): UseAnnouncementsDataRe setError(null); try { - const response = await fetch( - `${API_BASE_URL}/api/stock/${stockCode}/announcements?limit=20` + const { data: result } = await axios.get>( + `/api/stock/${stockCode}/announcements?limit=20` ); - const result = (await response.json()) as ApiResponse; if (result.success) { setAnnouncements(result.data); diff --git a/src/views/Company/components/CompanyOverview/hooks/useBasicInfo.ts b/src/views/Company/components/CompanyOverview/hooks/useBasicInfo.ts index a3c9bd2f..d602101e 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useBasicInfo.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useBasicInfo.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { BasicInfo } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -35,8 +33,9 @@ export const useBasicInfo = (stockCode?: string): UseBasicInfoResult => { setError(null); try { - const response = await fetch(`${API_BASE_URL}/api/stock/${stockCode}/basic-info`); - const result = (await response.json()) as ApiResponse; + const { data: result } = await axios.get>( + `/api/stock/${stockCode}/basic-info` + ); if (result.success) { setBasicInfo(result.data); diff --git a/src/views/Company/components/CompanyOverview/hooks/useBranchesData.ts b/src/views/Company/components/CompanyOverview/hooks/useBranchesData.ts index 42a18560..d7c0a58e 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useBranchesData.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useBranchesData.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { Branch } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -35,8 +33,9 @@ export const useBranchesData = (stockCode?: string): UseBranchesDataResult => { setError(null); try { - const response = await fetch(`${API_BASE_URL}/api/stock/${stockCode}/branches`); - const result = (await response.json()) as ApiResponse; + const { data: result } = await axios.get>( + `/api/stock/${stockCode}/branches` + ); if (result.success) { setBranches(result.data); diff --git a/src/views/Company/components/CompanyOverview/hooks/useCompanyOverviewData.ts b/src/views/Company/components/CompanyOverview/hooks/useCompanyOverviewData.ts deleted file mode 100644 index 3675245d..00000000 --- a/src/views/Company/components/CompanyOverview/hooks/useCompanyOverviewData.ts +++ /dev/null @@ -1,140 +0,0 @@ -// src/views/Company/components/CompanyOverview/hooks/useCompanyOverviewData.ts -// 公司概览数据加载 Hook - -import { useState, useEffect, useCallback } from "react"; -import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; -import type { - BasicInfo, - ActualControl, - Concentration, - Management, - Shareholder, - Branch, - Announcement, - DisclosureSchedule, - CompanyOverviewData, -} from "../types"; - -const API_BASE_URL = getApiBase(); - -interface ApiResponse { - success: boolean; - data: T; -} - -/** - * 公司概览数据加载 Hook - * @param propStockCode - 股票代码 - * @returns 公司概览数据 - */ -export const useCompanyOverviewData = (propStockCode?: string): CompanyOverviewData => { - const [stockCode, setStockCode] = useState(propStockCode || "000001"); - const [loading, setLoading] = useState(false); - const [dataLoaded, setDataLoaded] = useState(false); - - // 基本信息数据 - const [basicInfo, setBasicInfo] = useState(null); - const [actualControl, setActualControl] = useState([]); - const [concentration, setConcentration] = useState([]); - const [management, setManagement] = useState([]); - const [topCirculationShareholders, setTopCirculationShareholders] = useState([]); - const [topShareholders, setTopShareholders] = useState([]); - const [branches, setBranches] = useState([]); - const [announcements, setAnnouncements] = useState([]); - const [disclosureSchedule, setDisclosureSchedule] = useState([]); - - // 监听 props 中的 stockCode 变化 - useEffect(() => { - if (propStockCode && propStockCode !== stockCode) { - setStockCode(propStockCode); - setDataLoaded(false); - } - }, [propStockCode, stockCode]); - - // 加载基本信息数据(9个接口) - const loadBasicInfoData = useCallback(async () => { - if (dataLoaded) return; - - setLoading(true); - - try { - const [ - basicRes, - actualRes, - concentrationRes, - managementRes, - circulationRes, - shareholdersRes, - branchesRes, - announcementsRes, - disclosureRes, - ] = await Promise.all([ - fetch(`${API_BASE_URL}/api/stock/${stockCode}/basic-info`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/actual-control`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/concentration`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/management?active_only=true`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/top-circulation-shareholders?limit=10`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/top-shareholders?limit=10`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/branches`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/announcements?limit=20`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/disclosure-schedule`).then((r) => - r.json() - ) as Promise>, - ]); - - if (basicRes.success) setBasicInfo(basicRes.data); - if (actualRes.success) setActualControl(actualRes.data); - if (concentrationRes.success) setConcentration(concentrationRes.data); - if (managementRes.success) setManagement(managementRes.data); - if (circulationRes.success) setTopCirculationShareholders(circulationRes.data); - if (shareholdersRes.success) setTopShareholders(shareholdersRes.data); - if (branchesRes.success) setBranches(branchesRes.data); - if (announcementsRes.success) setAnnouncements(announcementsRes.data); - if (disclosureRes.success) setDisclosureSchedule(disclosureRes.data); - - setDataLoaded(true); - } catch (err) { - logger.error("useCompanyOverviewData", "loadBasicInfoData", err, { stockCode }); - } finally { - setLoading(false); - } - }, [stockCode, dataLoaded]); - - // 首次加载 - useEffect(() => { - if (stockCode) { - loadBasicInfoData(); - } - }, [stockCode, loadBasicInfoData]); - - return { - basicInfo, - actualControl, - concentration, - management, - topCirculationShareholders, - topShareholders, - branches, - announcements, - disclosureSchedule, - loading, - dataLoaded, - }; -}; diff --git a/src/views/Company/components/CompanyOverview/hooks/useDisclosureData.ts b/src/views/Company/components/CompanyOverview/hooks/useDisclosureData.ts index a803e08b..a573cced 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useDisclosureData.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useDisclosureData.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { DisclosureSchedule } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -35,10 +33,9 @@ export const useDisclosureData = (stockCode?: string): UseDisclosureDataResult = setError(null); try { - const response = await fetch( - `${API_BASE_URL}/api/stock/${stockCode}/disclosure-schedule` + const { data: result } = await axios.get>( + `/api/stock/${stockCode}/disclosure-schedule` ); - const result = (await response.json()) as ApiResponse; if (result.success) { setDisclosureSchedule(result.data); diff --git a/src/views/Company/components/CompanyOverview/hooks/useManagementData.ts b/src/views/Company/components/CompanyOverview/hooks/useManagementData.ts index cbf2e2b2..420aa2ca 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useManagementData.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useManagementData.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { Management } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -35,10 +33,9 @@ export const useManagementData = (stockCode?: string): UseManagementDataResult = setError(null); try { - const response = await fetch( - `${API_BASE_URL}/api/stock/${stockCode}/management?active_only=true` + const { data: result } = await axios.get>( + `/api/stock/${stockCode}/management?active_only=true` ); - const result = (await response.json()) as ApiResponse; if (result.success) { setManagement(result.data); diff --git a/src/views/Company/components/CompanyOverview/hooks/useShareholderData.ts b/src/views/Company/components/CompanyOverview/hooks/useShareholderData.ts index a4047690..24fba1f0 100644 --- a/src/views/Company/components/CompanyOverview/hooks/useShareholderData.ts +++ b/src/views/Company/components/CompanyOverview/hooks/useShareholderData.ts @@ -3,11 +3,9 @@ import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; import type { ActualControl, Concentration, Shareholder } from "../types"; -const API_BASE_URL = getApiBase(); - interface ApiResponse { success: boolean; data: T; @@ -41,19 +39,16 @@ export const useShareholderData = (stockCode?: string): UseShareholderDataResult setError(null); try { - const [actualRes, concentrationRes, shareholdersRes, circulationRes] = await Promise.all([ - fetch(`${API_BASE_URL}/api/stock/${stockCode}/actual-control`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/concentration`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/top-shareholders?limit=10`).then((r) => - r.json() - ) as Promise>, - fetch(`${API_BASE_URL}/api/stock/${stockCode}/top-circulation-shareholders?limit=10`).then((r) => - r.json() - ) as Promise>, + const [ + { data: actualRes }, + { data: concentrationRes }, + { data: shareholdersRes }, + { data: circulationRes }, + ] = await Promise.all([ + axios.get>(`/api/stock/${stockCode}/actual-control`), + axios.get>(`/api/stock/${stockCode}/concentration`), + axios.get>(`/api/stock/${stockCode}/top-shareholders?limit=10`), + axios.get>(`/api/stock/${stockCode}/top-circulation-shareholders?limit=10`), ]); if (actualRes.success) setActualControl(actualRes.data); diff --git a/src/views/Company/components/DeepAnalysis/index.js b/src/views/Company/components/DeepAnalysis/index.js index 848b0894..dbad8316 100644 --- a/src/views/Company/components/DeepAnalysis/index.js +++ b/src/views/Company/components/DeepAnalysis/index.js @@ -3,13 +3,11 @@ import React, { useState, useEffect, useCallback, useRef } from "react"; import { logger } from "@utils/logger"; -import { getApiBase } from "@utils/apiConfig"; +import axios from "@utils/axiosConfig"; // 复用原有的展示组件 import DeepAnalysisTab from "../CompanyOverview/DeepAnalysisTab"; -const API_BASE_URL = getApiBase(); - /** * Tab 与 API 接口映射 * - strategy 和 business 共用 comprehensive 接口 @@ -84,9 +82,9 @@ const DeepAnalysis = ({ stockCode }) => { switch (apiKey) { case "comprehensive": setComprehensiveLoading(true); - const comprehensiveRes = await fetch( - `${API_BASE_URL}/api/company/comprehensive-analysis/${stockCode}` - ).then((r) => r.json()); + const { data: comprehensiveRes } = await axios.get( + `/api/company/comprehensive-analysis/${stockCode}` + ); // 检查 stockCode 是否已变更(防止竞态) if (currentStockCodeRef.current === stockCode) { if (comprehensiveRes.success) @@ -97,9 +95,9 @@ const DeepAnalysis = ({ stockCode }) => { case "valueChain": setValueChainLoading(true); - const valueChainRes = await fetch( - `${API_BASE_URL}/api/company/value-chain-analysis/${stockCode}` - ).then((r) => r.json()); + const { data: valueChainRes } = await axios.get( + `/api/company/value-chain-analysis/${stockCode}` + ); if (currentStockCodeRef.current === stockCode) { if (valueChainRes.success) setValueChainData(valueChainRes.data); loadedApisRef.current.valueChain = true; @@ -108,9 +106,9 @@ const DeepAnalysis = ({ stockCode }) => { case "keyFactors": setKeyFactorsLoading(true); - const keyFactorsRes = await fetch( - `${API_BASE_URL}/api/company/key-factors-timeline/${stockCode}` - ).then((r) => r.json()); + const { data: keyFactorsRes } = await axios.get( + `/api/company/key-factors-timeline/${stockCode}` + ); if (currentStockCodeRef.current === stockCode) { if (keyFactorsRes.success) setKeyFactorsData(keyFactorsRes.data); loadedApisRef.current.keyFactors = true; @@ -119,9 +117,9 @@ const DeepAnalysis = ({ stockCode }) => { case "industryRank": setIndustryRankLoading(true); - const industryRankRes = await fetch( - `${API_BASE_URL}/api/financial/industry-rank/${stockCode}` - ).then((r) => r.json()); + const { data: industryRankRes } = await axios.get( + `/api/financial/industry-rank/${stockCode}` + ); if (currentStockCodeRef.current === stockCode) { if (industryRankRes.success) setIndustryRankData(industryRankRes.data); loadedApisRef.current.industryRank = true; diff --git a/src/views/Company/components/DynamicTracking/components/ForecastPanel.js b/src/views/Company/components/DynamicTracking/components/ForecastPanel.js index 2c39d8a7..efabc111 100644 --- a/src/views/Company/components/DynamicTracking/components/ForecastPanel.js +++ b/src/views/Company/components/DynamicTracking/components/ForecastPanel.js @@ -12,9 +12,7 @@ import { } from '@chakra-ui/react'; import { Tag } from 'antd'; import { logger } from '@utils/logger'; -import { getApiBase } from '@utils/apiConfig'; - -const API_BASE_URL = getApiBase(); +import axios from '@utils/axiosConfig'; // 黑金主题 const THEME = { @@ -53,10 +51,9 @@ const ForecastPanel = ({ stockCode }) => { setLoading(true); try { - const response = await fetch( - `${API_BASE_URL}/api/stock/${stockCode}/forecast` + const { data: result } = await axios.get( + `/api/stock/${stockCode}/forecast` ); - const result = await response.json(); if (result.success && result.data) { setForecast(result.data); } diff --git a/src/views/Company/components/DynamicTracking/components/NewsPanel.js b/src/views/Company/components/DynamicTracking/components/NewsPanel.js index 5c9db0d1..0c00bd4c 100644 --- a/src/views/Company/components/DynamicTracking/components/NewsPanel.js +++ b/src/views/Company/components/DynamicTracking/components/NewsPanel.js @@ -3,11 +3,9 @@ import React, { useState, useEffect, useCallback } from 'react'; import { logger } from '@utils/logger'; -import { getApiBase } from '@utils/apiConfig'; +import axios from '@utils/axiosConfig'; import NewsEventsTab from '../../CompanyOverview/NewsEventsTab'; -const API_BASE_URL = getApiBase(); - const NewsPanel = ({ stockCode }) => { const [newsEvents, setNewsEvents] = useState([]); const [loading, setLoading] = useState(false); @@ -25,10 +23,9 @@ const NewsPanel = ({ stockCode }) => { // 获取股票名称 const fetchStockName = useCallback(async () => { try { - const response = await fetch( - `${API_BASE_URL}/api/stock/${stockCode}/basic-info` + const { data: result } = await axios.get( + `/api/stock/${stockCode}/basic-info` ); - const result = await response.json(); if (result.success && result.data) { const name = result.data.SECNAME || result.data.ORGNAME || stockCode; setStockName(name); @@ -47,10 +44,9 @@ const NewsPanel = ({ stockCode }) => { setLoading(true); try { const searchTerm = query || stockName || stockCode; - const response = await fetch( - `${API_BASE_URL}/api/events?q=${encodeURIComponent(searchTerm)}&page=${page}&per_page=10` + const { data: result } = await axios.get( + `/api/events?q=${encodeURIComponent(searchTerm)}&page=${page}&per_page=10` ); - const result = await response.json(); if (result.success) { setNewsEvents(result.data || []); diff --git a/src/views/Company/components/MarketDataView/services/marketService.ts b/src/views/Company/components/MarketDataView/services/marketService.ts index 1050d9f0..e3294a15 100644 --- a/src/views/Company/components/MarketDataView/services/marketService.ts +++ b/src/views/Company/components/MarketDataView/services/marketService.ts @@ -1,7 +1,7 @@ // src/views/Company/components/MarketDataView/services/marketService.ts // MarketDataView API 服务层 -import { getApiBase } from '@utils/apiConfig'; +import axios from '@utils/axiosConfig'; import { logger } from '@utils/logger'; import type { MarketSummary, @@ -23,21 +23,13 @@ interface ApiResponse { message?: string; } -/** - * API 基础 URL - */ -const getBaseUrl = (): string => getApiBase(); - /** * 通用 API 请求函数 */ const apiRequest = async (url: string): Promise> => { try { - const response = await fetch(`${getBaseUrl()}${url}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return response.json(); + const { data } = await axios.get>(url); + return data; } catch (error) { logger.error('marketService', 'apiRequest', error, { url }); throw error; @@ -80,11 +72,8 @@ export const marketService = { * @param days 天数,默认 30 天 */ async getBigDealData(stockCode: string, days: number = 30): Promise { - const response = await fetch(`${getBaseUrl()}/api/market/bigdeal/${stockCode}?days=${days}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return response.json(); + const { data } = await axios.get(`/api/market/bigdeal/${stockCode}?days=${days}`); + return data; }, /** @@ -93,11 +82,8 @@ export const marketService = { * @param days 天数,默认 30 天 */ async getUnusualData(stockCode: string, days: number = 30): Promise { - const response = await fetch(`${getBaseUrl()}/api/market/unusual/${stockCode}?days=${days}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return response.json(); + const { data } = await axios.get(`/api/market/unusual/${stockCode}?days=${days}`); + return data; }, /** @@ -132,18 +118,8 @@ export const marketService = { */ async getMinuteData(stockCode: string): Promise { try { - const response = await fetch(`${getBaseUrl()}/api/stock/${stockCode}/latest-minute`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }); + const { data } = await axios.get(`/api/stock/${stockCode}/latest-minute`); - if (!response.ok) { - throw new Error('Failed to fetch minute data'); - } - - const data = await response.json(); if (data.data && Array.isArray(data.data)) { return data; } diff --git a/src/views/Company/components/StockQuoteCard/hooks/useStockQuoteData.ts b/src/views/Company/components/StockQuoteCard/hooks/useStockQuoteData.ts index bdf5bef3..232c9bfc 100644 --- a/src/views/Company/components/StockQuoteCard/hooks/useStockQuoteData.ts +++ b/src/views/Company/components/StockQuoteCard/hooks/useStockQuoteData.ts @@ -7,12 +7,10 @@ import { useState, useEffect, useCallback } from 'react'; import { stockService } from '@services/eventService'; import { logger } from '@utils/logger'; -import { getApiBase } from '@utils/apiConfig'; +import axios from '@utils/axiosConfig'; import type { StockQuoteCardData } from '../types'; import type { BasicInfo } from '../../CompanyOverview/types'; -const API_BASE_URL = getApiBase(); - /** * 将 API 响应数据转换为 StockQuoteCard 所需格式 */ @@ -114,8 +112,7 @@ export const useStockQuoteData = (stockCode?: string): UseStockQuoteDataResult = setBasicLoading(true); try { - const response = await fetch(`${API_BASE_URL}/api/stock/${stockCode}/basic-info`); - const result = await response.json(); + const { data: result } = await axios.get(`/api/stock/${stockCode}/basic-info`); if (result.success) { setBasicInfo(result.data);