feat: 利润与成本指标卡?提示增加计算公式

This commit is contained in:
freedakgmail
2026-07-30 10:14:21 +08:00
parent 1a00c7c170
commit 0509bb6431
+8 -8
View File
@@ -192,16 +192,16 @@ export function DashboardPage() {
{ex && ( {ex && (
<CollapsibleSection title="利润与成本" subtitle="食材成本、经营费用、净利润等财务指标"> <CollapsibleSection title="利润与成本" subtitle="食材成本、经营费用、净利润等财务指标">
<div className="grid grid-cols-2 gap-3 md:grid-cols-4"> <div className="grid grid-cols-2 gap-3 md:grid-cols-4">
<MetricCard title="理论净利润" value={ex.theoretical_net_profit} format="currency" status="good" description={`净利率 ${formatPercent(ex.theoretical_net_margin_pct)} · 按标准成本计算的理论利润。建议值:净利率 ≥ 15% 为健康`} /> <MetricCard title="理论净利润" value={ex.theoretical_net_profit} format="currency" status="good" description={`净利率 ${formatPercent(ex.theoretical_net_margin_pct)} · 公式:实收 - 理论食材成本 - 经营费用。建议值:净利率 ≥ 15% 为健康`} />
<MetricCard title="实际净利润" value={ex.actual_net_profit} format="currency" status={Number(ex.actual_net_margin_pct) < 5 ? 'bad' : Number(ex.actual_net_margin_pct) < 10 ? 'warn' : 'good'} description={`净利率 ${formatPercent(ex.actual_net_margin_pct)} · 盈利 ${ex.profitable_stores}家 / 亏损 ${ex.loss_stores}家。建议值:净利率 ≥ 10% 为优秀,5-10% 为合格,< 5% 需整改`} /> <MetricCard title="实际净利润" value={ex.actual_net_profit} format="currency" status={Number(ex.actual_net_margin_pct) < 5 ? 'bad' : Number(ex.actual_net_margin_pct) < 10 ? 'warn' : 'good'} description={`净利率 ${formatPercent(ex.actual_net_margin_pct)} · 公式:实收 - 实际食材成本 - 经营费用。盈利 ${ex.profitable_stores}家 / 亏损 ${ex.loss_stores}家。建议值:净利率 ≥ 10% 为优秀,5-10% 为合格,< 5% 需整改`} />
<MetricCard title="食材成本" value={ex.total_food_cost} format="currency" status={Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct) > 10 ? 'bad' : Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct) > 5 ? 'warn' : 'good'} description={`成本率 ${formatPercent(ex.actual_food_cost_rate_pct)} · 理论成本率 ${formatPercent(ex.theoretical_food_cost_rate_pct)} · 差异 ${formatPercent(Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct))}。建议值:实际成本率 ≤ 32%,与理论差异 ≤ 3% 为正常`} /> <MetricCard title="食材成本" value={ex.total_food_cost} format="currency" status={Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct) > 10 ? 'bad' : Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct) > 5 ? 'warn' : 'good'} description={`成本率 ${formatPercent(ex.actual_food_cost_rate_pct)} · 理论成本率 ${formatPercent(ex.theoretical_food_cost_rate_pct)} · 差异 ${formatPercent(Number(ex.actual_food_cost_rate_pct) - Number(ex.theoretical_food_cost_rate_pct))}公式:成本率 = 食材成本 ÷ 实收 × 100%。建议值:实际成本率 ≤ 32%,与理论差异 ≤ 3% 为正常`} />
<MetricCard title="经营费用" value={ex.total_expense} format="currency" status={Number(ex.overall_expense_rate_pct) > 50 ? 'bad' : Number(ex.overall_expense_rate_pct) > 40 ? 'warn' : 'good'} description={`费用率 ${formatPercent(ex.overall_expense_rate_pct)} · 人工 ${formatCurrency(ex.total_wage)} · 房租 ${formatCurrency(ex.total_rent)}。建议值:费用率 ≤ 40% 为健康,40-50% 需关注,> 50% 需整改`} /> <MetricCard title="经营费用" value={ex.total_expense} format="currency" status={Number(ex.overall_expense_rate_pct) > 50 ? 'bad' : Number(ex.overall_expense_rate_pct) > 40 ? 'warn' : 'good'} description={`费用率 ${formatPercent(ex.overall_expense_rate_pct)} · 公式:费用率 = 经营费用 ÷ 实收 × 100%。人工 ${formatCurrency(ex.total_wage)} · 房租 ${formatCurrency(ex.total_rent)}。建议值:费用率 ≤ 40% 为健康,40-50% 需关注,> 50% 需整改`} />
</div> </div>
<div className="mt-3 grid grid-cols-2 gap-3 md:grid-cols-4"> <div className="mt-3 grid grid-cols-2 gap-3 md:grid-cols-4">
<MetricCard title="人工费用" value={ex.total_wage} format="currency" status={Number(ex.overall_wage_rate_pct) > 30 ? 'bad' : Number(ex.overall_wage_rate_pct) > 25 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_wage_rate_pct)}。建议值:人工费率 ≤ 22% 为优秀,22-28% 为合理,> 30% 需优化人效`} /> <MetricCard title="人工费用" value={ex.total_wage} format="currency" status={Number(ex.overall_wage_rate_pct) > 30 ? 'bad' : Number(ex.overall_wage_rate_pct) > 25 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_wage_rate_pct)} · 公式:人工费率 = 人工费用 ÷ 实收 × 100%。建议值:≤ 22% 为优秀,22-28% 为合理,> 30% 需优化人效`} />
<MetricCard title="房租费用" value={ex.total_rent} format="currency" status={Number(ex.overall_rent_rate_pct) > 20 ? 'bad' : Number(ex.overall_rent_rate_pct) > 15 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_rent_rate_pct)}。建议值:房租费率 ≤ 12% 为优秀,12-15% 为合理,> 18% 需考虑选址或涨租谈判`} /> <MetricCard title="房租费用" value={ex.total_rent} format="currency" status={Number(ex.overall_rent_rate_pct) > 20 ? 'bad' : Number(ex.overall_rent_rate_pct) > 15 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_rent_rate_pct)} · 公式:房租费率 = 房租费用 ÷ 实收 × 100%。建议值:≤ 12% 为优秀,12-15% 为合理,> 18% 需考虑选址或涨租谈判`} />
<MetricCard title="水电费用" value={ex.total_utility} format="currency" status={Number(ex.overall_utility_rate_pct) > 8 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_utility_rate_pct)}。建议值:水电费率 ≤ 5% 为优秀,5-7% 为合理,> 8% 需排查节能`} /> <MetricCard title="水电费用" value={ex.total_utility} format="currency" status={Number(ex.overall_utility_rate_pct) > 8 ? 'warn' : 'good'} description={`占实收 ${formatPercent(ex.overall_utility_rate_pct)} · 公式:水电费率 = 水电费用 ÷ 实收 × 100%。建议值:≤ 5% 为优秀,5-7% 为合理,> 8% 需排查节能`} />
<MetricCard title="外卖佣金" value={ex.total_commission} format="currency" status={Number(ex.total_commission) > 4000000 ? 'warn' : 'good'} description={`外卖平台佣金合计。建议值:佣金占实收 ≤ 5% 为健康,当前占实收 ${formatPercent(Number(ex.total_commission) / Number(ex.total_received) * 100)}`} /> <MetricCard title="外卖佣金" value={ex.total_commission} format="currency" status={Number(ex.total_commission) > 4000000 ? 'warn' : 'good'} description={`外卖平台佣金合计 · 公式:佣金费率 = 佣金 ÷ 实收 × 100%。建议值:≤ 5% 为健康,当前占实收 ${formatPercent(Number(ex.total_commission) / Number(ex.total_received) * 100)}`} />
</div> </div>
</CollapsibleSection> </CollapsibleSection>
)} )}