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' } } })