update pay promo
This commit is contained in:
@@ -23,7 +23,7 @@ import {
|
|||||||
useBreakpointValue,
|
useBreakpointValue,
|
||||||
} from '@chakra-ui/react';
|
} from '@chakra-ui/react';
|
||||||
import { Table2 } from 'lucide-react';
|
import { Table2 } from 'lucide-react';
|
||||||
import marketService from '@services/marketService';
|
import { getApiBase } from '@utils/apiConfig';
|
||||||
import { logger } from '@utils/logger';
|
import { logger } from '@utils/logger';
|
||||||
|
|
||||||
// 股票信息类型 - 兼容新旧API格式
|
// 股票信息类型 - 兼容新旧API格式
|
||||||
@@ -89,7 +89,7 @@ const ConceptStocksModal: React.FC<ConceptStocksModalProps> = ({
|
|||||||
const modalSize = useBreakpointValue({ base: 'xl', md: '4xl' }, { fallback: 'md' });
|
const modalSize = useBreakpointValue({ base: 'xl', md: '4xl' }, { fallback: 'md' });
|
||||||
const tableMaxH = useBreakpointValue({ base: '45vh', md: '60vh' }, { fallback: 'md' });
|
const tableMaxH = useBreakpointValue({ base: '45vh', md: '60vh' }, { fallback: 'md' });
|
||||||
|
|
||||||
// 批量获取股票行情数据(使用批量接口,减少网络请求)
|
// 批量获取股票行情数据(使用实时/分钟线接口)
|
||||||
const fetchStockMarketData = useCallback(async (stocks: StockInfo[]) => {
|
const fetchStockMarketData = useCallback(async (stocks: StockInfo[]) => {
|
||||||
if (!stocks || stocks.length === 0) return;
|
if (!stocks || stocks.length === 0) return;
|
||||||
|
|
||||||
@@ -97,32 +97,50 @@ const ConceptStocksModal: React.FC<ConceptStocksModalProps> = ({
|
|||||||
const newMarketData: Record<string, MarketData> = {};
|
const newMarketData: Record<string, MarketData> = {};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 提取所有6位股票代码
|
// 构建完整的股票代码列表(带后缀,如 000001.SZ)
|
||||||
const stockCodeMap: Record<string, string> = {}; // seccode -> fullCode 映射
|
const codes: string[] = [];
|
||||||
const seccodes: string[] = [];
|
const codeToFullCode: Record<string, string> = {}; // API返回的code -> 原始fullCode 映射
|
||||||
|
|
||||||
stocks.forEach((stock) => {
|
stocks.forEach((stock) => {
|
||||||
const stockCode = getStockCode(stock);
|
const stockCode = getStockCode(stock);
|
||||||
if (stockCode) {
|
if (stockCode) {
|
||||||
const seccode = stockCode.substring(0, 6);
|
// stockCode 格式可能是 "000001.SZ" 或 "000001"
|
||||||
stockCodeMap[seccode] = stockCode;
|
let fullCode = stockCode;
|
||||||
seccodes.push(seccode);
|
if (!stockCode.includes('.')) {
|
||||||
|
// 根据代码判断交易所
|
||||||
|
const seccode = stockCode.substring(0, 6);
|
||||||
|
if (seccode.startsWith('6')) {
|
||||||
|
fullCode = `${seccode}.SH`;
|
||||||
|
} else {
|
||||||
|
fullCode = `${seccode}.SZ`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
codes.push(fullCode);
|
||||||
|
codeToFullCode[fullCode] = stockCode;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (seccodes.length === 0) return;
|
if (codes.length === 0) return;
|
||||||
|
|
||||||
// 使用批量接口一次性获取所有数据
|
// 调用实时行情接口
|
||||||
const response = await marketService.getBatchTradeData(seccodes, 1);
|
const response = await fetch(`${getApiBase()}/api/flex-screen/quotes`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ codes, include_order_book: false }),
|
||||||
|
});
|
||||||
|
|
||||||
if (response.success && response.data) {
|
const result = await response.json();
|
||||||
Object.entries(response.data).forEach(([seccode, stockData]: [string, any]) => {
|
|
||||||
const fullCode = stockCodeMap[seccode];
|
if (result.success && result.data) {
|
||||||
if (fullCode && stockData.data?.length > 0) {
|
Object.entries(result.data).forEach(([code, quoteData]: [string, any]) => {
|
||||||
const latestData = stockData.data[stockData.data.length - 1];
|
const originalCode = codeToFullCode[code] || code;
|
||||||
newMarketData[fullCode] = { stock_code: fullCode, ...latestData };
|
newMarketData[originalCode] = {
|
||||||
}
|
stock_code: originalCode,
|
||||||
|
close: quoteData.last_px,
|
||||||
|
change_percent: quoteData.change_pct,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
logger.info('ConceptStocksModal', `获取实时行情成功`, { source: result.source, count: Object.keys(result.data).length });
|
||||||
}
|
}
|
||||||
|
|
||||||
setStockMarketData(newMarketData);
|
setStockMarketData(newMarketData);
|
||||||
|
|||||||
Reference in New Issue
Block a user