From 2fecaeae0ba564f990da9f41dcc0bf686e3c4bcd Mon Sep 17 00:00:00 2001
From: Karson <karsonzhang@163.com>
Date: Tue, 1 Sep 2020 21:36:50 +0800
Subject: [PATCH] 新增开关切换确认提示功能 优化拖拽排序

---
 application/admin/controller/Ajax.php            |  3 +++
 application/admin/view/general/config/index.html |  4 ++++
 public/assets/js/require-backend.min.js          | 53 +++++++++++++++++++++++++++++++++++++++--------------
 public/assets/js/require-form.js                 | 35 +++++++++++++++++++++++------------
 public/assets/js/require-table.js                | 18 ++++++++++++++++--
 5 files changed, 85 insertions(+), 28 deletions(-)

diff --git a/application/admin/controller/Ajax.php b/application/admin/controller/Ajax.php
index 160677c..8ea11e0 100644
--- a/application/admin/controller/Ajax.php
+++ b/application/admin/controller/Ajax.php
@@ -173,6 +173,9 @@ class Ajax extends Backend
                     $offset = isset($temp[$m - 1]) ? $temp[$m - 1] : $sour_id;
                 }
             }
+            if (!isset($weighdata[$offset])) {
+                continue;
+            }
             $weighids[$n] = $weighdata[$offset];
             Db::name($table)->where($prikey, $n)->update([$field => $weighdata[$offset]]);
         }
diff --git a/application/admin/view/general/config/index.html b/application/admin/view/general/config/index.html
index fea64f4..1f7bd35 100644
--- a/application/admin/view/general/config/index.html
+++ b/application/admin/view/general/config/index.html
@@ -93,14 +93,18 @@
                                             <input {$item.extend_html} type="number" name="row[{$item.name}]" value="{$item.value|htmlentities}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
                                             {/case}
                                             {case checkbox}
+                                            <div class="checkbox">
                                             {foreach name="item.content" item="vo"}
                                             <label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
                                             {/foreach}
+                                            </div>
                                             {/case}
                                             {case radio}
+                                            <div class="radio">
                                             {foreach name="item.content" item="vo"}
                                             <label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
                                             {/foreach}
+                                            </div>
                                             {/case}
                                             {case value="select" break="0"}{/case}
                                             {case value="selects"}
diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js
index 0a11419..fcc9c79 100644
--- a/public/assets/js/require-backend.min.js
+++ b/public/assets/js/require-backend.min.js
@@ -10378,20 +10378,31 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
                     if ($(this).hasClass("disabled")) {
                         return false;
                     }
-                    var input = $(this).prev("input");
-                    input = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : input;
-                    if (input.size() > 0) {
-                        var yes = $(this).data("yes");
-                        var no = $(this).data("no");
-                        if (input.val() == yes) {
-                            input.val(no);
-                            $("i", this).addClass("fa-flip-horizontal text-gray");
-                        } else {
-                            input.val(yes);
-                            $("i", this).removeClass("fa-flip-horizontal text-gray");
+                    var switcher = $.proxy(function () {
+                        var input = $(this).prev("input");
+                        input = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : input;
+                        if (input.size() > 0) {
+                            var yes = $(this).data("yes");
+                            var no = $(this).data("no");
+                            if (input.val() == yes) {
+                                input.val(no);
+                                $("i", this).addClass("fa-flip-horizontal text-gray");
+                            } else {
+                                input.val(yes);
+                                $("i", this).removeClass("fa-flip-horizontal text-gray");
+                            }
+                            input.trigger('change');
                         }
-                        input.trigger('change');
+                    }, this);
+                    if (typeof $(this).data("confirm") !== 'undefined') {
+                        Layer.confirm($(this).data("confirm"), function (index) {
+                            switcher();
+                            Layer.close(index);
+                        });
+                    } else {
+                        switcher();
                     }
+
                     return false;
                 });
             },
