Files
vf_react/src/mocks/handlers/financial.js
zdl 7f186dbfa0 feat: 为"股票行情"和"财务全景"标签页添加 Mock 数据支持
问题:
     - 点击"股票行情"标签页:MarketDataView 组件需要市场数据接口
     - 点击"财务全景"标签页:FinancialPanorama 组件需要财务数据接口
     - 这些接口都没有 mock 数据,导致页面显示空白

     需要添加的接口:

     股票行情 (MarketDataView) - 7个接口

     1. /api/market/trade/:stockCode - 成交数据
     2. /api/market/funding/:stockCode - 资金流向
     3. /api/market/bigdeal/:stockCode - 大单统计
     4. /api/market/unusual/:stockCode - 异动分析
     5. /api/market/pledge/:stockCode - 股权质押
     6. /api/market/summary/:stockCode - 市场摘要
     7. /api/market/rise-analysis/:stockCode - 涨停分析
     8. /api/stock/:stockCode/latest-minute - 最新分时数据

     财务全景 (FinancialPanorama) - 9个接口

     1. /api/financial/stock-info/:stockCode - 股票基本信息
     2. /api/financial/balance-sheet/:stockCode - 资产负债表
     3. /api/financial/income-statement/:stockCode - 利润表
     4. /api/financial/cashflow/:stockCode - 现金流量表
     5. /api/financial/financial-metrics/:stockCode - 财务指标
     6. /api/financial/main-business/:stockCode - 主营业务
     7. /api/financial/forecast/:stockCode - 业绩预告
     8. /api/financial/industry-rank/:stockCode - 行业排名
     9. /api/financial/comparison/:stockCode - 期间对比

     实施步骤:
     1. 创建 src/mocks/data/market.js - 市场数据
     2. 创建 src/mocks/data/financial.js - 财务数据
     3. 创建 src/mocks/handlers/market.js - 市场接口handlers
     4. 创建 src/mocks/handlers/financial.js - 财务接口handlers
     5. 更新 src/mocks/handlers/index.js - 注册新handlers

     数据内容:
     - 为平安银行 (000001) 提供完整真实数据
     - 其他股票代码生成合理的模拟数据
2025-10-27 15:10:03 +08:00

122 lines
3.8 KiB
JavaScript

// src/mocks/handlers/financial.js
// 财务数据相关的 Mock Handlers
import { http, HttpResponse } from 'msw';
import { generateFinancialData } from '../data/financial';
// 模拟延迟
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
export const financialHandlers = [
// 1. 股票基本信息
http.get('/api/financial/stock-info/:stockCode', async ({ params }) => {
await delay(150);
const { stockCode } = params;
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.stockInfo
});
}),
// 2. 资产负债表
http.get('/api/financial/balance-sheet/:stockCode', async ({ params, request }) => {
await delay(250);
const { stockCode } = params;
const url = new URL(request.url);
const limit = parseInt(url.searchParams.get('limit') || '4', 10);
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.balanceSheet.slice(0, limit)
});
}),
// 3. 利润表
http.get('/api/financial/income-statement/:stockCode', async ({ params, request }) => {
await delay(250);
const { stockCode } = params;
const url = new URL(request.url);
const limit = parseInt(url.searchParams.get('limit') || '4', 10);
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.incomeStatement.slice(0, limit)
});
}),
// 4. 现金流量表
http.get('/api/financial/cashflow/:stockCode', async ({ params, request }) => {
await delay(250);
const { stockCode } = params;
const url = new URL(request.url);
const limit = parseInt(url.searchParams.get('limit') || '4', 10);
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.cashflow.slice(0, limit)
});
}),
// 5. 财务指标
http.get('/api/financial/financial-metrics/:stockCode', async ({ params, request }) => {
await delay(250);
const { stockCode } = params;
const url = new URL(request.url);
const limit = parseInt(url.searchParams.get('limit') || '4', 10);
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.financialMetrics.slice(0, limit)
});
}),
// 6. 主营业务
http.get('/api/financial/main-business/:stockCode', async ({ params }) => {
await delay(200);
const { stockCode } = params;
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.mainBusiness
});
}),
// 7. 业绩预告
http.get('/api/financial/forecast/:stockCode', async ({ params }) => {
await delay(200);
const { stockCode } = params;
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.forecast
});
}),
// 8. 行业排名
http.get('/api/financial/industry-rank/:stockCode', async ({ params }) => {
await delay(250);
const { stockCode } = params;
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.industryRank
});
}),
// 9. 期间对比
http.get('/api/financial/comparison/:stockCode', async ({ params }) => {
await delay(250);
const { stockCode } = params;
const data = generateFinancialData(stockCode);
return HttpResponse.json({
success: true,
data: data.periodComparison
});
}),
];