* Finish task #47973.

This commit is contained in:
liumengyi
2022-01-24 10:36:33 +08:00
parent b2342fd7fb
commit bc9f51c63d
3 changed files with 63 additions and 11 deletions
+24 -1
View File
@@ -466,7 +466,7 @@ class kanban extends control
* @param int $regionID
* @param string $lanes
* @access public
* @return void
* @return array
*/
public function sortLane($regionID, $lanes = '')
{
@@ -483,6 +483,29 @@ class kanban extends control
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
}
/**
* Sort columns.
*
* @param int $regionID
* @param int $kanbanID
* @param string $columns
* @access public
* @return array|string
*/
public function sortColumn($regionID, $kanbanID, $columns = '')
{
if(empty($columns)) return;
$columns = explode(',', trim($columns, ','));
$order = 1;
foreach($columns as $columnID) $this->dao->update(TABLE_KANBANCOLUMN)->set('`order`')->eq($order++)->where('id')->eq($columnID)->andWhere('region')->eq($regionID)->exec();
$kanbanGroup = $this->kanban->getKanbanData($kanbanID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return print(json_encode($kanbanGroup));
}
/**
* Set lane height.
*
+36 -9
View File
@@ -111,7 +111,7 @@ function renderHeaderCol($column, column, $header, kanbanData)
{
/* Render group header. */
var privs = kanbanData.actions;
var columnPrivs = kanbanData.columns[0].actions;
var columnPrivs = $column.data().col.actions;
if(privs.includes('sortGroup'))
{
@@ -151,6 +151,16 @@ function renderHeaderCol($column, column, $header, kanbanData)
$actions.html(addItemBtn + moreAction);
}
if(columnPrivs.includes('sortColumn')){
if($column.hasClass('kanban-header-parent-col'))
{
$column.children('.kanban-header-col').addClass('sort');
}
else
{
$column.addClass('sort');
}
}
}
/**
@@ -1017,8 +1027,8 @@ $(function()
var $cards = null;
$('#kanban').sortable(
{
selector: '.region, .kanban-board, .kanban-lane, .kanban-item.sort',
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name, .kanban-item.sort',
selector: '.region, .kanban-board, .kanban-lane, .kanban-item.sort, .kanban-col',
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name, .kanban-item.sort, .kanban-col.sort',
container: function($ele)
{
return $ele.parent();
@@ -1048,6 +1058,13 @@ $(function()
return $ele.parent().children('.kanban-lane');
}
/* Sort columns. */
if($ele.hasClass('kanban-col'))
{
sortType = 'column';
return $ele.parent().children('.kanban-col');
}
/* Sort cards. */
if($ele.hasClass('kanban-item'))
{
@@ -1078,8 +1095,9 @@ $(function()
},
finish: function(e)
{
var url = '';
var orders = [];
var url = '';
var orders = [];
var regionID = '';
e.list.each(function(index, data)
{
orders.push(data.item.data('id'));
@@ -1100,13 +1118,18 @@ $(function()
}
if(sortType == 'board')
{
var region = e.element.parent().data('id');
url = createLink('kanban', 'sortGroup', 'region=' + region + '&groups=' + orders.join(','));
regionID = e.element.closest('.region').data('id');
url = createLink('kanban', 'sortGroup', 'region=' + regionID + '&groups=' + orders.join(','));
}
if(sortType == 'lane')
{
var region = e.element.parent().parent().data('id');
url = createLink('kanban', 'sortLane', 'region=' + region + '&lanes=' + orders.join(','));
regionID = e.element.closest('.region').data('id');
url = createLink('kanban', 'sortLane', 'region=' + regionID + '&lanes=' + orders.join(','));
}
if(sortType == 'column')
{
regionID = e.element.closest('.region').data('id');
url = createLink('kanban', 'sortColumn', 'region=' + regionID + '&kanbanID=' + kanban.id + '&columns=' + orders.join(','));
}
if(sortType == 'card')
{
@@ -1123,6 +1146,10 @@ $(function()
bootbox.alert(response.message);
setTimeout(function(){return location.reload()}, 3000);
}
else if (sortType == 'column')
{
updateRegion(regionID, response[regionID]);
}
});
},
always: function(e)
+3 -1
View File
@@ -879,7 +879,7 @@ class kanbanModel extends model
->orderBy($order)
->fetchGroup('group');
$actions = array('createColumn', 'setColumn', 'setWIP', 'archiveColumn', 'restoreColumn', 'deleteColumn', 'createCard', 'batchCreateCard', 'splitColumn');
$actions = array('createColumn', 'setColumn', 'setWIP', 'archiveColumn', 'restoreColumn', 'deleteColumn', 'createCard', 'batchCreateCard', 'splitColumn', 'sortColumn');
/* Group by parent. */
$parentColumnGroup = array();
@@ -3168,6 +3168,8 @@ class kanbanModel extends model
->fetch('count');
return $count > 1;
case 'sortColumn' :
if($object->deleted != '0') return false;
}
return true;