From 6b7cbc74abf0bc3bbf4ce03f135bdd7e885afceb Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 21 Dec 2021 17:16:46 +0800 Subject: [PATCH] * Fix bug #17724, #17769, #17768, #17765, #17763, #17737. --- module/kanban/css/view.css | 10 +++---- module/kanban/js/view.js | 41 ++++++++++++++--------------- module/kanban/lang/en.php | 4 +++ module/kanban/lang/zh-cn.php | 6 ++++- module/kanban/view/create.html.php | 4 +++ module/kanban/view/edit.html.php | 4 +++ module/kanban/view/setlane.html.php | 2 +- module/kanban/view/view.html.php | 1 + 8 files changed, 44 insertions(+), 28 deletions(-) diff --git a/module/kanban/css/view.css b/module/kanban/css/view.css index d46d8b1115..42898f7ffb 100644 --- a/module/kanban/css/view.css +++ b/module/kanban/css/view.css @@ -76,11 +76,11 @@ body {background-color: #fff} .region .kanban-item > .kanban-card > .actions > a {display: block; float: left; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 4px; opacity: .7;} .region .kanban-item > .kanban-card > .actions > a:hover {background-color: rgba(0,0,0,.075); opacity: 1;} .region .kanban-item:hover > .actions {opacity: 1;} -.region .kanban-item.has-color .title, -.region .kanban-item.has-color .actions .icon-more-v, -.region .kanban-item.has-color .info > .label-pri, -.region .kanban-item.has-color .info > .label-light {color: #FFFFFF;} -.region .kanban-item.has-color .info > .label-pri {border-color: #FFFFFF;} +.region .kanban-item .has-color .title, +.region .kanban-item .has-color .actions .icon-more-v, +.region .kanban-item .has-color .info > .label-pri, +.region .kanban-item .has-color .info > .label-light {color: #FFFFFF;} +.region .kanban-item .has-color .info > .label-pri {border-color: #FFFFFF;} .region .kanban-item .item-more {position: absolute; right: 6px; top: 0px;} .kanban-card {height: 60px !important} diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 92cb6cf10d..2037592f5a 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -320,16 +320,8 @@ function renderKanbanItem(item, $item) $user.html(renderUsersAvatar(assignedTo, item.id)).attr('title', title); $item.css('background-color', item.color); - $item.toggleClass('has-color', item.color != '#FFFFFF'); - if(item.color == '#FFFFFF') - { - $item.find('.info > .label-light').css('background-color', '#F2F2F2'); - } - else - { - var colors = {'#E01B1B': '#DD5858', '#F7B500': '#ECC046', '#288427': '#609F60'} - $item.find('.info > .label-light').css('background-color', colors[item.color]); - } + $item.toggleClass('has-color', item.color != '#fff'); + $item.find('.info > .label-light').css('background-color', item.color); } /** @@ -385,7 +377,7 @@ function moveCard(cardID, toColID, kanbanID, regionID) success: function(data) { regions = data; - updateRegion(regionID, data[regionID].groups[0]); + updateRegion(regionID, data[regionID]); }, error: function(xhr, status, error) { @@ -417,7 +409,7 @@ function setCardColor(cardID, color, kanbanID, regionID) success: function(data) { regions = data; - updateRegion(regionID, data[regionID].groups[0]); + updateRegion(regionID, data[regionID]); }, error: function(xhr, status, error) { @@ -427,7 +419,7 @@ function setCardColor(cardID, color, kanbanID, regionID) } /** - * Update a region + * Update a region. * * @param int regionID * @param array regionData @@ -438,12 +430,12 @@ function updateRegion(regionID, regionData = []) { if(!regionID) return false; - var $kanban = $('#kanban'+ regionID).kanban(); + var $region = $('#kanban'+ regionID).kanban(); - if(!$kanban.length) return false; - if(!regionData) regionData = regions[regionID].groups[0]; + if(!$region.length) return false; + if(!regionData) regionData = regions[regionID]; - $kanban.data('zui.kanban').render(regionData); + $region.data('zui.kanban').render(regionData.groups); return true; } @@ -691,7 +683,7 @@ function createLaneMenu(options) if(!privs.length) return []; var items = []; - if(privs.includes('setLane')) items.push({label: kanbanLang.editLane, icon: 'edit', url: createLink('kanban', 'setLane', 'laneID=' + lane.id + '&executionID=0&from=kanban'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '635px'}}); + if(privs.includes('setLane')) items.push({label: kanbanLang.setLane, icon: 'edit', url: createLink('kanban', 'setLane', 'laneID=' + lane.id + '&executionID=0&from=kanban'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '635px'}}); if(privs.includes('deleteLane')) items.push({label: kanbanLang.deleteLane, icon: 'trash', url: createLink('kanban', 'deleteLane', 'lane=' + lane.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbanlaneLang.confirmDelete, 'data-confirmDetail': kanbanlaneLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); var bounds = options.$trigger[0].getBoundingClientRect(); @@ -714,13 +706,20 @@ function createCardMenu(options) var items = []; if(privs.includes('editCard')) items.push({label: kanbanLang.editCard, icon: 'edit', url: createLink('kanban', 'editCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); - if(privs.includes('archiveCard')) items.push({label: kanbanLang.archiveCard, icon: 'card-archive', url: createLink('kanban', 'archiveCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); + if(privs.includes('archiveCard') && kanban.archived == '0') items.push({label: kanbanLang.archiveCard, icon: 'card-archive', url: createLink('kanban', 'archiveCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); if(privs.includes('copyCard')) items.push({label: kanbanLang.copyCard, icon: 'copy', url: createLink('kanban', 'copyCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); if(privs.includes('deleteCard')) items.push({label: kanbanLang.deleteCard, icon: 'trash', url: createLink('kanban', 'deleteCard', 'cardID=' + card.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmDelete, 'data-confirmDetail': kanbancolumnLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); if(privs.includes('moveCard')) { var moveCardItems = []; - var moveColumns = regions[options.$trigger.closest('.region').data('id')].groups[0].columns; + var moveColumns = []; + regions[options.$trigger.closest('.region').data('id')].groups.forEach(function(group){ + if(group.id == options.$trigger.closest('.kanban-board').data('id')) + { + moveColumns = group.columns; + break; + } + }); var parentColumns = []; for(let i = moveColumns.length-1 ; i >= 0 ; i -- ) { @@ -767,7 +766,7 @@ function createColumnMenu(options) items.push({label: kanbanLang.createColumnOnRight, icon: 'col-add-right', url: createLink('kanban', 'createColumn', 'columnID=' + column.id + '&position=right'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); } if(privs.includes('copyColumn')) items.push({label: kanbanLang.copyColumn, icon: 'copy', url: createLink('kanban', 'copyColumn', 'columnID=' + column.id), className: 'iframe', attrs: {'data-toggle': 'modal'}}); - if(privs.includes('archiveColumn')) items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmArchive, 'data-confirmDetail': kanbancolumnLang.confirmArchiveDetail, 'data-confirmButton': lang.archive, 'data-confirming': lang.archiving}}); + if(privs.includes('archiveColumn') && kanban.archived == '0') items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmArchive, 'data-confirmDetail': kanbancolumnLang.confirmArchiveDetail, 'data-confirmButton': lang.archive, 'data-confirming': lang.archiving}}); if(privs.includes('deleteColumn')) items.push({label: kanbanLang.deleteColumn, icon: 'trash', url: createLink('kanban', 'deleteColumn', 'columnID=' + column.id), className: 'confirmer', attrs: {'data-confirmTitle': kanbancolumnLang.confirmDelete, 'data-confirmDetail': kanbancolumnLang.confirmDeleteDetail, 'target': 'hiddenwin'}}); var bounds = options.$trigger[0].getBoundingClientRect(); diff --git a/module/kanban/lang/en.php b/module/kanban/lang/en.php index ab0b075090..3b6f139df5 100644 --- a/module/kanban/lang/en.php +++ b/module/kanban/lang/en.php @@ -47,6 +47,7 @@ $lang->kanban->custom = 'Custom'; /* Fields. */ $lang->kanban->space = 'Space'; $lang->kanban->name = 'Name'; +$lang->kanban->archived = 'Archive'; $lang->kanban->owner = 'Owner'; $lang->kanban->team = 'Team'; $lang->kanban->desc = 'Description'; @@ -75,6 +76,9 @@ $lang->kanban->aclGroup['private'] = 'Private'; $lang->kanban->aclList['open'] = 'Open (Accessible with space view permissions)'; $lang->kanban->aclList['private'] = 'Private (For the kanban team, whitelist members and space owner only)'; +$lang->kanban->enableArchived['0'] = 'Enable'; +$lang->kanban->enableArchived['1'] = 'No Enable'; + $lang->kanban->type = array(); $lang->kanban->type['all'] = "All KanBan"; $lang->kanban->type['story'] = "Story KanBan"; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index ded54ff4a2..1cfaa31e6b 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -15,7 +15,7 @@ $lang->kanban->editRegion = '编辑区域'; $lang->kanban->sortRegion = '区域排序'; $lang->kanban->deleteRegion = '删除区域'; $lang->kanban->createLane = '创建泳道'; -$lang->kanban->editLane = '编辑泳道'; +$lang->kanban->editLane = '泳道设置'; $lang->kanban->sortLane = '泳道排序'; $lang->kanban->deleteLane = '删除泳道'; $lang->kanban->createColumn = '创建看板列'; @@ -47,6 +47,7 @@ $lang->kanban->custom = '自定义'; /* Fields. */ $lang->kanban->space = '所属空间'; $lang->kanban->name = '看板名称'; +$lang->kanban->archived = '归档功能'; $lang->kanban->owner = '负责人'; $lang->kanban->team = '团队'; $lang->kanban->desc = '看板描述'; @@ -75,6 +76,9 @@ $lang->kanban->aclList['private'] = '私有(看板团队成员、白名单、 $lang->kanban->aclGroup['open'] = '公开'; $lang->kanban->aclGroup['private'] = '私有'; +$lang->kanban->enableArchived['0'] = '启用'; +$lang->kanban->enableArchived['1'] = '不启用'; + $lang->kanban->type = array(); $lang->kanban->type['all'] = "综合看板"; $lang->kanban->type['story'] = "{$lang->SRCommon}看板"; diff --git a/module/kanban/view/create.html.php b/module/kanban/view/create.html.php index abef45683f..042fc390ac 100644 --- a/module/kanban/view/create.html.php +++ b/module/kanban/view/create.html.php @@ -27,6 +27,10 @@ kanban->name;?> + + kanban->archived;?> + kanban->enableArchived, '0');?> + kanban->owner;?> diff --git a/module/kanban/view/edit.html.php b/module/kanban/view/edit.html.php index 4fd146aac5..d114676341 100644 --- a/module/kanban/view/edit.html.php +++ b/module/kanban/view/edit.html.php @@ -27,6 +27,10 @@ kanban->name;?> name, "class='form-control'");?> + + kanban->archived;?> + kanban->enableArchived, $kanban->archived);?> + kanban->owner;?> owner, "class='form-control chosen'");?> diff --git a/module/kanban/view/setlane.html.php b/module/kanban/view/setlane.html.php index f8f06118ea..fc7e06787b 100644 --- a/module/kanban/view/setlane.html.php +++ b/module/kanban/view/setlane.html.php @@ -15,7 +15,7 @@

- kanban->editLane;?> + kanban->setLane;?>

diff --git a/module/kanban/view/view.html.php b/module/kanban/view/view.html.php index e3d3d71fde..9548ec184b 100644 --- a/module/kanban/view/view.html.php +++ b/module/kanban/view/view.html.php @@ -18,6 +18,7 @@ $laneCount = 0; foreach($regions as $region) $laneCount += $region->laneCount; js::set('regions', $regions); +js::set('kanban', $kanban); js::set('kanbanLang', $lang->kanban); js::set('kanbanlaneLang', $lang->kanbanlane); js::set('kanbancolumnLang', $lang->kanbancolumn);