Browse Source

Merge pull request #121 from youyingxiang/master

行内编辑的优化
Jiang Qinghua 5 years ago
parent
commit
1be51844e2
1 changed files with 26 additions and 16 deletions
  1. 26 16
      src/Grid/Displayers/Editable.php

+ 26 - 16
src/Grid/Displayers/Editable.php

@@ -14,11 +14,12 @@ class Editable extends AbstractDisplayer
         $this->addStyle();
 
         return <<<HTML
-<div class="{$this->selector}">
-    <span data-value="{$this->value}" data-name="{$this->column->getName()}" data-id="{$this->getKey()}" data-url="{$this->getUrl()}" >
-        {$this->value}
-    </span>
-</div>
+            <div>
+                <span class="{$this->selector}" >
+                    {$this->value}
+                </span>
+                 <i class="feather icon-check btn-outline-primary hidden" data-value="{$this->value}" data-name="{$this->column->getName()}" data-id="{$this->getKey()}" data-url="{$this->getUrl()}"></i>
+            </div>
 HTML;
     }
 
@@ -34,6 +35,7 @@ HTML;
         Admin::style(
             <<<CSS
 .grid-editable{border-bottom:dashed 1px $color;color: $color;display: inline-block}
+.grid-editable,.icon-check{margin-left: 0.4rem}
 CSS
         );
     }
@@ -41,15 +43,20 @@ CSS
     protected function addScript()
     {
         $script = <<<JS
-            $(".{$this->selector} span").on("click",function() {
+            $(".{$this->selector}").on("click",function() {
                 $(this).attr('contenteditable', true);
-            }).on("blur",function() {
+                $(this).next().removeClass("hidden");
+            })
+            $(".icon-check").on("click",function() {
                 var obj = $(this);
-                var url = obj.attr('data-url').trim();
-                var name = obj.attr('data-name').trim();
+                var url = obj.attr('data-url');
+                var name = obj.attr('data-name');
                 var old_value = obj.attr('data-value').trim();
-                var value = obj.html().trim();
+                var rebr = new RegExp("<br>","g");
+                var renbsp = new RegExp("&nbsp;","g");
+                var value = obj.prev().html().replace(rebr,'').replace(renbsp,'').trim();
                 if (value == old_value) {
+                    obj.addClass("hidden").prev().attr('contenteditable', false);
                     return;
                 }
                 
@@ -64,19 +71,20 @@ CSS
                     type: "POST",
                     data: data,
                     success: function (data) {
-                        Dcat.NP.done();
                         if (data.status) {
-                            obj.attr('data-value',value);
+                            obj.attr('data-value',value).addClass("hidden").prev().html(value).attr('contenteditable', false);
                             Dcat.success(data.message);
                         } else {
-                            obj.html(old_value);
+                            obj.prev().html(old_value);
                             Dcat.error(data.message);
                         }
                     },
                     error:function(a,b,c) {
-                      Dcat.NP.done();
-                      obj.html(old_value);
-                      Dcat.handleAjaxError(a, b, c);
+                        obj.prev().html(old_value);
+                        Dcat.handleAjaxError(a, b, c);
+                    },
+                    complete:function(a,b) {
+                        Dcat.NP.done();
                     }
                 });
             })
@@ -84,4 +92,6 @@ JS;
 
         Admin::script($script);
     }
+
+
 }