| 报告期 | 数值 | 同比 | 环比 |
|---|---|---|---|
| {item.period} | {formatUtils.formatLargeNumber(item.value)} | 0 ? positiveColor : yoy < 0 ? negativeColor : 'gray.500'}> {yoy ? `${yoy.toFixed(2)}%` : '-'} | 0 ? positiveColor : qoq < 0 ? negativeColor : 'gray.500'}> {qoq ? `${qoq.toFixed(2)}%` : '-'} |
| 项目 | {displayData.map(item => (
|
))}
操作 |
|---|---|---|
| 项目 | {displayData.map(item => (
|
))}
操作 |
|---|
| 项目 | {displayData.map(item => (
|
))}
趋势 |
|---|---|---|
|
|
{displayData.map((item, idx) => {
const value = rowData[idx];
const isNegative = value < 0;
const { change, intensity } = calculateYoYChange(
value,
item.period,
cashflow,
metric.path
);
return (
|
);
})}
|
| {currentCategory.title} | {displayData.map(item => (
|
))}
趋势 |
|---|---|---|
|
|
{displayData.map((item, idx) => {
const value = rowData[idx];
const { change, intensity } = calculateYoYChange(
value,
item.period,
financialMetrics,
metric.path
);
// 判断指标性质
const isNegativeIndicator = metric.key.includes('days') ||
metric.key.includes('expense_ratio') ||
metric.key.includes('debt_ratio') ||
metric.key.includes('cost_ratio');
// 对于负向指标,增加是坏事(绿色),减少是好事(红色)
const displayColor = isNegativeIndicator ?
(change > 0 ? negativeColor : positiveColor) :
(change > 0 ? positiveColor : negativeColor);
return (
|
);
})}
|
| 业务 | 营收 | 毛利率(%) | 利润 |
|---|---|---|---|
| {item.content} | {formatUtils.formatLargeNumber(item.revenue)} | {formatUtils.formatPercent(item.gross_margin || item.profit_margin)} | {formatUtils.formatLargeNumber(item.profit)} |
| 业务/期间 | {historicalData.slice(0, 3).map(period => ({period.report_type} | ))}
|---|---|
| {item.content} | {historicalData.slice(0, 3).map(period => { const periodItems = hasProductData ? period.products : period.industries; const matchItem = periodItems.find(p => p.content === item.content); return ({matchItem ? formatUtils.formatLargeNumber(matchItem.revenue) : '-'} | ); })}
| 指标 | {stockInfo?.stock_name} | {compareData.stockInfo?.stock_name} | 差异 |
|---|---|---|---|
| {metric.label} | {metric.format === 'percent' ? formatUtils.formatPercent(value1) : formatUtils.formatLargeNumber(value1)} | {metric.format === 'percent' ? formatUtils.formatPercent(value2) : formatUtils.formatLargeNumber(value2)} |
{diff !== null ? (
|