diff --git a/src/mocks/data/market.js b/src/mocks/data/market.js index c6e79a5c..64158873 100644 --- a/src/mocks/data/market.js +++ b/src/mocks/data/market.js @@ -55,41 +55,77 @@ export const generateMarketData = (stockCode) => { repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还 }, securities: { - balance: Math.floor(Math.random() * 100000000) + 50000000, // 融券余额 + balance: Math.floor(Math.random() * 100000000) + 50000000, // 融券余额(股数) + balance_amount: Math.floor(Math.random() * 2000000000) + 1000000000, // 融券余额(金额) sell: Math.floor(Math.random() * 10000000) + 5000000, // 融券卖出 repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还 } })) }, - // 大单统计 - 包含 daily_stats 数组 + // 大宗交易 - 包含 daily_stats 数组,符合 BigDealDayStats 类型 bigDealData: { success: true, data: [], - daily_stats: Array(10).fill(null).map((_, i) => ({ - date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], - big_buy: Math.floor(Math.random() * 300000000) + 100000000, - big_sell: Math.floor(Math.random() * 300000000) + 80000000, - medium_buy: Math.floor(Math.random() * 200000000) + 60000000, - medium_sell: Math.floor(Math.random() * 200000000) + 50000000, - small_buy: Math.floor(Math.random() * 100000000) + 30000000, - small_sell: Math.floor(Math.random() * 100000000) + 25000000 - })) + daily_stats: Array(10).fill(null).map((_, i) => { + const count = Math.floor(Math.random() * 5) + 1; // 1-5 笔交易 + const avgPrice = parseFloat((basePrice * (0.95 + Math.random() * 0.1)).toFixed(2)); // 折价/溢价 -5%~+5% + const deals = Array(count).fill(null).map(() => { + const volume = parseFloat((Math.random() * 500 + 100).toFixed(2)); // 100-600 万股 + const price = parseFloat((avgPrice * (0.98 + Math.random() * 0.04)).toFixed(2)); + return { + buyer_dept: ['中信证券北京总部', '国泰君安上海分公司', '华泰证券深圳营业部', '招商证券广州分公司'][Math.floor(Math.random() * 4)], + seller_dept: ['中金公司北京营业部', '海通证券上海分公司', '广发证券深圳营业部', '平安证券广州分公司'][Math.floor(Math.random() * 4)], + price, + volume, + amount: parseFloat((price * volume).toFixed(2)) + }; + }); + const totalVolume = deals.reduce((sum, d) => sum + d.volume, 0); + const totalAmount = deals.reduce((sum, d) => sum + d.amount, 0); + return { + date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], + count, + total_volume: parseFloat(totalVolume.toFixed(2)), + total_amount: parseFloat(totalAmount.toFixed(2)), + avg_price: avgPrice, + deals + }; + }) }, - // 异动分析 - 包含 grouped_data 数组 + // 龙虎榜数据 - 包含 grouped_data 数组,符合 UnusualDayData 类型 unusualData: { success: true, data: [], - grouped_data: Array(5).fill(null).map((_, i) => ({ - date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], - events: [ - { time: '14:35:22', type: '快速拉升', change: '+2.3%', description: '5分钟内上涨2.3%' }, - { time: '11:28:45', type: '大单买入', amount: '5680万', description: '单笔大单买入' }, - { time: '10:15:30', type: '量比异动', ratio: '3.2', description: '量比达到3.2倍' } - ], - count: 3 - })) + grouped_data: Array(5).fill(null).map((_, i) => { + const buyerDepts = ['中信证券北京总部', '国泰君安上海分公司', '华泰证券深圳营业部', '招商证券广州分公司', '中金公司北京营业部']; + const sellerDepts = ['海通证券上海分公司', '广发证券深圳营业部', '平安证券广州分公司', '东方证券上海营业部', '兴业证券福州营业部']; + const infoTypes = ['日涨幅偏离值达7%', '日振幅达15%', '连续三日涨幅偏离20%', '换手率达20%']; + + const buyers = buyerDepts.map(dept => ({ + dept_name: dept, + buy_amount: Math.floor(Math.random() * 50000000) + 10000000 // 1000万-6000万 + })).sort((a, b) => b.buy_amount - a.buy_amount); + + const sellers = sellerDepts.map(dept => ({ + dept_name: dept, + sell_amount: Math.floor(Math.random() * 40000000) + 8000000 // 800万-4800万 + })).sort((a, b) => b.sell_amount - a.sell_amount); + + const totalBuy = buyers.reduce((sum, b) => sum + b.buy_amount, 0); + const totalSell = sellers.reduce((sum, s) => sum + s.sell_amount, 0); + + return { + date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0], + total_buy: totalBuy, + total_sell: totalSell, + net_amount: totalBuy - totalSell, + buyers, + sellers, + info_types: infoTypes.slice(0, Math.floor(Math.random() * 3) + 1) // 随机选1-3个类型 + }; + }) }, // 股权质押 - 匹配 PledgeData[] 类型