From 88347d11852f3e324085142fa4216a849ff7e542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Mon, 16 Mar 2026 18:25:44 +0800 Subject: [PATCH] fix(admin-dashboard): billing workbench links use selfWithoutBack for back param --- resources/views/admin/dashboard.blade.php | 18 +++++----- ...benchLinksShouldUseSelfWithoutBackTest.php | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 tests/Feature/AdminDashboardBillingWorkbenchLinksShouldUseSelfWithoutBackTest.php diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index b1f3dc3..19f9622 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -5,24 +5,22 @@ @section('content') @php - $incomingBack = (string) request()->query('back', ''); - $safeBackForLinks = \App\Support\BackUrl::sanitizeForLinks($incomingBack); - // 用于构建“从仪表盘跳到其它治理页后可返回仪表盘”的 back $selfWithoutBack = \App\Support\BackUrl::selfWithoutBack(); + // 重要:从仪表盘跳转到治理页时,应默认返回“仪表盘”本身(而不是沿用进入仪表盘时的 back)。 $billingEntryLinks = [ - 'platform_orders' => \App\Support\BackUrl::withBack('/admin/platform-orders', $safeBackForLinks), - 'site_subscriptions' => \App\Support\BackUrl::withBack('/admin/site-subscriptions', $safeBackForLinks), - 'plans' => \App\Support\BackUrl::withBack('/admin/plans', $safeBackForLinks), + 'platform_orders' => \App\Support\BackUrl::withBack('/admin/platform-orders', $selfWithoutBack), + 'site_subscriptions' => \App\Support\BackUrl::withBack('/admin/site-subscriptions', $selfWithoutBack), + 'plans' => \App\Support\BackUrl::withBack('/admin/plans', $selfWithoutBack), ]; $platformOrdersQuickLinks = [ - 'unpaid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=unpaid&status=pending', $safeBackForLinks), + 'unpaid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=unpaid&status=pending', $selfWithoutBack), // 待生效:paid + pending,并显式锁定 sync_status=unsynced(排除同步失败等异常单) - 'paid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=paid&status=pending&sync_status=unsynced', $safeBackForLinks), - 'syncable_only' => \App\Support\BackUrl::withBack('/admin/platform-orders?syncable_only=1', $safeBackForLinks), - 'sync_failed' => \App\Support\BackUrl::withBack('/admin/platform-orders?sync_status=failed', $safeBackForLinks), + 'paid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=paid&status=pending&sync_status=unsynced', $selfWithoutBack), + 'syncable_only' => \App\Support\BackUrl::withBack('/admin/platform-orders?syncable_only=1', $selfWithoutBack), + 'sync_failed' => \App\Support\BackUrl::withBack('/admin/platform-orders?sync_status=failed', $selfWithoutBack), ]; @endphp diff --git a/tests/Feature/AdminDashboardBillingWorkbenchLinksShouldUseSelfWithoutBackTest.php b/tests/Feature/AdminDashboardBillingWorkbenchLinksShouldUseSelfWithoutBackTest.php new file mode 100644 index 0000000..83cdeb3 --- /dev/null +++ b/tests/Feature/AdminDashboardBillingWorkbenchLinksShouldUseSelfWithoutBackTest.php @@ -0,0 +1,34 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_billing_workbench_links_should_use_self_without_back(): void + { + $this->loginAsPlatformAdmin(); + + // 模拟“带 back 进入仪表盘”的场景;仪表盘内部入口应仍返回 /admin(selfWithoutBack),而不是沿用 incoming back。 + $res = $this->get('/admin?back=/admin/platform-orders'); + $res->assertOk(); + + // 断言:工作台入口链接应带 back=%2Fadmin,而不是 back=%2Fadmin%2Fplatform-orders + $res->assertSee('back=%2Fadmin', false); + $res->assertDontSee('back=%2Fadmin%2Fplatform-orders', false); + } +}