From 1928627db71fc1503eae5e9113c04a7c021c46b7 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Thu, 9 Mar 2023 01:31:02 +0000 Subject: [PATCH] * Finish task #86268. --- module/group/control.php | 34 ++++++++++++++++++++++ module/group/css/manageprivpackage.css | 7 +++++ module/group/js/manageprivpackage.js | 40 ++++++++++++++++++++++++++ module/group/model.php | 2 +- 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 module/group/js/manageprivpackage.js diff --git a/module/group/control.php b/module/group/control.php index 83ce41fe6b..9dbc3764eb 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -528,4 +528,38 @@ class group extends control $tree .= ''; return print($tree); } + + /** + * Sort priv packages. + * + * @param int $parentID + * @param int $grade + * @access public + * @return void + */ + public function sortPrivPackages($parentID = 0, $grade = 0) + { + $orders = $_POST['orders']; + if(empty($orders)) return false; + if($grade == '1') + { + $orders = str_replace('View,', ',', $orders); + $orders = trim($orders, ','); + $this->loadModel('setting')->setItem("system.priv.views", $orders); + } + if($grade == '2') + { + $orders = trim($orders, ','); + $parentID = rtrim($parentID, 'View'); + $this->loadModel('setting')->setItem("system.priv.{$parentID}Modules", $orders); + } + if($grade == '3') + { + $orders = explode(',', $orders); + foreach($orders as $index => $id) + { + if(!empty($id)) $this->dao->update(TABLE_PRIVPACKAGE)->set('order')->eq(($index + 1) * 5)->where('id')->eq($id)->exec(); + } + } + } } diff --git a/module/group/css/manageprivpackage.css b/module/group/css/manageprivpackage.css index 409c7fcb1f..239f3d0587 100644 --- a/module/group/css/manageprivpackage.css +++ b/module/group/css/manageprivpackage.css @@ -2,3 +2,10 @@ .c-name {min-width: 200px;} .c-desc {min-width: 200px;} .c-order {width: 50px;} + +#privPackageTableList.sortable-sorting > tr {opacity: 0.7} +#privPackageTableList.sortable-sorting > tr.drag-row {opacity: 1;} +#privPackageTableList > tr.drop-not-allowed {opacity: 0.1!important} +tbody.sortable > tr > td.sort-handler .table-nest-toggle:before {cursor: pointer !important;} +tbody.sortable > tr > td.sort-handler {color: #3c4353 !important;} + diff --git a/module/group/js/manageprivpackage.js b/module/group/js/manageprivpackage.js new file mode 100644 index 0000000000..1f17308144 --- /dev/null +++ b/module/group/js/manageprivpackage.js @@ -0,0 +1,40 @@ +$(function() +{ + $list = $('#privPackageTableList'); + $list.addClass('sortable').sortable( + { + selector: 'tr', + dragCssClass: 'drag-row', + trigger: $list.find('.sort-handler').length ? '.sort-handler' : null, + before: function(e) + { + // if($(e.event.target).closest('a,.btn').length) return false; + }, + canMoveHere: function($ele, $target) + { + return $ele.data('parent') === $target.data('parent'); + }, + start: function(e) + { + e.targets.filter('[data-parent!="' + e.element.attr('data-parent') + '"]').addClass('drop-not-allowed'); + }, + finish: function(e) + { + var orders = ''; + var $parent = $(e.element).data('parent'); + var parentID = typeof $parent == 'object' ? $parent.id : 0; + var grade = typeof $parent == 'object' ? parseInt($parent.level + 1) : 1; + $list.find('tr[data-parent="' + parentID + '"]').each(function(){ + orders += $(this).data('id') + ','; + }); + + $.post(createLink('group', 'sortPrivPackages', 'parent=' + parentID + '&grade=' + grade), {'orders': orders}); + + e.element.addClass('drop-success'); + setTimeout(function(){e.element.removeClass('drop-success');}, 800); + $list.children('.drop-not-allowed').removeClass('drop-not-allowed'); + $('#privPackageForm').table('initNestedList') + } + + }); +}) diff --git a/module/group/model.php b/module/group/model.php index 636e4ad449..742d72889b 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -839,7 +839,7 @@ class groupModel extends model */ public function getPrivPackagesByModule($module) { - return $this->dao->select('*')->from(TABLE_PRIVPACKAGE)->where('module')->eq($module)->fetchAll('id'); + return $this->dao->select('*')->from(TABLE_PRIVPACKAGE)->where('module')->eq($module)->orderBy('order_asc')->fetchAll('id'); } /**