diff --git a/src/views/Community/components/DynamicNewsDetail/RelatedConceptsSection/ConceptStockItem.js b/src/views/Community/components/DynamicNewsDetail/RelatedConceptsSection/ConceptStockItem.js index 1321d6ca..d7ff59c3 100644 --- a/src/views/Community/components/DynamicNewsDetail/RelatedConceptsSection/ConceptStockItem.js +++ b/src/views/Community/components/DynamicNewsDetail/RelatedConceptsSection/ConceptStockItem.js @@ -13,25 +13,31 @@ import { /** * 概念股票列表项组件 * @param {Object} props - * @param {Object} props.stock - 股票对象 - * - stock_name: 股票名称 - * - stock_code: 股票代码 - * - change_pct: 涨跌幅 - * - reason: 关联原因 + * @param {Object} props.stock - 股票对象(兼容新旧API格式) + * - name / stock_name: 股票名称 + * - code / stock_code: 股票代码 + * - change_pct: 涨跌幅(可选) + * - reason: 关联原因(可选) */ const ConceptStockItem = ({ stock }) => { const sectionBg = useColorModeValue('gray.50', 'gray.750'); const conceptNameColor = useColorModeValue('gray.800', 'gray.100'); const stockCountColor = useColorModeValue('gray.500', 'gray.400'); - const stockChangePct = parseFloat(stock.change_pct); + // 兼容新旧API格式 + const stockName = stock.name || stock.stock_name || '未知'; + const stockCode = stock.code || stock.stock_code || ''; + + // 涨跌幅可能不存在(v2 API不返回单个股票涨跌幅) + const hasChangePct = stock.change_pct !== undefined && stock.change_pct !== null; + const stockChangePct = hasChangePct ? parseFloat(stock.change_pct) : 0; const stockChangeColor = stockChangePct > 0 ? 'red' : stockChangePct < 0 ? 'green' : 'gray'; const stockChangeSymbol = stockChangePct > 0 ? '+' : ''; // 处理股票详情跳转 const handleStockClick = (e) => { e.stopPropagation(); // 阻止事件冒泡到概念卡片 - const cleanCode = stock.stock_code.replace(/\.(SZ|SH)$/i, ''); + const cleanCode = stockCode.replace(/\.(SZ|SH)$/i, ''); window.open(`https://valuefrontier.cn/company?scode=${cleanCode}`, '_blank'); }; @@ -52,13 +58,13 @@ const ConceptStockItem = ({ stock }) => { - {stock.stock_name} + {stockName} - {stock.stock_code} + {stockCode} - {stock.change_pct && ( + {hasChangePct && ( { @@ -109,16 +109,17 @@ const DetailedConceptCard = ({ concept, onClick }) => { )} - {/* 历史触发时间 */} - {concept.happened_times && concept.happened_times.length > 0 && ( + {/* 爆发日期(兼容 happened_times 和 outbreak_dates) */} + {((concept.outbreak_dates && concept.outbreak_dates.length > 0) || + (concept.happened_times && concept.happened_times.length > 0)) && ( - 历史触发时间: + 爆发日期: - {concept.happened_times.map((time, idx) => ( - - {time} + {(concept.outbreak_dates || concept.happened_times).map((date, idx) => ( + + {date} ))}