fix(types): 修复 ECharts 类型导出和组件类型冲突

- echarts.ts: 将 EChartsOption 改为 EChartsCoreOption 的类型别名
- FuiCorners: 移除 extends BoxProps,position 重命名为 corner
- KLineChartModal/TimelineChartModal/ConcentrationCard: 使用导入的 EChartsOption
- LoadingState: 新增骨架屏 variant 支持
- FinancialPanorama: 使用骨架屏加载状态
- useFinancialData/financialService: 优化数据获取逻辑
- Company/index: 简化组件结构

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-18 18:42:19 +08:00
parent 5331bc64b4
commit 2720946ccf
10 changed files with 213 additions and 104 deletions

View File

@@ -9,13 +9,17 @@ import axios from '@utils/axiosConfig';
/**
* 统一的 API 请求函数
* axios 拦截器已自动处理日志记录
* @param {string} url - 请求 URL
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号,用于取消请求
*/
const apiRequest = async (url, options = {}) => {
const { method = 'GET', body, ...rest } = options;
const { method = 'GET', body, signal, ...rest } = options;
const config = {
method,
url,
signal,
...rest,
};
@@ -36,80 +40,98 @@ export const financialService = {
/**
* 获取股票基本信息和最新财务摘要
* @param {string} seccode - 股票代码
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getStockInfo: async (seccode) => {
return await apiRequest(`/api/financial/stock-info/${seccode}`);
getStockInfo: async (seccode, options = {}) => {
return await apiRequest(`/api/financial/stock-info/${seccode}`, options);
},
/**
* 获取完整的资产负债表数据
* @param {string} seccode - 股票代码
* @param {number} limit - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getBalanceSheet: async (seccode, limit = 12) => {
return await apiRequest(`/api/financial/balance-sheet/${seccode}?limit=${limit}`);
getBalanceSheet: async (seccode, limit = 12, options = {}) => {
return await apiRequest(`/api/financial/balance-sheet/${seccode}?limit=${limit}`, options);
},
/**
* 获取完整的利润表数据
* @param {string} seccode - 股票代码
* @param {number} limit - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getIncomeStatement: async (seccode, limit = 12) => {
return await apiRequest(`/api/financial/income-statement/${seccode}?limit=${limit}`);
getIncomeStatement: async (seccode, limit = 12, options = {}) => {
return await apiRequest(`/api/financial/income-statement/${seccode}?limit=${limit}`, options);
},
/**
* 获取完整的现金流量表数据
* @param {string} seccode - 股票代码
* @param {number} limit - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getCashflow: async (seccode, limit = 12) => {
return await apiRequest(`/api/financial/cashflow/${seccode}?limit=${limit}`);
getCashflow: async (seccode, limit = 12, options = {}) => {
return await apiRequest(`/api/financial/cashflow/${seccode}?limit=${limit}`, options);
},
/**
* 获取完整的财务指标数据
* @param {string} seccode - 股票代码
* @param {number} limit - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getFinancialMetrics: async (seccode, limit = 12) => {
return await apiRequest(`/api/financial/financial-metrics/${seccode}?limit=${limit}`);
getFinancialMetrics: async (seccode, limit = 12, options = {}) => {
return await apiRequest(`/api/financial/financial-metrics/${seccode}?limit=${limit}`, options);
},
/**
* 获取主营业务构成数据
* @param {string} seccode - 股票代码
* @param {number} periods - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getMainBusiness: async (seccode, periods = 4) => {
return await apiRequest(`/api/financial/main-business/${seccode}?periods=${periods}`);
getMainBusiness: async (seccode, periods = 4, options = {}) => {
return await apiRequest(`/api/financial/main-business/${seccode}?periods=${periods}`, options);
},
/**
* 获取业绩预告和预披露时间
* @param {string} seccode - 股票代码
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getForecast: async (seccode) => {
return await apiRequest(`/api/financial/forecast/${seccode}`);
getForecast: async (seccode, options = {}) => {
return await apiRequest(`/api/financial/forecast/${seccode}`, options);
},
/**
* 获取行业排名数据
* @param {string} seccode - 股票代码
* @param {number} limit - 获取的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getIndustryRank: async (seccode, limit = 4) => {
return await apiRequest(`/api/financial/industry-rank/${seccode}?limit=${limit}`);
getIndustryRank: async (seccode, limit = 4, options = {}) => {
return await apiRequest(`/api/financial/industry-rank/${seccode}?limit=${limit}`, options);
},
/**
* 获取不同报告期的对比数据
* @param {string} seccode - 股票代码
* @param {number} periods - 对比的报告期数量
* @param {object} options - 请求选项
* @param {AbortSignal} options.signal - AbortController 信号
*/
getPeriodComparison: async (seccode, periods = 8) => {
return await apiRequest(`/api/financial/comparison/${seccode}?periods=${periods}`);
getPeriodComparison: async (seccode, periods = 8, options = {}) => {
return await apiRequest(`/api/financial/comparison/${seccode}?periods=${periods}`, options);
},
};