Files
smartDriveEEFront/mock/stock.js
2025-10-19 13:44:32 +08:00

172 lines
4.7 KiB
JavaScript

import Mock from 'mockjs'
// 模拟股票数据
const stockData = Mock.mock({
'list|100': [{
'code': /^[0-9]{6}$/,
'name': '@ctitle(2,4)',
'industry|1': ['银行', '房地产', '白酒', '电子', '医药', '新能源', '化工', '钢铁', '汽车', '家电'],
'pattern|1': ['V型反转', '强势上涨', '底部反转', '突破上涨', '双底形态', '头肩底'],
'risePercent|20-60.1-1': 1,
'volumeIncrease|1': ['1.5倍', '2倍', '2.5倍', '3倍', '3.5倍', '4倍'],
'similarity|60-95.1-0': 1,
'occurDate': '@date("yyyy-MM-dd")',
'currentPrice|10-100.2-2': 1,
'marketCap|100-1000.1-1': 1,
'pe|5-50.1-1': 1,
'pb|0.5-10.2-2': 1
}]
})
// 模拟相似股票查询
Mock.mock(/\/api\/stock\/similar/, 'get', (options) => {
const params = new URLSearchParams(options.url.split('?')[1])
const page = parseInt(params.get('page')) || 1
const pageSize = parseInt(params.get('pageSize')) || 20
const patternType = params.get('patternType')
const minRise = parseInt(params.get('minRise')) || 0
let filteredData = stockData.list
// 根据条件过滤
if (patternType) {
const patternMap = {
'v_reversal': 'V型反转',
'strong_rise': '强势上涨',
'bottom_reversal': '底部反转',
'breakout_rise': '突破上涨'
}
filteredData = filteredData.filter(item => item.pattern === patternMap[patternType])
}
if (minRise > 0) {
filteredData = filteredData.filter(item => item.risePercent >= minRise)
}
const start = (page - 1) * pageSize
const end = start + pageSize
const pageData = filteredData.slice(start, end)
return {
code: 20000,
data: {
list: pageData,
total: filteredData.length,
page,
pageSize
}
}
})
// 模拟股票历史数据
Mock.mock(/\/api\/stock\/history\/\d+/, 'get', () => {
const days = 100
const data = []
let basePrice = Mock.Random.float(10, 100, 2, 2)
for (let i = 0; i < days; i++) {
const change = Mock.Random.float(-0.05, 0.08, 4, 4)
basePrice = basePrice * (1 + change)
data.push({
date: Mock.Random.date('yyyy-MM-dd'),
open: Mock.Random.float(basePrice * 0.98, basePrice * 1.02, 2, 2),
high: Mock.Random.float(basePrice * 1.01, basePrice * 1.05, 2, 2),
low: Mock.Random.float(basePrice * 0.95, basePrice * 0.99, 2, 2),
close: basePrice,
volume: Mock.Random.integer(1000000, 10000000),
amount: Mock.Random.integer(10000000, 100000000)
})
}
return {
code: 20000,
data: data.reverse()
}
})
// 模拟股票基本信息
Mock.mock(/\/api\/stock\/info\/\d+/, 'get', () => {
return {
code: 20000,
data: {
code: Mock.Random.string('number', 6),
name: Mock.Random.ctitle(2, 4),
industry: Mock.Random.pick(['银行', '房地产', '白酒', '电子', '医药', '新能源']),
currentPrice: Mock.Random.float(10, 100, 2, 2),
change: Mock.Random.float(-5, 10, 2, 2),
changePercent: Mock.Random.float(-10, 20, 2, 2),
marketCap: Mock.Random.float(100, 1000, 1, 1),
pe: Mock.Random.float(5, 50, 1, 1),
pb: Mock.Random.float(0.5, 10, 2, 2),
turnover: Mock.Random.float(1, 10, 2, 2),
volume: Mock.Random.integer(1000000, 10000000),
amount: Mock.Random.integer(10000000, 100000000)
}
}
})
// 模拟行业列表
Mock.mock('/api/stock/industries', 'get', () => {
return {
code: 20000,
data: [
'银行', '房地产', '白酒', '电子', '医药', '新能源', '化工', '钢铁', '汽车', '家电',
'通信', '计算机', '传媒', '农林牧渔', '有色金属', '建筑材料', '机械设备', '电气设备',
'纺织服装', '轻工制造', '商业贸易', '交通运输', '公用事业', '国防军工'
]
}
})
// 模拟热门股票
Mock.mock('/api/stock/hot', 'get', () => {
return {
code: 20000,
data: Mock.mock({
'list|20': [{
'code': /^[0-9]{6}$/,
'name': '@ctitle(2,4)',
'currentPrice|10-100.2-2': 1,
'changePercent|1-20.1-1': 1,
'volume|1000000-10000000': 1
}]
}).list
}
})
// 模拟自选股操作
Mock.mock('/api/stock/watchlist', 'post', () => {
return {
code: 20000,
message: '添加成功'
}
})
Mock.mock('/api/stock/watchlist', 'get', () => {
return {
code: 20000,
data: Mock.mock({
'list|10': [{
'code': /^[0-9]{6}$/,
'name': '@ctitle(2,4)',
'currentPrice|10-100.2-2': 1,
'changePercent|1-20.1-1': 1
}]
}).list
}
})
// 模拟导出功能
Mock.mock('/api/stock/export', 'post', () => {
return {
code: 20000,
message: '导出成功',
data: {
downloadUrl: '/api/download/stock-analysis.xlsx'
}
}
})