feat: 全页面增加营业收入/优惠指标 + 修复趋势预测空数据 + 区域对比口径统一 + StorePage最新经营日概览
- 后端: 所有API的discount改为从bill_fact累计discount_total - 后端: revenue/daily-summary增加consumption字段 - 后端: situational-awareness/forecast修复c175字符串比较为timestamp - 后端: region/comparison去掉未知区域排除,统一口径 - 后端: daily-card增加营业收入/优惠指标,返回target_date/baseline_date - 前端: BossPage/DashboardPage/BankPage/StorePage/ExpenseOverviewTab/RegionalPage/RegionComparisonPage/RevenuePage 均增加营业收入和优惠指标卡 - 前端: StorePage日均经营概览改为最新经营日概览,显示具体对比日期 - 前端: 日期格式统一截取YYYY-MM-DD显示
This commit is contained in:
@@ -53,6 +53,7 @@ export function RevenuePage() {
|
||||
const rankRows = (storeRankingData as any)?.data || []
|
||||
|
||||
// 核心指标
|
||||
const totalConsumption = dailyRows.reduce((s: number, r: any) => s + Number(r.consumption || 0), 0)
|
||||
const totalReceived = dailyRows.reduce((s: number, r: any) => s + Number(r.received || 0), 0)
|
||||
const totalBills = dailyRows.reduce((s: number, r: any) => s + Number(r.bill_count || 0), 0)
|
||||
const totalDiscounts = dailyRows.reduce((s: number, r: any) => s + Number(r.discounts || 0), 0)
|
||||
@@ -154,11 +155,13 @@ export function RevenuePage() {
|
||||
</div>
|
||||
|
||||
{/* 核心指标 */}
|
||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-4">
|
||||
<MetricCard title="实收总额" value={totalReceived} format="currency" trend={trendReceived} description={`公式:全部门店实收合计。环比上周 ${trendReceived > 0 ? '↑' : '↓'} ${Math.abs(trendReceived)}%`} />
|
||||
<MetricCard title="账单数" value={totalBills} format="number" trend={trendBills} description={`公式:全部门店账单数合计。环比上周 ${trendBills > 0 ? '↑' : '↓'} ${Math.abs(trendBills)}%`} />
|
||||
<MetricCard title="客单价" value={avgBillValue} format="currency" description={`公式:实收 ÷ 账单数。建议值:≥ 35元 为健康`} />
|
||||
<MetricCard title="优惠总额" value={totalDiscounts} format="currency" status={avgDiscountRate > 25 ? 'bad' : avgDiscountRate > 20 ? 'warn' : 'good'} description={`优惠率 ${formatPercent(avgDiscountRate)} · 公式:优惠率 = 优惠额 ÷ (实收 + 优惠额) × 100%。建议值:≤ 18% 为健康,18-22% 需关注,> 25% 需整改`} />
|
||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-3 lg:grid-cols-6">
|
||||
<MetricCard title="营业收入" value={totalConsumption} format="currency" description="全部门店消费金额合计" />
|
||||
<MetricCard title="优惠总额" value={totalDiscounts} format="currency" status={avgDiscountRate > 25 ? 'bad' : avgDiscountRate > 20 ? 'warn' : 'good'} description={`优惠率 ${formatPercent(avgDiscountRate)}`} />
|
||||
<MetricCard title="实收总额" value={totalReceived} format="currency" trend={trendReceived} description={`环比上周 ${trendReceived > 0 ? '↑' : '↓'} ${Math.abs(trendReceived)}%`} />
|
||||
<MetricCard title="账单数" value={totalBills} format="number" trend={trendBills} description={`环比上周 ${trendBills > 0 ? '↑' : '↓'} ${Math.abs(trendBills)}%`} />
|
||||
<MetricCard title="客单价" value={avgBillValue} format="currency" description="实收 ÷ 账单数" />
|
||||
<MetricCard title="客流量" value={totalGuests} format="number" description={`人均 ${formatCurrency(avgGuestValue)}`} />
|
||||
</div>
|
||||
|
||||
{/* 日度营收趋势 */}
|
||||
|
||||
Reference in New Issue
Block a user