fix(mock): 完善大宗交易和龙虎榜数据结构
- 融券余额增加 balance_amount 字段 - 大宗交易:新增 deals 明细、买卖营业部、成交均价 - 龙虎榜:新增 buyers/sellers 营业部列表、净买入金额 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -55,41 +55,77 @@ export const generateMarketData = (stockCode) => {
|
|||||||
repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还
|
repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还
|
||||||
},
|
},
|
||||||
securities: {
|
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, // 融券卖出
|
sell: Math.floor(Math.random() * 10000000) + 5000000, // 融券卖出
|
||||||
repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还
|
repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
|
|
||||||
// 大单统计 - 包含 daily_stats 数组
|
// 大宗交易 - 包含 daily_stats 数组,符合 BigDealDayStats 类型
|
||||||
bigDealData: {
|
bigDealData: {
|
||||||
success: true,
|
success: true,
|
||||||
data: [],
|
data: [],
|
||||||
daily_stats: Array(10).fill(null).map((_, i) => ({
|
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],
|
date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||||||
big_buy: Math.floor(Math.random() * 300000000) + 100000000,
|
count,
|
||||||
big_sell: Math.floor(Math.random() * 300000000) + 80000000,
|
total_volume: parseFloat(totalVolume.toFixed(2)),
|
||||||
medium_buy: Math.floor(Math.random() * 200000000) + 60000000,
|
total_amount: parseFloat(totalAmount.toFixed(2)),
|
||||||
medium_sell: Math.floor(Math.random() * 200000000) + 50000000,
|
avg_price: avgPrice,
|
||||||
small_buy: Math.floor(Math.random() * 100000000) + 30000000,
|
deals
|
||||||
small_sell: Math.floor(Math.random() * 100000000) + 25000000
|
};
|
||||||
}))
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 异动分析 - 包含 grouped_data 数组
|
// 龙虎榜数据 - 包含 grouped_data 数组,符合 UnusualDayData 类型
|
||||||
unusualData: {
|
unusualData: {
|
||||||
success: true,
|
success: true,
|
||||||
data: [],
|
data: [],
|
||||||
grouped_data: Array(5).fill(null).map((_, i) => ({
|
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],
|
date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||||||
events: [
|
total_buy: totalBuy,
|
||||||
{ time: '14:35:22', type: '快速拉升', change: '+2.3%', description: '5分钟内上涨2.3%' },
|
total_sell: totalSell,
|
||||||
{ time: '11:28:45', type: '大单买入', amount: '5680万', description: '单笔大单买入' },
|
net_amount: totalBuy - totalSell,
|
||||||
{ time: '10:15:30', type: '量比异动', ratio: '3.2', description: '量比达到3.2倍' }
|
buyers,
|
||||||
],
|
sellers,
|
||||||
count: 3
|
info_types: infoTypes.slice(0, Math.floor(Math.random() * 3) + 1) // 随机选1-3个类型
|
||||||
}))
|
};
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 股权质押 - 匹配 PledgeData[] 类型
|
// 股权质押 - 匹配 PledgeData[] 类型
|
||||||
|
|||||||
Reference in New Issue
Block a user