| 报告期 | -数值 | -同比 | -环比 | -
|---|---|---|---|
| {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 ? (
- |
-
| 报告期 | +数值 | +同比 | +环比 | +
|---|---|---|---|
| {item.period} | +{formatUtils.formatLargeNumber(item.value)} | +0 + ? positiveColor + : yoy !== null && yoy < 0 + ? negativeColor + : 'gray.500' + } + > + {yoy !== null ? `${yoy.toFixed(2)}%` : '-'} + | +0 + ? positiveColor + : qoq !== null && qoq < 0 + ? negativeColor + : 'gray.500' + } + > + {qoq !== null ? `${qoq.toFixed(2)}%` : '-'} + | +