From f7111e394013e819a7186b7211cd6f8435f35394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Sat, 14 Mar 2026 04:35:44 +0000 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E5=B9=B3=E5=8F=B0=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=BF=AB=E6=8D=B7=E7=AD=9B=E9=80=89=E4=BF=9D=E7=95=99?= =?UTF-8?q?=20lead=5Fid=20=E4=B8=8A=E4=B8=8B=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/platform_orders/index.blade.php | 2 + ...xQuickFilterLinksKeepLeadIdContextTest.php | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepLeadIdContextTest.php diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index a8c5e73..68864c9 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -115,6 +115,8 @@ 'site_subscription_id' => 1, 'back' => 1, 'keyword' => 1, + // 线索联动:从开通线索跳转来的上下文应保留(避免快捷筛选跳走后丢上下文) + 'lead_id' => 1, ]; $q = array_intersect_key(request()->query(), $contextKeys); diff --git a/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepLeadIdContextTest.php b/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepLeadIdContextTest.php new file mode 100644 index 0000000..6920e2f --- /dev/null +++ b/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepLeadIdContextTest.php @@ -0,0 +1,59 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_quick_filter_links_should_keep_lead_id_context(): void + { + $this->loginAsPlatformAdmin(); + + $res = $this->get('/admin/platform-orders?lead_id=12&merchant_id=2&plan_id=3&site_subscription_id=4&page=9&back=%2Fadmin%2Fplans&syncable_only=1'); + $res->assertOk(); + + $html = (string) $res->getContent(); + + preg_match_all('/href="([^"]+)"/', $html, $m); + $hrefs = $m[1] ?? []; + + // 找到“待支付”的快捷筛选链接:payment_status=unpaid + $unpaidLinks = array_values(array_filter($hrefs, function ($u) { + return str_contains($u, '/admin/platform-orders') + && str_contains($u, 'payment_status=unpaid') + && !str_contains($u, 'status=pending'); + })); + + $this->assertGreaterThanOrEqual(1, count($unpaidLinks)); + + $parts = parse_url($unpaidLinks[0]); + parse_str($parts['query'] ?? '', $q); + + // 应保留 lead_id 上下文 + $this->assertSame('12', (string) ($q['lead_id'] ?? '')); + + // 其它上下文也应保留 + $this->assertSame('2', (string) ($q['merchant_id'] ?? '')); + $this->assertSame('3', (string) ($q['plan_id'] ?? '')); + $this->assertSame('4', (string) ($q['site_subscription_id'] ?? '')); + $this->assertSame('/admin/plans', (string) ($q['back'] ?? '')); + + // 并且不应携带 page/syncable_only + $this->assertArrayNotHasKey('page', $q); + $this->assertArrayNotHasKey('syncable_only', $q); + } +}