diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index c1e7e72..d3a3e30 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -8,6 +8,12 @@ $incomingBack = (string) request()->query('back', ''); $safeBackForLinks = \App\Support\BackUrl::sanitizeForLinks($incomingBack); + $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), + ]; + $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), @@ -39,9 +45,9 @@
聚焦收费闭环的日常治理入口:订单 → 订阅 → 套餐。
- 进入平台订单 - 进入订阅管理 - 进入套餐管理 + 进入平台订单 + 进入订阅管理 + 进入套餐管理
diff --git a/tests/Feature/AdminDashboardBillingWorkbenchLinksCarrySafeBackTest.php b/tests/Feature/AdminDashboardBillingWorkbenchLinksCarrySafeBackTest.php new file mode 100644 index 0000000..f184d14 --- /dev/null +++ b/tests/Feature/AdminDashboardBillingWorkbenchLinksCarrySafeBackTest.php @@ -0,0 +1,37 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_dashboard_billing_workbench_entry_links_should_carry_safe_back_and_not_escape_ampersand(): void + { + $this->loginAsPlatformAdmin(); + + $res = $this->get('/admin?back=' . urlencode('/admin/plans?status=active')); + $res->assertOk(); + + $res->assertSee('收费工作台'); + + $res->assertSee('href="/admin/platform-orders?back=%2Fadmin%2Fplans%3Fstatus%3Dactive"', false); + $res->assertSee('href="/admin/site-subscriptions?back=%2Fadmin%2Fplans%3Fstatus%3Dactive"', false); + $res->assertSee('href="/admin/plans?back=%2Fadmin%2Fplans%3Fstatus%3Dactive"', false); + + $res->assertDontSee('&back=', false); + } +}