diff --git a/src/mocks/data/events.js b/src/mocks/data/events.js index 3cd4a53d..8ace595f 100644 --- a/src/mocks/data/events.js +++ b/src/mocks/data/events.js @@ -642,6 +642,7 @@ export function generateMockEvents(params = {}) { date_range = '', q = '', industry_code = '', + stock_code = '', } = params; // 生成100个事件用于测试 @@ -665,6 +666,26 @@ export function generateMockEvents(params = {}) { const relatedAvgChg = (Math.random() * 20 - 5).toFixed(2); // -5% 到 15% const relatedMaxChg = (Math.random() * 30).toFixed(2); // 0% 到 30% + // 为每个事件随机选择2-5个相关股票 + const relatedStockCount = 2 + (i % 4); // 2-5个股票 + const relatedStocks = []; + const industryStocks = stockPool.filter(s => s.industry === industry); + + // 优先选择同行业股票 + if (industryStocks.length > 0) { + for (let j = 0; j < Math.min(relatedStockCount, industryStocks.length); j++) { + relatedStocks.push(industryStocks[j % industryStocks.length].stock_code); + } + } + + // 如果同行业股票不够,从整个 stockPool 中补充 + while (relatedStocks.length < relatedStockCount && relatedStocks.length < stockPool.length) { + const randomStock = stockPool[relatedStocks.length % stockPool.length]; + if (!relatedStocks.includes(randomStock.stock_code)) { + relatedStocks.push(randomStock.stock_code); + } + } + allEvents.push({ id: i + 1, title: generateEventTitle(industry, i), @@ -682,6 +703,7 @@ export function generateMockEvents(params = {}) { keywords: generateKeywords(industry, i), is_ai_generated: i % 4 === 0, // 25% 的事件是AI生成 industry: industry, + related_stocks: relatedStocks, // 添加相关股票列表 }); } @@ -710,6 +732,22 @@ export function generateMockEvents(params = {}) { ); } + // 股票代码筛选 + if (stock_code) { + // 移除可能的后缀 (.SH, .SZ) + const cleanStockCode = stock_code.replace(/\.(SH|SZ)$/, ''); + filteredEvents = filteredEvents.filter(e => { + if (!e.related_stocks || e.related_stocks.length === 0) { + return false; + } + // 检查事件的 related_stocks 中是否包含该股票代码 + return e.related_stocks.some(code => { + const cleanCode = code.replace(/\.(SH|SZ)$/, ''); + return cleanCode === cleanStockCode || code === stock_code; + }); + }); + } + // 日期范围筛选 if (date_range) { const [startStr, endStr] = date_range.split(' 至 '); diff --git a/src/mocks/handlers/event.js b/src/mocks/handlers/event.js index d6822bcf..3869ff4d 100644 --- a/src/mocks/handlers/event.js +++ b/src/mocks/handlers/event.js @@ -25,6 +25,7 @@ export const eventHandlers = [ q: url.searchParams.get('q') || '', industry_code: url.searchParams.get('industry_code') || '', industry_classification: url.searchParams.get('industry_classification') || '', + stock_code: url.searchParams.get('stock_code') || '', }; console.log('[Mock] 获取事件列表:', params);