jqh il y a 5 ans
Parent
commit
bae3f2a4c1

+ 3 - 0
resources/assets/dcat/js/bootstrappers/Pjax.js

@@ -9,6 +9,9 @@ export default class Pjax {
     boot(Dcat) {
         let container = Dcat.config.pjax_container_selector;
 
+        $.pjax.defaults.timeout = 5000;
+        $.pjax.defaults.maxCacheLength = 0;
+
         $('a:not(a[target="_blank"])').click(function (event) {
             $.pjax.click(event, container, { fragment: 'body' });
         });

+ 11 - 2
resources/assets/dcat/js/dcat-app.js

@@ -53,17 +53,26 @@ function extend (Dcat) {
     };
 }
 
-// 初始化事件监听
+// 初始化
 function listen(Dcat) {
     Dcat.booting(function () {
         new Footer(Dcat);
         new Pjax(Dcat);
 
+        // layer弹窗设置
+        layer.config({maxmin: true, moveOut: true, shade: false});
+
+        // ajax全局设置
+        $.ajaxSetup({
+            cache: true,
+            error: Dcat.handleAjaxError
+        });
+
         Dcat.NP.configure({parent: '.app-content'});
     });
 }
 
-// 初始化
+// 开始初始化
 function boot(Dcat) {
     extend(Dcat);
     listen(Dcat);

+ 16 - 1
resources/assets/dcat/js/extensions/Grid.js

@@ -1,10 +1,25 @@
 
+let defaultName = '_def_';
+
 export default class Grid {
     constructor(Dcat) {
-        Dcat.grid = this
+        Dcat.grid = this;
+
+        this.selectors = {};
     }
 
+    // 添加行选择器对象
     addSelector(selector, name) {
+        this.selectors[name || defaultName] = selector
+    }
+
+    // 获取行选择器选中的ID字符串
+    selected(name) {
+        return this.selectors[name || defaultName].getSelectedKeys()
+    }
 
+    // 获取行选择器选中的行
+    selectedRows(name) {
+        return this.selectors[name || defaultName].getSelectedRows()
     }
 }

+ 96 - 1
resources/assets/dcat/js/extensions/RowSelector.js

@@ -1,5 +1,100 @@
 
 export default class RowSelector {
-    constructor() {
+    constructor(options) {
+        let _this = this;
+
+        _this.options = $.extend({
+            // checkbox css选择器
+            checkboxSelector: '',
+            // 全选checkbox css选择器
+            selectAllSelector: '',
+            // 选中效果颜色
+            background: 'rgba(255, 255,213,0.4)',
+            // 点击行事件
+            clickRow: false, 
+        }, options);
+
+        _this._bind()
+    }
+
+    _bind() {
+        let options = this.options,
+            checkboxSelector = options.checkboxSelector,
+            selectAllSelector = options.selectAllSelector,
+            $ckb = $(checkboxSelector);
+
+        $(selectAllSelector).on('change', function() {
+            var cbx = $(checkboxSelector);
+
+            for (var i = 0; i < cbx.length; i++) {
+                if (this.checked && !cbx[i].checked) {
+                    cbx[i].click();
+                } else if (!this.checked && cbx[i].checked) {
+                    cbx[i].click();
+                }
+            }
+        });
+        if (options.clickRow) {
+            $ckb.click(function (e) {
+                if (typeof e.cancelBubble != "undefined") {
+                    e.cancelBubble = true;
+                }
+                if (typeof e.stopPropagation != "undefined") {
+                    e.stopPropagation();
+                }
+            }).parents('tr').click(function (e) {
+                $(this).find(checkboxSelector).click();
+            });
+        }
+
+        $ckb.on('change', function () {
+            var tr = $(this).closest('tr');
+            if (this.checked) {
+                tr.css('background-color', options.background);
+            } else {
+                tr.css('background-color', '');
+            }
+        });
+    }
+
+    /**
+     * 获取选中的主键数组
+     *
+     * @returns {Array}
+     */
+    getSelectedKeys() {
+        let selected = [];
+
+        $(this.options.checkboxSelector+':checked').each(function() {
+            var id = $(this).data('id');
+            if (selected.indexOf(id) === -1) {
+                selected.push(id);
+            }
+        });
+
+        return selected;
+    }
+
+    /**
+     * 获取选中的行数组
+     *
+     * @returns {Array}
+     */
+    getSelectedRows() {
+        let selected = [];
+
+        $(this.options.checkboxSelector+':checked').each(function() {
+            var id = $(this).data('id'), i, exist;
+
+            for (i in selected) {
+                if (selected[i].id === id) {
+                    exist = true
+                }
+            }
+
+            exist || selected.push({'id': id, 'label': $(this).data('label')})
+        });
+
+        return selected;
     }
 }

+ 4 - 4
src/Grid/Tools/RowSelector.php

@@ -93,10 +93,10 @@ EOT;
         Admin::script(
             <<<JS
 var selector = Dcat.RowSelector({
-    checkbox: '.{$this->grid->getRowName()}-checkbox',
-    selectAll: '.{$this->grid->getSelectAllName()}', 
-    clickTr: {$clickable},
-    bg: '{$background}',
+    checkboxSelector: '.{$this->grid->getRowName()}-checkbox',
+    selectAllSelector: '.{$this->grid->getSelectAllName()}', 
+    clickRow: {$clickable},
+    background: '{$background}',
 });
 Dcat.grid.addSelector(selector, '{$this->grid->getName()}');
 JS