收费工作台(快捷治理)
聚焦收费闭环的日常治理入口:订单 → 订阅 → 套餐。
平台订单快捷筛选(只保留“点完能做事”的治理入口):
高级筛选(少用,默认收起)
@php
$poTotal = (int) ($stats['platform_orders'] ?? 0);
$poSyncFailed = (int) ($stats['platform_orders_sync_failed'] ?? 0);
$poBmpaFailed = (int) ($stats['platform_orders_bmpa_failed'] ?? 0);
$poNoReceipt = (int) ($stats['platform_orders_paid_no_receipt'] ?? 0);
$poRenewalMissing = (int) ($stats['platform_orders_renewal_missing_subscription'] ?? 0);
$poReconcileMismatch = (int) ($stats['platform_orders_reconcile_mismatch'] ?? 0);
$poRefundInconsistent = (int) ($stats['platform_orders_refund_inconsistent'] ?? 0);
$poSyncFailedPct = $poTotal > 0 ? min(100, max(0, round(($poSyncFailed / $poTotal) * 100, 1))) : 0;
$poBmpaFailedPct = $poTotal > 0 ? min(100, max(0, round(($poBmpaFailed / $poTotal) * 100, 1))) : 0;
$poNoReceiptPct = $poTotal > 0 ? min(100, max(0, round(($poNoReceipt / $poTotal) * 100, 1))) : 0;
$poRenewalMissingPct = $poTotal > 0 ? min(100, max(0, round(($poRenewalMissing / $poTotal) * 100, 1))) : 0;
$poReconcileMismatchPct = $poTotal > 0 ? min(100, max(0, round(($poReconcileMismatch / $poTotal) * 100, 1))) : 0;
$poRefundInconsistentPct = $poTotal > 0 ? min(100, max(0, round(($poRefundInconsistent / $poTotal) * 100, 1))) : 0;
@endphp
@php
$poUnpaidPending = (int) ($stats['platform_orders_unpaid_pending'] ?? 0);
$poPaidPending = (int) ($stats['platform_orders_paid_pending'] ?? 0);
$poSyncable = (int) ($stats['platform_orders_syncable'] ?? 0);
$poUnpaidPendingPct = $poTotal > 0 ? min(100, max(0, round(($poUnpaidPending / $poTotal) * 100, 1))) : 0;
$poPaidPendingPct = $poTotal > 0 ? min(100, max(0, round(($poPaidPending / $poTotal) * 100, 1))) : 0;
$poSyncablePct = $poTotal > 0 ? min(100, max(0, round(($poSyncable / $poTotal) * 100, 1))) : 0;
@endphp
收费主链漏斗(相对平台订单总量 {{ $poTotal }})
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-unpaid-pending-row',
'barRole' => 'dashboard-po-unpaid-pending-bar',
'href' => $platformOrdersQuickLinks['unpaid_pending'],
'ariaLabel' => '进入待支付订单集合',
'label' => '待支付',
'pct' => $poUnpaidPendingPct,
'title' => $poUnpaidPending . ' / ' . $poTotal . '(' . $poUnpaidPendingPct . '%)',
'value' => $poUnpaidPendingPct . '%(' . $poUnpaidPending . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-paid-pending-row',
'barRole' => 'dashboard-po-paid-pending-bar',
'href' => $platformOrdersQuickLinks['paid_pending'],
'ariaLabel' => '进入待生效订单集合',
'label' => '待生效',
'pct' => $poPaidPendingPct,
'title' => $poPaidPending . ' / ' . $poTotal . '(' . $poPaidPendingPct . '%)',
'value' => $poPaidPendingPct . '%(' . $poPaidPending . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-syncable-row',
'barRole' => 'dashboard-po-syncable-bar',
'href' => $platformOrdersQuickLinks['syncable_only'],
'ariaLabel' => '进入可同步订单集合',
'label' => '可同步',
'pct' => $poSyncablePct,
'title' => $poSyncable . ' / ' . $poTotal . '(' . $poSyncablePct . '%)',
'value' => $poSyncablePct . '%(' . $poSyncable . ')',
])
治理风险占比(相对平台订单总量 {{ $poTotal }})
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-sync-failed-row',
'barRole' => 'dashboard-po-sync-failed-bar',
'href' => $platformOrdersQuickLinks['sync_failed'],
'ariaLabel' => '进入同步失败订单集合',
'label' => '同步失败',
'pct' => $poSyncFailedPct,
'title' => $poSyncFailed . ' / ' . $poTotal . '(' . $poSyncFailedPct . '%)',
'value' => $poSyncFailedPct . '%(' . $poSyncFailed . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-bmpa-failed-row',
'barRole' => 'dashboard-po-bmpa-failed-bar',
'href' => $platformOrdersQuickLinks['bmpa_failed'],
'ariaLabel' => '进入BMPA失败订单集合',
'label' => 'BMPA失败',
'pct' => $poBmpaFailedPct,
'title' => $poBmpaFailed . ' / ' . $poTotal . '(' . $poBmpaFailedPct . '%)',
'value' => $poBmpaFailedPct . '%(' . $poBmpaFailed . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-no-receipt-row',
'barRole' => 'dashboard-po-no-receipt-bar',
'href' => $platformOrdersQuickLinks['paid_no_receipt'],
'ariaLabel' => '进入无回执订单集合',
'label' => '无回执',
'pct' => $poNoReceiptPct,
'title' => $poNoReceipt . ' / ' . $poTotal . '(' . $poNoReceiptPct . '%)',
'value' => $poNoReceiptPct . '%(' . $poNoReceipt . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-renewal-missing-row',
'barRole' => 'dashboard-po-renewal-missing-bar',
'href' => $platformOrdersQuickLinks['renewal_missing_subscription'],
'ariaLabel' => '进入续费缺订阅订单集合',
'label' => '续费缺订阅',
'pct' => $poRenewalMissingPct,
'title' => $poRenewalMissing . ' / ' . $poTotal . '(' . $poRenewalMissingPct . '%)',
'value' => $poRenewalMissingPct . '%(' . $poRenewalMissing . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-reconcile-mismatch-row',
'barRole' => 'dashboard-po-reconcile-mismatch-bar',
'href' => $platformOrdersQuickLinks['reconcile_mismatch'],
'ariaLabel' => '进入对账不一致订单集合',
'label' => '对账不一致',
'pct' => $poReconcileMismatchPct,
'title' => $poReconcileMismatch . ' / ' . $poTotal . '(' . $poReconcileMismatchPct . '%)',
'value' => $poReconcileMismatchPct . '%(' . $poReconcileMismatch . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-po-refund-inconsistent-row',
'barRole' => 'dashboard-po-refund-inconsistent-bar',
'href' => $platformOrdersQuickLinks['refund_inconsistent'],
'ariaLabel' => '进入退款不一致订单集合',
'label' => '退款不一致',
'pct' => $poRefundInconsistentPct,
'title' => $poRefundInconsistent . ' / ' . $poTotal . '(' . $poRefundInconsistentPct . '%)',
'value' => $poRefundInconsistentPct . '%(' . $poRefundInconsistent . ')',
])
订阅到期治理:
@php
$subTotal = (int) ($stats['site_subscriptions'] ?? 0);
$subExpiring7d = (int) ($stats['site_subscriptions_expiring_7d'] ?? 0);
$subExpired = (int) ($stats['site_subscriptions_expired'] ?? 0);
$pctExpiring7d = $subTotal > 0 ? min(100, max(0, round(($subExpiring7d / $subTotal) * 100, 1))) : 0;
$pctExpired = $subTotal > 0 ? min(100, max(0, round(($subExpired / $subTotal) * 100, 1))) : 0;
@endphp
占比(相对订阅总量 {{ $subTotal }})
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-sub-expiring-7d-row',
'barRole' => 'dashboard-sub-expiring-7d-bar',
'href' => $subscriptionQuickLinks['expiring_7d'],
'ariaLabel' => '进入7天内到期订阅集合',
'label' => '7天内到期',
'pct' => $pctExpiring7d,
'title' => $subExpiring7d . ' / ' . $subTotal . '(' . $pctExpiring7d . '%)',
'value' => $pctExpiring7d . '%(' . $subExpiring7d . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'dashboard-sub-expired-row',
'barRole' => 'dashboard-sub-expired-bar',
'href' => $subscriptionQuickLinks['expired'],
'ariaLabel' => '进入已过期订阅集合',
'label' => '已过期',
'pct' => $pctExpired,
'title' => $subExpired . ' / ' . $subTotal . '(' . $pctExpired . '%)',
'value' => $pctExpired . '%(' . $subExpired . ')',
])
说明:这里先把收费主链的高频治理入口收敛到仪表盘;后续再补趋势/排行的真实聚合。
平台定位(运营版)
只保留“看完知道下一步做什么”的北极星指标与治理积压。
@php
$ops = $platformOpsOverview ?? [];
$opsLinks = (array) ($ops['links'] ?? []);
$paidRevenue30d = (float) ($ops['paid_revenue_30d'] ?? 0);
$activePaidMerchants = (int) ($ops['active_paid_merchants'] ?? 0);
$renewalRate30d = (float) ($ops['renewal_success_rate_30d'] ?? 0);
$renewalSuccess30d = (int) ($ops['renewal_success_30d'] ?? 0);
$renewalCreated30d = (int) ($ops['renewal_created_30d'] ?? 0);
$ordersTotal7d = (int) ($ops['orders_total_7d'] ?? 0);
$funnelUnpaidPending7d = (int) ($ops['funnel_unpaid_pending_7d'] ?? 0);
$funnelPaid7d = (int) ($ops['funnel_paid_7d'] ?? 0);
$funnelPaidActivated7d = (int) ($ops['funnel_paid_activated_7d'] ?? 0);
$goBmpa = (int) ($ops['govern_bmpa_processable'] ?? 0);
$goSyncable = (int) ($ops['govern_syncable'] ?? 0);
$goSyncFailed = (int) ($ops['govern_sync_failed'] ?? 0);
@endphp
北极星指标(文字口径) (少用,默认收起)
@php
// 北极星指标图形化:给运营“规模感/健康感”,但不引入额外分类维度。
$merchantsTotal = (int) ($stats['merchants'] ?? 0);
$pctActivePaidMerchants = $merchantsTotal > 0 ? min(100, max(0, round(($activePaidMerchants / $merchantsTotal) * 100, 1))) : 0;
@endphp
北极星指标(图形化)
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-northstar-active-paid-merchants-row',
'barRole' => 'ops-northstar-active-paid-merchants-bar',
'href' => (string) ($opsLinks['active_paid_merchants_subscriptions'] ?? $billingEntryLinks['site_subscriptions']),
'ariaLabel' => '进入活跃付费站点订阅集合',
'label' => '付费渗透',
'pct' => $pctActivePaidMerchants,
'title' => $activePaidMerchants . ' / ' . $merchantsTotal . '(' . $pctActivePaidMerchants . '%)',
'value' => $pctActivePaidMerchants . '%(' . $activePaidMerchants . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-northstar-renewal-rate-row',
'barRole' => 'ops-northstar-renewal-rate-bar',
'href' => (string) ($opsLinks['renewal_orders_30d'] ?? $billingEntryLinks['platform_orders']),
'ariaLabel' => '进入近30天续费订单集合',
'label' => '续费成功率',
'pct' => $renewalRate30d,
'title' => $renewalRate30d . '%(' . $renewalSuccess30d . ' / ' . $renewalCreated30d . ')',
'value' => $renewalRate30d . '%',
])
说明:付费渗透 = 活跃付费站点 / 站点总数;续费成功率按近30天续费单计算。
@php
$den = max(1, $ordersTotal7d);
$pctUnpaidPending = $den > 0 ? min(100, max(0, round(($funnelUnpaidPending7d / $den) * 100, 1))) : 0;
$pctPaid = $den > 0 ? min(100, max(0, round(($funnelPaid7d / $den) * 100, 1))) : 0;
$pctPaidActivated = $den > 0 ? min(100, max(0, round(($funnelPaidActivated7d / $den) * 100, 1))) : 0;
// 待处理治理:以平台订单总量作为分母,给一个“规模感”(不要求精确经营含义)。
$poTotalForOps = (int) ($stats['platform_orders'] ?? 0);
$denOps = max(1, $poTotalForOps);
$pctGoBmpa = $poTotalForOps > 0 ? min(100, max(0, round(($goBmpa / $denOps) * 100, 1))) : 0;
$pctGoSyncable = $poTotalForOps > 0 ? min(100, max(0, round(($goSyncable / $denOps) * 100, 1))) : 0;
$pctGoSyncFailed = $poTotalForOps > 0 ? min(100, max(0, round(($goSyncFailed / $denOps) * 100, 1))) : 0;
@endphp
收款漏斗(近7天)
用于快速判断卡点:催付 / 治理生效 / 同步订阅。
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-funnel-unpaid-pending-row',
'barRole' => 'ops-funnel-unpaid-pending-bar',
'href' => (string) ($opsLinks['funnel_unpaid_pending_7d'] ?? $platformOrdersQuickLinks['unpaid_pending']),
'ariaLabel' => '进入近7天待支付订单集合',
'label' => '待支付',
'pct' => $pctUnpaidPending,
'title' => $funnelUnpaidPending7d . ' / ' . $ordersTotal7d . '(' . $pctUnpaidPending . '%)',
'value' => $pctUnpaidPending . '%(' . $funnelUnpaidPending7d . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-funnel-paid-row',
'barRole' => 'ops-funnel-paid-bar',
'href' => (string) ($opsLinks['funnel_paid_7d'] ?? $platformOrdersQuickLinks['platform_orders']),
'ariaLabel' => '进入近7天已支付订单集合',
'label' => '已支付',
'pct' => $pctPaid,
'title' => $funnelPaid7d . ' / ' . $ordersTotal7d . '(' . $pctPaid . '%)',
'value' => $pctPaid . '%(' . $funnelPaid7d . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-funnel-paid-activated-row',
'barRole' => 'ops-funnel-paid-activated-bar',
'href' => (string) ($opsLinks['funnel_paid_activated_7d'] ?? $platformOrdersQuickLinks['platform_orders']),
'ariaLabel' => '进入近7天已生效订单集合',
'label' => '已生效',
'pct' => $pctPaidActivated,
'title' => $funnelPaidActivated7d . ' / ' . $ordersTotal7d . '(' . $pctPaidActivated . '%)',
'value' => $pctPaidActivated . '%(' . $funnelPaidActivated7d . ')',
])
分母:近7天平台订单总数 {{ $ordersTotal7d }}(含未支付/已支付)。
待处理治理(Top3)
用于快速判断治理积压:优先清空“能直接处理”的集合。
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-govern-bmpa-row',
'barRole' => 'ops-govern-bmpa-bar',
'href' => $platformOrdersQuickLinks['unpaid_pending'],
'ariaLabel' => '进入可BMPA处理订单集合',
'label' => '可BMPA',
'pct' => $pctGoBmpa,
'title' => $goBmpa . ' / ' . $poTotalForOps . '(' . $pctGoBmpa . '%)',
'value' => $pctGoBmpa . '%(' . $goBmpa . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-govern-syncable-row',
'barRole' => 'ops-govern-syncable-bar',
'href' => $platformOrdersQuickLinks['syncable_only'],
'ariaLabel' => '进入可同步订单集合',
'label' => '可同步',
'pct' => $pctGoSyncable,
'title' => $goSyncable . ' / ' . $poTotalForOps . '(' . $pctGoSyncable . '%)',
'value' => $pctGoSyncable . '%(' . $goSyncable . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-govern-sync-failed-row',
'barRole' => 'ops-govern-sync-failed-bar',
'href' => $platformOrdersQuickLinks['sync_failed'],
'ariaLabel' => '进入同步失败订单集合',
'label' => '同步失败',
'pct' => $pctGoSyncFailed,
'title' => $goSyncFailed . ' / ' . $poTotalForOps . '(' . $pctGoSyncFailed . '%)',
'value' => $pctGoSyncFailed . '%(' . $goSyncFailed . ')',
])
分母:平台订单总量 {{ $poTotalForOps }}(用于规模感,不作为经营口径)。
@php
// 平台健康预警:原因型风险(点进去有明确动作:补回执/对账/核对退款)。
$riskNoReceipt = (int) ($stats['platform_orders_paid_no_receipt'] ?? 0);
$riskReconcileMismatch = (int) ($stats['platform_orders_reconcile_mismatch'] ?? 0);
$riskRefundInconsistent = (int) ($stats['platform_orders_refund_inconsistent'] ?? 0);
$pctRiskNoReceipt = $poTotalForOps > 0 ? min(100, max(0, round(($riskNoReceipt / $denOps) * 100, 1))) : 0;
$pctRiskReconcileMismatch = $poTotalForOps > 0 ? min(100, max(0, round(($riskReconcileMismatch / $denOps) * 100, 1))) : 0;
$pctRiskRefundInconsistent = $poTotalForOps > 0 ? min(100, max(0, round(($riskRefundInconsistent / $denOps) * 100, 1))) : 0;
// 异常积压:点进去要做“治理修复/补关联/重试”。
$exBmpaFailed = (int) ($stats['platform_orders_bmpa_failed'] ?? 0);
$exRenewalMissing = (int) ($stats['platform_orders_renewal_missing_subscription'] ?? 0);
$pctExBmpaFailed = $poTotalForOps > 0 ? min(100, max(0, round(($exBmpaFailed / $denOps) * 100, 1))) : 0;
$pctExRenewalMissing = $poTotalForOps > 0 ? min(100, max(0, round(($exRenewalMissing / $denOps) * 100, 1))) : 0;
@endphp
平台健康预警(Top3)
原因型风险:补回执 / 对账 / 核对退款。
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-risk-no-receipt-row',
'barRole' => 'ops-risk-no-receipt-bar',
'href' => $platformOrdersQuickLinks['paid_no_receipt'],
'ariaLabel' => '进入无回执订单集合',
'label' => '无回执',
'pct' => $pctRiskNoReceipt,
'title' => $riskNoReceipt . ' / ' . $poTotalForOps . '(' . $pctRiskNoReceipt . '%)',
'value' => $pctRiskNoReceipt . '%(' . $riskNoReceipt . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-risk-reconcile-mismatch-row',
'barRole' => 'ops-risk-reconcile-mismatch-bar',
'href' => $platformOrdersQuickLinks['reconcile_mismatch'],
'ariaLabel' => '进入对账不一致订单集合',
'label' => '对账不一致',
'pct' => $pctRiskReconcileMismatch,
'title' => $riskReconcileMismatch . ' / ' . $poTotalForOps . '(' . $pctRiskReconcileMismatch . '%)',
'value' => $pctRiskReconcileMismatch . '%(' . $riskReconcileMismatch . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-risk-refund-inconsistent-row',
'barRole' => 'ops-risk-refund-inconsistent-bar',
'href' => $platformOrdersQuickLinks['refund_inconsistent'],
'ariaLabel' => '进入退款不一致订单集合',
'label' => '退款不一致',
'pct' => $pctRiskRefundInconsistent,
'title' => $riskRefundInconsistent . ' / ' . $poTotalForOps . '(' . $pctRiskRefundInconsistent . '%)',
'value' => $pctRiskRefundInconsistent . '%(' . $riskRefundInconsistent . ')',
])
更多异常积压(少用)
异常型治理:批量失败 / 续费缺订阅等。
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-exception-bmpa-failed-row',
'barRole' => 'ops-exception-bmpa-failed-bar',
'href' => $platformOrdersQuickLinks['bmpa_failed'],
'ariaLabel' => '进入BMPA失败订单集合',
'label' => 'BMPA失败',
'pct' => $pctExBmpaFailed,
'title' => $exBmpaFailed . ' / ' . $poTotalForOps . '(' . $pctExBmpaFailed . '%)',
'value' => $pctExBmpaFailed . '%(' . $exBmpaFailed . ')',
])
@include('admin.components.mini_bar_row', [
'class' => 'mt-6',
'rowRole' => 'ops-exception-renewal-missing-row',
'barRole' => 'ops-exception-renewal-missing-bar',
'href' => $platformOrdersQuickLinks['renewal_missing_subscription'],
'ariaLabel' => '进入续费缺订阅订单集合',
'label' => '续费缺订阅',
'pct' => $pctExRenewalMissing,
'title' => $exRenewalMissing . ' / ' . $poTotalForOps . '(' . $pctExRenewalMissing . '%)',
'value' => $pctExRenewalMissing . '%(' . $exRenewalMissing . ')',
])