feat: 路由改造
This commit is contained in:
172
src/mocks/data/events.js
Normal file
172
src/mocks/data/events.js
Normal file
@@ -0,0 +1,172 @@
|
||||
// Mock 事件相关数据
|
||||
|
||||
// Mock 股票池 - 常见的A股股票
|
||||
const stockPool = [
|
||||
{ stock_code: '600000.SH', stock_name: '浦发银行', industry: '银行' },
|
||||
{ stock_code: '600519.SH', stock_name: '贵州茅台', industry: '白酒' },
|
||||
{ stock_code: '600036.SH', stock_name: '招商银行', industry: '银行' },
|
||||
{ stock_code: '601318.SH', stock_name: '中国平安', industry: '保险' },
|
||||
{ stock_code: '600016.SH', stock_name: '民生银行', industry: '银行' },
|
||||
{ stock_code: '601398.SH', stock_name: '工商银行', industry: '银行' },
|
||||
{ stock_code: '601288.SH', stock_name: '农业银行', industry: '银行' },
|
||||
{ stock_code: '601166.SH', stock_name: '兴业银行', industry: '银行' },
|
||||
{ stock_code: '000001.SZ', stock_name: '平安银行', industry: '银行' },
|
||||
{ stock_code: '000002.SZ', stock_name: '万科A', industry: '房地产' },
|
||||
{ stock_code: '000858.SZ', stock_name: '五粮液', industry: '白酒' },
|
||||
{ stock_code: '000333.SZ', stock_name: '美的集团', industry: '家电' },
|
||||
{ stock_code: '002415.SZ', stock_name: '海康威视', industry: '安防' },
|
||||
{ stock_code: '002594.SZ', stock_name: 'BYD比亚迪', industry: '新能源汽车' },
|
||||
{ stock_code: '300750.SZ', stock_name: '宁德时代', industry: '新能源' },
|
||||
{ stock_code: '300059.SZ', stock_name: '东方财富', industry: '证券' },
|
||||
{ stock_code: '601888.SH', stock_name: '中国中免', industry: '免税' },
|
||||
{ stock_code: '600276.SH', stock_name: '恒瑞医药', industry: '医药' },
|
||||
{ stock_code: '600887.SH', stock_name: '伊利股份', industry: '乳制品' },
|
||||
{ stock_code: '601012.SH', stock_name: '隆基绿能', industry: '光伏' },
|
||||
{ stock_code: '688981.SH', stock_name: '中芯国际', industry: '半导体' },
|
||||
{ stock_code: '600309.SH', stock_name: '万华化学', industry: '化工' },
|
||||
{ stock_code: '603259.SH', stock_name: '药明康德', industry: '医药研发' },
|
||||
{ stock_code: '002475.SZ', stock_name: '立讯精密', industry: '电子' },
|
||||
{ stock_code: '000063.SZ', stock_name: '中兴通讯', industry: '通信设备' },
|
||||
];
|
||||
|
||||
// 关联描述模板
|
||||
const relationDescTemplates = [
|
||||
'主营业务直接相关,预计受事件影响较大',
|
||||
'产业链上游企业,间接受益',
|
||||
'产业链下游企业,需求端受影响',
|
||||
'同行业竞争对手,可能受到间接影响',
|
||||
'参股该领域相关企业,有一定关联性',
|
||||
'业务板块涉及相关领域,预计有正面影响',
|
||||
'控股子公司从事相关业务',
|
||||
'近期公告布局该领域,潜在受益标的',
|
||||
'行业龙头企业,市场关注度高',
|
||||
'技术储备充足,有望抢占市场先机',
|
||||
'已有成熟产品线,短期内可能受益',
|
||||
'战略转型方向与事件相关',
|
||||
];
|
||||
|
||||
// 生成随机关联股票数据
|
||||
export function generateRelatedStocks(eventId, count = 5) {
|
||||
// 使用事件ID作为随机种子,确保相同事件ID返回相同的股票列表
|
||||
const seed = parseInt(eventId) || 1;
|
||||
const selectedStocks = [];
|
||||
|
||||
// 伪随机选择股票(基于事件ID)
|
||||
for (let i = 0; i < Math.min(count, stockPool.length); i++) {
|
||||
const index = (seed * 17 + i * 13) % stockPool.length;
|
||||
const stock = stockPool[index];
|
||||
const descIndex = (seed * 7 + i * 11) % relationDescTemplates.length;
|
||||
|
||||
selectedStocks.push({
|
||||
stock_code: stock.stock_code,
|
||||
stock_name: stock.stock_name,
|
||||
relation_desc: relationDescTemplates[descIndex],
|
||||
industry: stock.industry,
|
||||
// 可选字段 - 用于前端显示更多信息
|
||||
relevance_score: Math.max(60, 100 - i * 8), // 相关性评分,递减
|
||||
impact_level: i < 2 ? 'high' : i < 4 ? 'medium' : 'low', // 影响程度
|
||||
});
|
||||
}
|
||||
|
||||
return selectedStocks;
|
||||
}
|
||||
|
||||
// Mock 事件相关股票数据映射
|
||||
// 这里可以为特定事件ID预设特定的股票列表
|
||||
export const mockEventStocks = {
|
||||
// 示例:事件ID为1的预设股票
|
||||
'1': [
|
||||
{
|
||||
stock_code: '600519.SH',
|
||||
stock_name: '贵州茅台',
|
||||
relation_desc: '白酒行业龙头,消费板块受政策影响',
|
||||
industry: '白酒',
|
||||
relevance_score: 95,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '000858.SZ',
|
||||
stock_name: '五粮液',
|
||||
relation_desc: '白酒行业第二梯队,同样受消费政策影响',
|
||||
industry: '白酒',
|
||||
relevance_score: 90,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '600887.SH',
|
||||
stock_name: '伊利股份',
|
||||
relation_desc: '消费品龙头,受益于消费复苏',
|
||||
industry: '乳制品',
|
||||
relevance_score: 75,
|
||||
impact_level: 'medium',
|
||||
},
|
||||
],
|
||||
|
||||
// 事件ID为2的预设股票(科技类)
|
||||
'2': [
|
||||
{
|
||||
stock_code: '002415.SZ',
|
||||
stock_name: '海康威视',
|
||||
relation_desc: 'AI视觉领域龙头,技术创新受政策支持',
|
||||
industry: '安防',
|
||||
relevance_score: 92,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '000063.SZ',
|
||||
stock_name: '中兴通讯',
|
||||
relation_desc: '5G通信设备商,基础设施建设受益',
|
||||
industry: '通信设备',
|
||||
relevance_score: 88,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '688981.SH',
|
||||
stock_name: '中芯国际',
|
||||
relation_desc: '半导体制造龙头,国产替代核心标的',
|
||||
industry: '半导体',
|
||||
relevance_score: 85,
|
||||
impact_level: 'high',
|
||||
},
|
||||
],
|
||||
|
||||
// 事件ID为3的预设股票(新能源类)
|
||||
'3': [
|
||||
{
|
||||
stock_code: '300750.SZ',
|
||||
stock_name: '宁德时代',
|
||||
relation_desc: '动力电池龙头,新能源产业链核心',
|
||||
industry: '新能源',
|
||||
relevance_score: 98,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '002594.SZ',
|
||||
stock_name: 'BYD比亚迪',
|
||||
relation_desc: '新能源汽车龙头,产业链一体化布局',
|
||||
industry: '新能源汽车',
|
||||
relevance_score: 95,
|
||||
impact_level: 'high',
|
||||
},
|
||||
{
|
||||
stock_code: '601012.SH',
|
||||
stock_name: '隆基绿能',
|
||||
relation_desc: '光伏组件龙头,清洁能源受政策支持',
|
||||
industry: '光伏',
|
||||
relevance_score: 85,
|
||||
impact_level: 'medium',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
// 获取事件相关股票
|
||||
export function getEventRelatedStocks(eventId) {
|
||||
// 优先返回预设的股票列表
|
||||
if (mockEventStocks[eventId]) {
|
||||
return mockEventStocks[eventId];
|
||||
}
|
||||
|
||||
// 否则生成随机股票列表(3-6只股票)
|
||||
const count = 3 + (parseInt(eventId) % 4);
|
||||
return generateRelatedStocks(eventId, count);
|
||||
}
|
||||
@@ -86,22 +86,33 @@ export function generateWechatSessionId() {
|
||||
}
|
||||
|
||||
// ==================== 当前登录用户状态管理 ====================
|
||||
// 用于跟踪当前登录的用户(Mock 模式下的全局状态)
|
||||
let currentLoggedInUser = null;
|
||||
// Mock 模式下使用 localStorage 持久化登录状态
|
||||
|
||||
// 设置当前登录用户
|
||||
export function setCurrentUser(user) {
|
||||
currentLoggedInUser = user;
|
||||
console.log('[Mock State] 设置当前登录用户:', user);
|
||||
if (user) {
|
||||
localStorage.setItem('mock_current_user', JSON.stringify(user));
|
||||
console.log('[Mock State] 设置当前登录用户:', user);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前登录用户
|
||||
export function getCurrentUser() {
|
||||
return currentLoggedInUser;
|
||||
try {
|
||||
const stored = localStorage.getItem('mock_current_user');
|
||||
if (stored) {
|
||||
const user = JSON.parse(stored);
|
||||
console.log('[Mock State] 获取当前登录用户:', user);
|
||||
return user;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('[Mock State] 解析用户数据失败:', error);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 清除当前登录用户
|
||||
export function clearCurrentUser() {
|
||||
currentLoggedInUser = null;
|
||||
localStorage.removeItem('mock_current_user');
|
||||
console.log('[Mock State] 清除当前登录用户');
|
||||
}
|
||||
|
||||
39
src/mocks/handlers/event.js
Normal file
39
src/mocks/handlers/event.js
Normal file
@@ -0,0 +1,39 @@
|
||||
// src/mocks/handlers/event.js
|
||||
// 事件相关的 Mock API Handlers
|
||||
|
||||
import { http, HttpResponse } from 'msw';
|
||||
import { getEventRelatedStocks } from '../data/events';
|
||||
|
||||
// 模拟网络延迟
|
||||
const delay = (ms = 300) => new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
||||
export const eventHandlers = [
|
||||
// 获取事件相关股票
|
||||
http.get('/api/events/:eventId/stocks', async ({ params }) => {
|
||||
await delay(300);
|
||||
|
||||
const { eventId } = params;
|
||||
|
||||
console.log('[Mock] 获取事件相关股票, eventId:', eventId);
|
||||
|
||||
try {
|
||||
const relatedStocks = getEventRelatedStocks(eventId);
|
||||
|
||||
return HttpResponse.json({
|
||||
success: true,
|
||||
data: relatedStocks,
|
||||
message: '获取成功'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[Mock] 获取事件相关股票失败:', error);
|
||||
return HttpResponse.json(
|
||||
{
|
||||
success: false,
|
||||
error: '获取事件相关股票失败',
|
||||
data: []
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}),
|
||||
];
|
||||
@@ -4,15 +4,15 @@
|
||||
import { authHandlers } from './auth';
|
||||
import { accountHandlers } from './account';
|
||||
import { simulationHandlers } from './simulation';
|
||||
import { eventHandlers } from './event';
|
||||
|
||||
// 可以在这里添加更多的 handlers
|
||||
// import { userHandlers } from './user';
|
||||
// import { eventHandlers } from './event';
|
||||
|
||||
export const handlers = [
|
||||
...authHandlers,
|
||||
...accountHandlers,
|
||||
...simulationHandlers,
|
||||
...eventHandlers,
|
||||
// ...userHandlers,
|
||||
// ...eventHandlers,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user