jqh 5 years ago
parent
commit
2f4d70fe61
2 changed files with 31 additions and 6 deletions
  1. 6 4
      src/Form/Builder.php
  2. 25 2
      src/Support/Helper.php

+ 6 - 4
src/Form/Builder.php

@@ -10,6 +10,7 @@ use Dcat\Admin\Form;
 use Dcat\Admin\Form\Field\Hidden;
 use Dcat\Admin\SimpleGrid;
 use Dcat\Admin\Support\Helper;
+use Dcat\Admin\Widgets\DialogForm;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Collection;
@@ -682,11 +683,12 @@ class Builder
             return;
         }
 
-        if (Str::contains($previous, url($this->getResource()))) {
+        if (
+            Str::contains($previous, url($this->getResource()))
+            && ! Helper::urlHasQuery($previous, [SimpleGrid::QUERY_NAME, DialogForm::QUERY_NAME])
+        ) {
             $this->addHiddenField(
-                (new Hidden(static::PREVIOUS_URL_KEY))->value(
-                    Helper::urlWithoutQuery($previous, SimpleGrid::QUERY_NAME)
-                )
+                (new Hidden(static::PREVIOUS_URL_KEY))->value($previous)
             );
         }
     }

+ 25 - 2
src/Support/Helper.php

@@ -212,8 +212,6 @@ class Helper
     }
 
     /**
-     * Get full url without query strings.
-     *
      * @param Arrayable|array|string $keys
      *
      * @return string
@@ -223,6 +221,31 @@ class Helper
         return static::urlWithoutQuery(request()->fullUrl(), $keys);
     }
 
+    /**
+     * @param string       $url
+     * @param string|array $keys
+     *
+     * @return bool
+     */
+    public static function urlHasQuery(string $url, $keys)
+    {
+        $value = explode('?', $url);
+
+        if (empty($value[1])) {
+            return false;
+        }
+
+        parse_str($value[1], $query);
+
+        foreach ((array) $keys as $key) {
+            if (Arr::has($query, $key)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     /**
      * 匹配请求路径.
      *