diff --git a/app/Support/BackUrl.php b/app/Support/BackUrl.php index b92997c..feccdff 100644 --- a/app/Support/BackUrl.php +++ b/app/Support/BackUrl.php @@ -68,6 +68,30 @@ class BackUrl return $url; } + /** + * 给指定站内相对路径附加安全 back(若 back 为空则原样返回)。 + * + * 用途:列表页“全部/返回来源”等需要清空筛选但保留 back 的场景。 + */ + public static function withBack(string $path, string $safeBackForLinks = ''): string + { + $path = (string) $path; + + if ($safeBackForLinks === '') { + return $path; + } + + // 仅支持站内相对路径;若调用方传入了异常值,这里不做拼接,直接返回原 path。 + if ($path === '' || !str_starts_with($path, '/')) { + return $path; + } + + // 若 path 已带 query,则追加 &back=;否则追加 ?back= + $sep = str_contains($path, '?') ? '&' : '?'; + + return $path . $sep . \Illuminate\Support\Arr::query(['back' => $safeBackForLinks]); + } + /** * 当前路径下的“快捷筛选”链接构造器: * - 仅保留指定上下文键(例如 merchant_id/plan_id/keyword/lead_id 等) diff --git a/resources/views/admin/plans/index.blade.php b/resources/views/admin/plans/index.blade.php index 1a1bbae..e4b08a9 100644 --- a/resources/views/admin/plans/index.blade.php +++ b/resources/views/admin/plans/index.blade.php @@ -55,10 +55,7 @@ }; // “全部”:清空筛选,但保留安全 back(用于返回来源页) - $allUrl = '/admin/plans'; - if ($safeBackForLinks !== '') { - $allUrl .= '?' . \Illuminate\Support\Arr::query(['back' => $safeBackForLinks]); - } + $allUrl = \App\Support\BackUrl::withBack('/admin/plans', $safeBackForLinks); @endphp
diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index baa9fa6..0c69493 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -141,10 +141,7 @@ // “全部”:清空筛选,但保留 back(用于返回来源页) // “全部”:清空筛选,但保留安全 back(用于返回来源页) - $allUrl = '/admin/platform-orders'; - if ($safeBackForLinks !== '') { - $allUrl .= '?' . \Illuminate\Support\Arr::query(['back' => $safeBackForLinks]); - } + $allUrl = \App\Support\BackUrl::withBack('/admin/platform-orders', $safeBackForLinks); @endphp