From c40274f3d10b65d960ddbca4fb40037bc203c551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Wed, 18 Mar 2026 06:33:09 +0800 Subject: [PATCH] Dashboard scanline: sync/bmpa none links to order governance actions --- resources/views/admin/dashboard.blade.php | 5 +- .../admin/platform_orders/show.blade.php | 2 +- ...ShouldLinkToOrderGovernanceActionsTest.php | 75 +++++++++++++++++++ ...ShouldLinkToOrderGovernanceActionsTest.php | 75 +++++++++++++++++++ 4 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 tests/Feature/AdminDashboardRecentPlatformOrdersScanlineBmpaNoneShouldLinkToOrderGovernanceActionsTest.php create mode 100644 tests/Feature/AdminDashboardRecentPlatformOrdersScanlineSyncNoneShouldLinkToOrderGovernanceActionsTest.php diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 318e060..fa9ca35 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -839,6 +839,7 @@ @forelse(($recentPlatformOrders ?? []) as $po) @php $poShowUrl = \App\Support\BackUrl::withBack('/admin/platform-orders/' . $po->id, $selfWithoutBack); + $poShowGovernanceUrl = \App\Support\BackUrl::withBackAndFragment('/admin/platform-orders/' . $po->id, $selfWithoutBack, 'order-governance-actions'); $hasReceiptEvidence = (data_get($po->meta, 'payment_summary.total_amount') !== null) || (data_get($po->meta, 'payment_receipts.0.amount') !== null); @@ -988,7 +989,7 @@ @elseif($syncStatusText === '成功') {{ $syncStatusText }} @else - {{ $syncStatusText }} + {{ $syncStatusText }} @endif @@ -999,7 +1000,7 @@ @elseif($bmpaStatusText === '成功' && $scanGoBmpaSuccessUrl !== '') {{ $bmpaStatusText }} @else - {{ $bmpaStatusText }} + {{ $bmpaStatusText }} @endif diff --git a/resources/views/admin/platform_orders/show.blade.php b/resources/views/admin/platform_orders/show.blade.php index cf215fb..c9f7ecc 100644 --- a/resources/views/admin/platform_orders/show.blade.php +++ b/resources/views/admin/platform_orders/show.blade.php @@ -261,7 +261,7 @@ $markPaidBlockedByReceiptMismatch = $receiptCents > 0 && abs($receiptCents - $expectedCents) >= $tolCents; @endphp -
+
@csrf diff --git a/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineBmpaNoneShouldLinkToOrderGovernanceActionsTest.php b/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineBmpaNoneShouldLinkToOrderGovernanceActionsTest.php new file mode 100644 index 0000000..c47e56b --- /dev/null +++ b/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineBmpaNoneShouldLinkToOrderGovernanceActionsTest.php @@ -0,0 +1,75 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_recent_platform_orders_scanline_bmpa_none_should_link_to_order_governance_actions(): void + { + $this->loginAsPlatformAdmin(); + + // 清理 seed 订单,避免最近订单列表被 seed 污染导致断言不稳定。 + PlatformOrder::query()->delete(); + + $merchant = Merchant::query()->firstOrFail(); + $platformAdminId = (int) Admin::query()->where('email', 'platform.admin@demo.local')->value('id'); + + $plan = Plan::query()->create([ + 'code' => 'dash_recent_order_scanline_bmpa_none_plan', + 'name' => '仪表盘扫描行BMPA无直达测试套餐', + 'billing_cycle' => 'monthly', + 'price' => 10, + 'list_price' => 10, + 'status' => 'active', + 'sort' => 10, + 'published_at' => now(), + ]); + + PlatformOrder::query()->create([ + 'merchant_id' => $merchant->id, + 'plan_id' => $plan->id, + 'site_subscription_id' => null, + 'created_by_admin_id' => $platformAdminId ?: null, + 'order_no' => 'PO_DASH_SCANLINE_BMPA_NONE_0001', + 'order_type' => 'new_purchase', + 'status' => 'pending', + 'payment_status' => 'paid', + 'payable_amount' => 10, + 'paid_amount' => 10, + 'placed_at' => now(), + 'paid_at' => now(), + 'meta' => [ + // 无 batch_mark_paid_and_activate / 无 error => 预期扫描行显示“BMPA:无” + ], + ]); + + $res = $this->get('/admin'); + $res->assertOk(); + + $res->assertSee('PO_DASH_SCANLINE_BMPA_NONE_0001'); + + // “BMPA:无”应可直达订单详情的治理动作区(#order-governance-actions) + $res->assertSee('BMPA:', false); + $res->assertSee('', false); + $res->assertSee('#order-governance-actions', false); + } +} diff --git a/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineSyncNoneShouldLinkToOrderGovernanceActionsTest.php b/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineSyncNoneShouldLinkToOrderGovernanceActionsTest.php new file mode 100644 index 0000000..6a98bb5 --- /dev/null +++ b/tests/Feature/AdminDashboardRecentPlatformOrdersScanlineSyncNoneShouldLinkToOrderGovernanceActionsTest.php @@ -0,0 +1,75 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_recent_platform_orders_scanline_sync_none_should_link_to_order_governance_actions(): void + { + $this->loginAsPlatformAdmin(); + + // 清理 seed 订单,避免最近订单列表被 seed 污染导致断言不稳定。 + PlatformOrder::query()->delete(); + + $merchant = Merchant::query()->firstOrFail(); + $platformAdminId = (int) Admin::query()->where('email', 'platform.admin@demo.local')->value('id'); + + $plan = Plan::query()->create([ + 'code' => 'dash_recent_order_scanline_sync_none_plan', + 'name' => '仪表盘扫描行同步无直达测试套餐', + 'billing_cycle' => 'monthly', + 'price' => 10, + 'list_price' => 10, + 'status' => 'active', + 'sort' => 10, + 'published_at' => now(), + ]); + + PlatformOrder::query()->create([ + 'merchant_id' => $merchant->id, + 'plan_id' => $plan->id, + 'site_subscription_id' => null, + 'created_by_admin_id' => $platformAdminId ?: null, + 'order_no' => 'PO_DASH_SCANLINE_SYNC_NONE_0001', + 'order_type' => 'new_purchase', + 'status' => 'pending', + 'payment_status' => 'paid', + 'payable_amount' => 10, + 'paid_amount' => 10, + 'placed_at' => now(), + 'paid_at' => now(), + 'meta' => [ + // 无 subscription_activation / 无 error => 预期扫描行显示“同步:无” + ], + ]); + + $res = $this->get('/admin'); + $res->assertOk(); + + $res->assertSee('PO_DASH_SCANLINE_SYNC_NONE_0001'); + + // “同步:无”应可直达订单详情的治理动作区(#order-governance-actions) + $res->assertSee('同步:', false); + $res->assertSee('', false); + $res->assertSee('#order-governance-actions', false); + } +}