diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 5444851..c1e7e72 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -4,6 +4,17 @@ @section('page_title', '总台管理仪表盘') @section('content') +@php + $incomingBack = (string) request()->query('back', ''); + $safeBackForLinks = \App\Support\BackUrl::sanitizeForLinks($incomingBack); + + $platformOrdersQuickLinks = [ + 'unpaid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=unpaid&status=pending', $safeBackForLinks), + 'paid_pending' => \App\Support\BackUrl::withBack('/admin/platform-orders?payment_status=paid&status=pending', $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), + ]; +@endphp

欢迎回来,{{ $adminName }}。当前入口已明确为 总台管理,用于平台运营方统一查看站点、渠道、全局配置和平台级业务数据。

@@ -36,10 +47,10 @@
diff --git a/tests/Feature/AdminDashboardBillingWorkbenchQuickLinksShouldUseBackUrlTest.php b/tests/Feature/AdminDashboardBillingWorkbenchQuickLinksShouldUseBackUrlTest.php new file mode 100644 index 0000000..053cffd --- /dev/null +++ b/tests/Feature/AdminDashboardBillingWorkbenchQuickLinksShouldUseBackUrlTest.php @@ -0,0 +1,38 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_quick_links_should_use_back_url_builder_and_not_escape_ampersand(): void + { + $this->loginAsPlatformAdmin(); + + // 给 dashboard 带一个安全 back,模拟从其它页面回到 dashboard 后再点治理入口 + $res = $this->get('/admin?back=' . urlencode('/admin/plans')); + $res->assertOk(); + + // 期望:链接里带 back=%2Fadmin%2Fplans 且 & 不被 escape 成 & + $res->assertSee('href="/admin/platform-orders?payment_status=unpaid&status=pending&back=%2Fadmin%2Fplans"', false); + $res->assertSee('href="/admin/platform-orders?payment_status=paid&status=pending&back=%2Fadmin%2Fplans"', false); + $res->assertSee('href="/admin/platform-orders?syncable_only=1&back=%2Fadmin%2Fplans"', false); + $res->assertSee('href="/admin/platform-orders?sync_status=failed&back=%2Fadmin%2Fplans"', false); + + $res->assertDontSee('&back=', false); + } +}