feat: 增加 DCF 等估值工具
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
const fmt = value => new Intl.NumberFormat('zh-CN', {maximumFractionDigits: 2}).format(value);
|
||||
|
||||
// Both series use the same annual rows as the retained table, in 亿元.
|
||||
export function buildDCFCashflowOption({rows, colors, width, reducedMotion = false}) {
|
||||
const compact = width < 520;
|
||||
return {
|
||||
animation: !reducedMotion,
|
||||
animationDuration: 0,
|
||||
animationDurationUpdate: 200,
|
||||
color: [colors.secondary, colors.accent],
|
||||
legend: {top: 0, left: 'center', itemWidth: 12, itemHeight: 8,
|
||||
textStyle: {color: colors.muted, fontSize: 11}, data: ['自由现金流', '折现后现值']},
|
||||
grid: {left: compact ? 8 : 12, right: 12, top: 58, bottom: rows.length > 15 ? 70 : 16, containLabel: true},
|
||||
tooltip: {trigger: 'axis', confine: true, backgroundColor: colors.paper, borderColor: colors.line,
|
||||
textStyle: {color: colors.ink, fontSize: 12}, axisPointer: {type: 'shadow'},
|
||||
formatter: params => {
|
||||
const row = rows[params[0].dataIndex];
|
||||
return `${row.year} 年 · 阶段 ${row.stage}<br>自由现金流:${fmt(row.cash)} 亿元<br>折现后现值:${fmt(row.presentValue)} 亿元<br>折现因子:${row.factor.toFixed(4)}<br>现金流增长率:${fmt(row.growth * 100)}%`;
|
||||
}},
|
||||
xAxis: {type: 'category', data: rows.map(row => String(row.year)),
|
||||
axisLine: {lineStyle: {color: colors.line}}, axisTick: {show: false},
|
||||
axisLabel: {color: colors.muted, fontSize: 11, hideOverlap: true}},
|
||||
yAxis: {type: 'value', name: '亿元', nameTextStyle: {color: colors.muted, fontSize: 11},
|
||||
axisLabel: {color: colors.muted, fontSize: 11},
|
||||
splitLine: {lineStyle: {color: colors.line, type: 'dashed'}}},
|
||||
dataZoom: rows.length > 15 ? [{type: 'slider', height: 18, bottom: 8,
|
||||
startValue: 0, endValue: 14, borderColor: colors.line,
|
||||
textStyle: {color: colors.muted, fontSize: 10}}] : [],
|
||||
series: [
|
||||
{name: '自由现金流', type: 'bar', data: rows.map(row => row.cash),
|
||||
barMaxWidth: 24, itemStyle: {borderRadius: [3, 3, 0, 0]}},
|
||||
{name: '折现后现值', type: 'bar', data: rows.map(row => row.presentValue),
|
||||
barMaxWidth: 24, itemStyle: {borderRadius: [3, 3, 0, 0]}},
|
||||
],
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user