update pay ui

This commit is contained in:
2025-12-15 17:48:25 +08:00
parent 1ecd3e6d10
commit 710dc07582
4 changed files with 181 additions and 53 deletions

View File

@@ -89,7 +89,7 @@ const ConceptStocksModal: React.FC<ConceptStocksModalProps> = ({
const modalSize = useBreakpointValue({ base: 'xl', md: '4xl' }, { fallback: 'md' });
const tableMaxH = useBreakpointValue({ base: '45vh', md: '60vh' }, { fallback: 'md' });
// 批量获取股票行情数据
// 批量获取股票行情数据(使用批量接口,减少网络请求)
const fetchStockMarketData = useCallback(async (stocks: StockInfo[]) => {
if (!stocks || stocks.length === 0) return;
@@ -97,30 +97,34 @@ const ConceptStocksModal: React.FC<ConceptStocksModalProps> = ({
const newMarketData: Record<string, MarketData> = {};
try {
const batchSize = 5;
for (let i = 0; i < stocks.length; i += batchSize) {
const batch = stocks.slice(i, i + batchSize);
const promises = batch.map(async (stock) => {
const stockCode = getStockCode(stock);
if (!stockCode) return null;
const seccode = stockCode.substring(0, 6);
try {
const response = await marketService.getTradeData(seccode, 1);
if (response.success && response.data?.length > 0) {
const latestData = response.data[response.data.length - 1];
return { stock_code: stockCode, ...latestData };
}
} catch (error) {
logger.warn('ConceptStocksModal', '获取股票行情失败', { stockCode: seccode });
}
return null;
});
// 提取所有6位股票代码
const stockCodeMap: Record<string, string> = {}; // seccode -> fullCode 映射
const seccodes: string[] = [];
const results = await Promise.all(promises);
results.forEach((result) => {
if (result) newMarketData[result.stock_code] = result;
stocks.forEach((stock) => {
const stockCode = getStockCode(stock);
if (stockCode) {
const seccode = stockCode.substring(0, 6);
stockCodeMap[seccode] = stockCode;
seccodes.push(seccode);
}
});
if (seccodes.length === 0) return;
// 使用批量接口一次性获取所有数据
const response = await marketService.getBatchTradeData(seccodes, 1);
if (response.success && response.data) {
Object.entries(response.data).forEach(([seccode, stockData]: [string, any]) => {
const fullCode = stockCodeMap[seccode];
if (fullCode && stockData.data?.length > 0) {
const latestData = stockData.data[stockData.data.length - 1];
newMarketData[fullCode] = { stock_code: fullCode, ...latestData };
}
});
}
setStockMarketData(newMarketData);
} catch (error) {
logger.error('ConceptStocksModal', 'fetchStockMarketData', error);