From b7300ea55866aeeb5f169b6dc5bfb5704fbfa039 Mon Sep 17 00:00:00 2001
From: Karson <karsonzhang@163.com>
Date: Thu, 21 Dec 2017 23:04:02 +0800
Subject: [PATCH] 修复表格在多个列头时buttons的事件可能不响应的BUG 移除表格按钮columnIndex,增加fieldIndex属性

---
 public/assets/js/backend.js             | 50 +++++++++++++++++++++++++++++++++++++++-----------
 public/assets/js/require-backend.min.js | 57 ++++++++++++++++++++++++++++++++++++++++++---------------
 public/assets/js/require-table.js       |  7 +++----
 3 files changed, 84 insertions(+), 30 deletions(-)

diff --git a/public/assets/js/backend.js b/public/assets/js/backend.js
index 8aca0a5..0d4bca8 100755
--- a/public/assets/js/backend.js
+++ b/public/assets/js/backend.js
@@ -113,12 +113,26 @@ define(['fast', 'moment'], function (Fast, Moment) {
             $(document).on('click', '.btn-dialog,.dialogit', function (e) {
                 var that = this;
                 var options = $.extend({}, $(that).data() || {});
-                if (typeof options.tableId !== 'undefined' && typeof options.columnIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
+                if (typeof options.tableId !== 'undefined' && typeof options.fieldIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
                     var tableOptions = $("#" + options.tableId).bootstrapTable('getOptions');
                     if (tableOptions) {
-                        var button = tableOptions.columns[0][options.columnIndex]['buttons'][options.buttonIndex];
-                        if (button && typeof button.callback === 'function') {
-                            options.callback = button.callback;
+                        var columnObj = null;
+                        $.each(tableOptions.columns, function (i, columns) {
+                            $.each(columns, function (j, column) {
+                                if (typeof column.fieldIndex !== 'undefined' && column.fieldIndex === options.fieldIndex) {
+                                    columnObj = column;
+                                    return false;
+                                }
+                            });
+                            if (columnObj) {
+                                return false;
+                            }
+                        });
+                        if (columnObj) {
+                            var button = columnObj['buttons'][options.buttonIndex];
+                            if (button && typeof button.callback === 'function') {
+                                options.callback = button.callback;
+                            }
                         }
                     }
                 }
@@ -159,15 +173,29 @@ define(['fast', 'moment'], function (Fast, Moment) {
                 var error = typeof options.error === 'function' ? options.error : null;
                 delete options.success;
                 delete options.error;
-                if (typeof options.tableId !== 'undefined' && typeof options.columnIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
+                if (typeof options.tableId !== 'undefined' && typeof options.fieldIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
                     var tableOptions = $("#" + options.tableId).bootstrapTable('getOptions');
                     if (tableOptions) {
-                        var button = tableOptions.columns[0][options.columnIndex]['buttons'][options.buttonIndex];
-                        if (button && typeof button.success === 'function') {
-                            success = button.success;
-                        }
-                        if (button && typeof button.error === 'function') {
-                            error = button.error;
+                        var columnObj = null;
+                        $.each(tableOptions.columns, function (i, columns) {
+                            $.each(columns, function (j, column) {
+                                if (typeof column.fieldIndex !== 'undefined' && column.fieldIndex === options.fieldIndex) {
+                                    columnObj = column;
+                                    return false;
+                                }
+                            });
+                            if (columnObj) {
+                                return false;
+                            }
+                        });
+                        if (columnObj) {
+                            var button = columnObj['buttons'][options.buttonIndex];
+                            if (button && typeof button.success === 'function') {
+                                success = button.success;
+                            }
+                            if (button && typeof button.error === 'function') {
+                                error = button.error;
+                            }
                         }
                     }
                 }
diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js
index 00e46a1..8679e87 100644
--- a/public/assets/js/require-backend.min.js
+++ b/public/assets/js/require-backend.min.js
@@ -6911,12 +6911,26 @@ define('backend',['fast', 'moment'], function (Fast, Moment) {
             $(document).on('click', '.btn-dialog,.dialogit', function (e) {
                 var that = this;
                 var options = $.extend({}, $(that).data() || {});
-                if (typeof options.tableId !== 'undefined' && typeof options.columnIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
+                if (typeof options.tableId !== 'undefined' && typeof options.fieldIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
                     var tableOptions = $("#" + options.tableId).bootstrapTable('getOptions');
                     if (tableOptions) {
-                        var button = tableOptions.columns[0][options.columnIndex]['buttons'][options.buttonIndex];
-                        if (button && typeof button.callback === 'function') {
-                            options.callback = button.callback;
+                        var columnObj = null;
+                        $.each(tableOptions.columns, function (i, columns) {
+                            $.each(columns, function (j, column) {
+                                if (typeof column.fieldIndex !== 'undefined' && column.fieldIndex === options.fieldIndex) {
+                                    columnObj = column;
+                                    return false;
+                                }
+                            });
+                            if (columnObj) {
+                                return false;
+                            }
+                        });
+                        if (columnObj) {
+                            var button = columnObj['buttons'][options.buttonIndex];
+                            if (button && typeof button.callback === 'function') {
+                                options.callback = button.callback;
+                            }
                         }
                     }
                 }
@@ -6957,15 +6971,29 @@ define('backend',['fast', 'moment'], function (Fast, Moment) {
                 var error = typeof options.error === 'function' ? options.error : null;
                 delete options.success;
                 delete options.error;
-                if (typeof options.tableId !== 'undefined' && typeof options.columnIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
+                if (typeof options.tableId !== 'undefined' && typeof options.fieldIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') {
                     var tableOptions = $("#" + options.tableId).bootstrapTable('getOptions');
                     if (tableOptions) {
-                        var button = tableOptions.columns[0][options.columnIndex]['buttons'][options.buttonIndex];
-                        if (button && typeof button.success === 'function') {
-                            success = button.success;
-                        }
-                        if (button && typeof button.error === 'function') {
-                            error = button.error;
+                        var columnObj = null;
+                        $.each(tableOptions.columns, function (i, columns) {
+                            $.each(columns, function (j, column) {
+                                if (typeof column.fieldIndex !== 'undefined' && column.fieldIndex === options.fieldIndex) {
+                                    columnObj = column;
+                                    return false;
+                                }
+                            });
+                            if (columnObj) {
+                                return false;
+                            }
+                        });
+                        if (columnObj) {
+                            var button = columnObj['buttons'][options.buttonIndex];
+                            if (button && typeof button.success === 'function') {
+                                success = button.success;
+                            }
+                            if (button && typeof button.error === 'function') {
+                                error = button.error;
+                            }
                         }
                     }
                 }
@@ -10005,9 +10033,8 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                 var options = table ? table.bootstrapTable('getOptions') : {};
                 var html = [];
                 var url, classname, icon, text, title, extend;
-                var columnIndex = options.columns[0].findIndex(function (element) {
-                    return element === column;
-                });
+                var fieldIndex = column.fieldIndex;
+
                 $.each(buttons, function (i, j) {
                     if (type === 'operate') {
                         if (j.name === 'dragsort' && typeof row[Table.config.dragsortfield] === 'undefined') {
@@ -10028,7 +10055,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                         refresh = j.refresh ? 'data-refresh="' + j.refresh + '"' : '';
                         confirm = j.confirm ? 'data-confirm="' + j.confirm + '"' : '';
                         extend = j.extend ? j.extend : '';
-                        html.push('<a href="' + url + '" class="' + classname + '" ' + (confirm ? confirm + ' ' : '') + (refresh ? refresh + ' ' : '') + extend + ' title="' + title + '" data-table-id="' + (table ? table.attr("id") : '') + '" data-column-index="' + columnIndex + '" data-row-index="' + index + '" data-button-index="' + i + '"><i class="' + icon + '"></i>' + (text ? ' ' + text : '') + '</a>');
+                        html.push('<a href="' + url + '" class="' + classname + '" ' + (confirm ? confirm + ' ' : '') + (refresh ? refresh + ' ' : '') + extend + ' title="' + title + '" data-table-id="' + (table ? table.attr("id") : '') + '" data-field-index="' + fieldIndex + '" data-row-index="' + index + '" data-button-index="' + i + '"><i class="' + icon + '"></i>' + (text ? ' ' + text : '') + '</a>');
                     }
                 });
                 return html.join(' ');
diff --git a/public/assets/js/require-table.js b/public/assets/js/require-table.js
index eebbf0c..5b5b23b 100644
--- a/public/assets/js/require-table.js
+++ b/public/assets/js/require-table.js
@@ -432,9 +432,8 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                 var options = table ? table.bootstrapTable('getOptions') : {};
                 var html = [];
                 var url, classname, icon, text, title, extend;
-                var columnIndex = options.columns[0].findIndex(function (element) {
-                    return element === column;
-                });
+                var fieldIndex = column.fieldIndex;
+
                 $.each(buttons, function (i, j) {
                     if (type === 'operate') {
                         if (j.name === 'dragsort' && typeof row[Table.config.dragsortfield] === 'undefined') {
@@ -455,7 +454,7 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                         refresh = j.refresh ? 'data-refresh="' + j.refresh + '"' : '';
                         confirm = j.confirm ? 'data-confirm="' + j.confirm + '"' : '';
                         extend = j.extend ? j.extend : '';
-                        html.push('<a href="' + url + '" class="' + classname + '" ' + (confirm ? confirm + ' ' : '') + (refresh ? refresh + ' ' : '') + extend + ' title="' + title + '" data-table-id="' + (table ? table.attr("id") : '') + '" data-column-index="' + columnIndex + '" data-row-index="' + index + '" data-button-index="' + i + '"><i class="' + icon + '"></i>' + (text ? ' ' + text : '') + '</a>');
+                        html.push('<a href="' + url + '" class="' + classname + '" ' + (confirm ? confirm + ' ' : '') + (refresh ? refresh + ' ' : '') + extend + ' title="' + title + '" data-table-id="' + (table ? table.attr("id") : '') + '" data-field-index="' + fieldIndex + '" data-row-index="' + index + '" data-button-index="' + i + '"><i class="' + icon + '"></i>' + (text ? ' ' + text : '') + '</a>');
                     }
                 });
                 return html.join(' ');
--
libgit2 0.24.0