feat: 路由改造

This commit is contained in:
zdl
2025-10-17 18:59:00 +08:00
parent 02bf1ea709
commit bae4d25e24
15 changed files with 496 additions and 227 deletions

172
src/mocks/data/events.js Normal file
View 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);
}

View File

@@ -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] 清除当前登录用户');
}

View 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 }
);
}
}),
];

View File

@@ -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,
];