From f04680a49816d76f6cbabfa0e210b6a47c0f299f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Tue, 17 Mar 2026 02:56:45 +0800 Subject: [PATCH] Dashboard: add BMPA failed to governance mini bars --- resources/views/admin/dashboard.blade.php | 10 ++++++++++ ...oardMiniBarRowsShouldLinkToGovernanceScopesTest.php | 3 ++- ...PlatformOrderGovernanceMiniBarsShouldRenderTest.php | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index db6a772..45a0456 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -275,12 +275,14 @@ @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; @@ -336,6 +338,14 @@
{{ $poSyncFailedPct }}%({{ $poSyncFailed }})
+ +
BMPA失败
+
+ +
+
{{ $poBmpaFailedPct }}%({{ $poBmpaFailed }})
+
+
无回执
diff --git a/tests/Feature/AdminDashboardMiniBarRowsShouldLinkToGovernanceScopesTest.php b/tests/Feature/AdminDashboardMiniBarRowsShouldLinkToGovernanceScopesTest.php index e803096..7ce95f0 100644 --- a/tests/Feature/AdminDashboardMiniBarRowsShouldLinkToGovernanceScopesTest.php +++ b/tests/Feature/AdminDashboardMiniBarRowsShouldLinkToGovernanceScopesTest.php @@ -36,8 +36,9 @@ class AdminDashboardMiniBarRowsShouldLinkToGovernanceScopesTest extends TestCase $this->assertStringContainsString('href="/admin/platform-orders?payment_status=paid&status=pending&sync_status=unsynced&back=%2Fadmin"', $html); $this->assertStringContainsString('href="/admin/platform-orders?syncable_only=1&sync_status=unsynced&back=%2Fadmin"', $html); - // 治理:同步失败 / 无回执 / 续费缺订阅 / 对账不一致 / 退款不一致 + // 治理:同步失败 / BMPA失败 / 无回执 / 续费缺订阅 / 对账不一致 / 退款不一致 $this->assertStringContainsString('href="/admin/platform-orders?sync_status=failed&back=%2Fadmin"', $html); + $this->assertStringContainsString('href="/admin/platform-orders?bmpa_failed_only=1&back=%2Fadmin"', $html); $this->assertStringContainsString('href="/admin/platform-orders?payment_status=paid&receipt_status=none&back=%2Fadmin"', $html); $this->assertStringContainsString('href="/admin/platform-orders?renewal_missing_subscription=1&back=%2Fadmin"', $html); $this->assertStringContainsString('href="/admin/platform-orders?reconcile_mismatch=1&back=%2Fadmin"', $html); diff --git a/tests/Feature/AdminDashboardPlatformOrderGovernanceMiniBarsShouldRenderTest.php b/tests/Feature/AdminDashboardPlatformOrderGovernanceMiniBarsShouldRenderTest.php index 1718cb9..c5abe48 100644 --- a/tests/Feature/AdminDashboardPlatformOrderGovernanceMiniBarsShouldRenderTest.php +++ b/tests/Feature/AdminDashboardPlatformOrderGovernanceMiniBarsShouldRenderTest.php @@ -30,6 +30,7 @@ class AdminDashboardPlatformOrderGovernanceMiniBarsShouldRenderTest extends Test $this->assertStringContainsString('data-role="dashboard-po-governance-bars"', $html); $this->assertStringContainsString('data-role="dashboard-po-sync-failed-bar"', $html); + $this->assertStringContainsString('data-role="dashboard-po-bmpa-failed-bar"', $html); $this->assertStringContainsString('data-role="dashboard-po-no-receipt-bar"', $html); $this->assertStringContainsString('data-role="dashboard-po-renewal-missing-bar"', $html); $this->assertStringContainsString('data-role="dashboard-po-reconcile-mismatch-bar"', $html);