Bläddra i källkod

表单保存跳转

update
jqh 5 år sedan
förälder
incheckning
c115068f62

+ 6 - 4
resources/assets/dcat/js/extensions/Form.js

@@ -21,8 +21,8 @@ class Form {
             tabSelector: '.tab-pane',
             // 错误信息模板
             errorTemplate: '<label class="control-label" for="inputError"><i class="fa fa-times-circle-o"></i> {message}</label><br/>',
-            // 保存成功后不允许跳转
-            disableRedirect: false,
+            // 保存成功后自动跳转
+            autoRedirect: false,
             // 不允许自动移除表单错误信息
             disableAutoRemoveError: false,
             // 表单提交之前事件监听,返回false可以中止表单继续提交
@@ -78,7 +78,7 @@ class Form {
 
                 Dcat.success(response.message || 'Save succeeded!');
 
-                if (options.disableRedirect || response.redirect === false) {
+                if (response.redirect === false) {
                     return;
                 }
 
@@ -86,7 +86,9 @@ class Form {
                     return Dcat.reload(response.redirect);
                 }
 
-                history.back(-1);
+                if (options.autoRedirect) {
+                    history.back(-1);
+                }
             },
             error: function (response) {
                 Dcat.NP.done();

+ 6 - 4
resources/dist/dcat/js/dcat-app.js

@@ -1550,8 +1550,8 @@ var Form = /*#__PURE__*/function () {
       tabSelector: '.tab-pane',
       // 错误信息模板
       errorTemplate: '<label class="control-label" for="inputError"><i class="fa fa-times-circle-o"></i> {message}</label><br/>',
-      // 保存成功后不允许跳转
-      disableRedirect: false,
+      // 保存成功后自动跳转
+      autoRedirect: false,
       // 不允许自动移除表单错误信息
       disableAutoRemoveError: false,
       // 表单提交之前事件监听,返回false可以中止表单继续提交
@@ -1607,7 +1607,7 @@ var Form = /*#__PURE__*/function () {
 
           Dcat.success(response.message || 'Save succeeded!');
 
-          if (options.disableRedirect || response.redirect === false) {
+          if (response.redirect === false) {
             return;
           }
 
@@ -1615,7 +1615,9 @@ var Form = /*#__PURE__*/function () {
             return Dcat.reload(response.redirect);
           }
 
-          history.back(-1);
+          if (options.autoRedirect) {
+            history.back(-1);
+          }
         },
         error: function error(response) {
           Dcat.NP.done();

+ 10 - 2
src/Form.php

@@ -567,6 +567,10 @@ class Form implements Renderable
      */
     public function store(?array $data = null, $redirectTo = null)
     {
+        if ($data) {
+            $this->request->replace($data);
+        }
+
         $data = $data ?: $this->request->all();
 
         if ($response = $this->beforeStore($data)) {
@@ -728,6 +732,10 @@ class Form implements Renderable
         ?array $data = null,
         $redirectTo = null
     ) {
+        if ($data) {
+            $this->request->replace($data);
+        }
+
         $data = $data ?: $this->request->all();
 
         if ($response = $this->beforeUpdate($id, $data)) {
@@ -800,7 +808,7 @@ class Form implements Renderable
      * @param $key
      * @param $redirectTo
      *
-     * @return string|false
+     * @return string|null
      */
     public function redirectUrl($key, $redirectTo = null)
     {
@@ -814,7 +822,7 @@ class Form implements Renderable
         if ($this->request->get('after-save') == 1) {
             // continue editing
             if ($this->builder->isEditing() && $this->isAjaxRequest()) {
-                return false;
+                return null;
             }
 
             return rtrim($resourcesPath, '/')."/{$key}/edit";

+ 2 - 2
src/Form/Builder.php

@@ -847,12 +847,12 @@ EOF;
 
     f.find('button.submit').click(function () {
         var t = $(this);
-    console.log(12312321, f);
+
         Dcat.Form({
             form: f,
             before: function () {
                 f.validator('validate');
-        console.log(567777, f);
+
                 if (f.find('.has-error').length > 0) {
                     return false;
                 }

+ 2 - 2
src/Traits/HasFormResponse.php

@@ -16,13 +16,13 @@ trait HasFormResponse
      *
      * @return bool|\Illuminate\Http\JsonResponse
      */
-    public function ajaxResponse($message, $redirect = null, bool $status = true)
+    public function ajaxResponse(?string $message, ?string $redirect = null, bool $status = true)
     {
         if ($this->isAjaxRequest()) {
             return response()->json([
                 'status'   => $status,
                 'message'  => $message,
-                'redirect' => admin_url($redirect),
+                'redirect' => $redirect ? admin_url($redirect) : '',
             ]);
         }