diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index 2dc1a27..0e74821 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -35,40 +35,74 @@

快捷筛选

用于运营快速定位当前需要处理的订单集合(口径基于筛选条件组合)。
+ + @php + // 快捷筛选:尽量保留当前筛选(站点/套餐/订阅ID/back 等),仅覆盖目标筛选字段,并清空 page。 + $buildQuickFilterUrl = function (array $overrides) { + $path = '/' . ltrim(request()->path(), '/'); + $q = request()->query(); + + // 强制清页码,避免“切筛选但还停留在老 page=xxx”导致空页 + unset($q['page']); + + foreach ($overrides as $k => $v) { + if ($v === null) { + unset($q[$k]); + continue; + } + $q[$k] = $v; + } + + if (count($q) === 0) { + return $path; + } + + return $path . '?' . \Illuminate\Support\Arr::query($q); + }; + + // “全部”:清空筛选,但保留 back(用于返回来源页) + $incomingBack = (string) request()->query('back', ''); + $safeBack = str_starts_with($incomingBack, '/') ? $incomingBack : ''; + $allUrl = '/admin/platform-orders'; + if ($safeBack !== '') { + $allUrl .= '?' . \Illuminate\Support\Arr::query(['back' => $safeBack]); + } + @endphp +
- 全部 + 全部 - 待支付 + 待支付 - 可BMPA处理 + 可BMPA处理 - 待生效 + 待生效 - 可同步订阅 + 可同步订阅 - 部分退款 + 部分退款 - 已退款 + 已退款 - 有回执 + 有回执 - 无回执 + 无回执 - 有退款 + 有退款 - 无退款 + 无退款 - 对账不一致 + 对账不一致 - 退款不一致 + 退款不一致 - BMPA失败 + BMPA失败 - 近24小时批量同步 + 近24小时批量同步 - 近24小时批量BMPA + 近24小时批量BMPA - 近24小时批量生效 + 近24小时批量生效
diff --git a/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepContextTest.php b/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepContextTest.php new file mode 100644 index 0000000..9ef39d3 --- /dev/null +++ b/tests/Feature/AdminPlatformOrderIndexQuickFilterLinksKeepContextTest.php @@ -0,0 +1,37 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_quick_filter_links_should_keep_context_and_clear_page(): void + { + $this->loginAsPlatformAdmin(); + + // 模拟:当前已筛选站点/套餐/订阅ID,并且带 page/back + $res = $this->get('/admin/platform-orders?merchant_id=2&plan_id=3&site_subscription_id=4&page=9&back=%2Fadmin%2Fplans'); + $res->assertOk(); + + // 以“待支付”为例:应保留 merchant_id/plan_id/site_subscription_id/back,同时覆盖 payment_status=unpaid,并清除 page + $res->assertSee('/admin/platform-orders?merchant_id=2&plan_id=3&site_subscription_id=4&back=%2Fadmin%2Fplans&payment_status=unpaid', false); + $res->assertDontSee('page=9', false); + + // “全部”应清空筛选,仅保留 back + $res->assertSee('/admin/platform-orders?back=%2Fadmin%2Fplans', false); + } +}