@@ -11951,7 +11962,17 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                 });
                 table.on("click", "[data-id].btn-change", function (e) {
                     e.preventDefault();
-                    Table.api.multi($(this).data("action") ? $(this).data("action") : '', [$(this).data("id")], table, this);
+                    var switcher = $.proxy(function () {
+                        Table.api.multi($(this).data("action") ? $(this).data("action") : '', [$(this).data("id")], table, this);
+                    }, this);
+                    if (typeof $(this).data("confirm") !== 'undefined') {
+                        Layer.confirm($(this).data("confirm"), function (index) {
+                            switcher();
+                            Layer.close(index);
+                        });
+                    } else {
+                        switcher();
+                    }
                 });
                 table.on("click", "[data-id].btn-edit", function (e) {
                     e.preventDefault();
@@ -12131,12 +12152,16 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                     var yes = typeof this.yes !== 'undefined' ? this.yes : 1;
                     var no = typeof this.no !== 'undefined' ? this.no : 0;
                     var url = typeof this.url !== 'undefined' ? this.url : '';
+                    var confirm = '';
                     var disable = false;
+                    if (typeof this.confirm !== "undefined") {
+                        confirm = typeof this.confirm === "function" ? this.confirm.call(this, value, row, index) : this.confirm;
+                    }
                     if (typeof this.disable !== "undefined") {
                         disable = typeof this.disable === "function" ? this.disable.call(this, value, row, index) : this.disable;
                     }
                     return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change " + (disable ? 'btn disabled' : '') + "' data-id='"
-                        + row[pk] + "' " + (url ? "data-url='" + url + "'" : "") + " data-params='" + this.field + "=" + (value == yes ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
+                        + row[pk] + "' " + (url ? "data-url='" + url + "'" : "") + (confirm ? "data-confirm='" + confirm + "'" : "") + " data-params='" + this.field + "=" + (value == yes ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
                 },
                 url: function (value, row, index) {
                     value = value === null ? '' : value.toString();
diff --git a/public/assets/js/require-form.js b/public/assets/js/require-form.js
index 0cbbda4..0f2bb28 100755
--- a/public/assets/js/require-form.js
+++ b/public/assets/js/require-form.js
@@ -382,20 +382,31 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U
                     if ($(this).hasClass("disabled")) {
                         return false;
                     }
-                    var input = $(this).prev("input");
-                    input = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : input;
-                    if (input.size() > 0) {
-                        var yes = $(this).data("yes");
-                        var no = $(this).data("no");
-                        if (input.val() == yes) {
-                            input.val(no);
-                            $("i", this).addClass("fa-flip-horizontal text-gray");
-                        } else {
-                            input.val(yes);
-                            $("i", this).removeClass("fa-flip-horizontal text-gray");
+                    var switcher = $.proxy(function () {
+                        var input = $(this).prev("input");
+                        input = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : input;
+                        if (input.size() > 0) {
+                            var yes = $(this).data("yes");
+                            var no = $(this).data("no");
+                            if (input.val() == yes) {
+                                input.val(no);
+                                $("i", this).addClass("fa-flip-horizontal text-gray");
+                            } else {
+                                input.val(yes);
+                                $("i", this).removeClass("fa-flip-horizontal text-gray");
+                            }
+                            input.trigger('change');
                         }
-                        input.trigger('change');
+                    }, this);
+                    if (typeof $(this).data("confirm") !== 'undefined') {
+                        Layer.confirm($(this).data("confirm"), function (index) {
+                            switcher();
+                            Layer.close(index);
+                        });
+                    } else {
+                        switcher();
                     }
+
                     return false;
                 });
             },
diff --git a/public/assets/js/require-table.js b/public/assets/js/require-table.js
index 42e0bcb..0903901 100644
--- a/public/assets/js/require-table.js
+++ b/public/assets/js/require-table.js
@@ -435,7 +435,17 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                 });
                 table.on("click", "[data-id].btn-change", function (e) {
                     e.preventDefault();
-                    Table.api.multi($(this).data("action") ? $(this).data("action") : '', [$(this).data("id")], table, this);
+                    var switcher = $.proxy(function () {
+                        Table.api.multi($(this).data("action") ? $(this).data("action") : '', [$(this).data("id")], table, this);
+                    }, this);
+                    if (typeof $(this).data("confirm") !== 'undefined') {
+                        Layer.confirm($(this).data("confirm"), function (index) {
+                            switcher();
+                            Layer.close(index);
+                        });
+                    } else {
+                        switcher();
+                    }
                 });
                 table.on("click", "[data-id].btn-edit", function (e) {
                     e.preventDefault();
@@ -615,12 +625,16 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                     var yes = typeof this.yes !== 'undefined' ? this.yes : 1;
                     var no = typeof this.no !== 'undefined' ? this.no : 0;
                     var url = typeof this.url !== 'undefined' ? this.url : '';
+                    var confirm = '';
                     var disable = false;
+                    if (typeof this.confirm !== "undefined") {
+                        confirm = typeof this.confirm === "function" ? this.confirm.call(this, value, row, index) : this.confirm;
+                    }
                     if (typeof this.disable !== "undefined") {
                         disable = typeof this.disable === "function" ? this.disable.call(this, value, row, index) : this.disable;
                     }
                     return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change " + (disable ? 'btn disabled' : '') + "' data-id='"
-                        + row[pk] + "' " + (url ? "data-url='" + url + "'" : "") + " data-params='" + this.field + "=" + (value == yes ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
+                        + row[pk] + "' " + (url ? "data-url='" + url + "'" : "") + (confirm ? "data-confirm='" + confirm + "'" : "") + " data-params='" + this.field + "=" + (value == yes ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
                 },
                 url: function (value, row, index) {
                     value = value === null ? '' : value.toString();
--
libgit2 0.24.0