问题:
- 点击"股票行情"标签页: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) 提供完整真实数据
- 其他股票代码生成合理的模拟数据
122 lines
3.8 KiB
JavaScript
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
|
|
});
|
|
}),
|
|
];
|